Commit ea4b3cfa authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'mmc-v4.7-rc7' of git://git.linaro.org/people/ulf.hansson/mmc

Pull MMC fixes from Ulf Hansson:
 "Here are a few late mmc fixes intended for v4.7 final.

  MMC core:
   - Fix eMMC packed command header endianness
   - Fix free of uninitialized buffer for mmc ioctl

  MMC host:
   - pxamci: Fix potential oops in ->probe()"

* tag 'mmc-v4.7-rc7' of git://git.linaro.org/people/ulf.hansson/mmc:
  mmc: pxamci: fix potential oops
  mmc: block: fix packed command header endianness
  mmc: block: fix free of uninitialized 'idata->buf'
parents b6cbecae b3802db5
...@@ -355,8 +355,10 @@ static struct mmc_blk_ioc_data *mmc_blk_ioctl_copy_from_user( ...@@ -355,8 +355,10 @@ static struct mmc_blk_ioc_data *mmc_blk_ioctl_copy_from_user(
goto idata_err; goto idata_err;
} }
if (!idata->buf_bytes) if (!idata->buf_bytes) {
idata->buf = NULL;
return idata; return idata;
}
idata->buf = kmalloc(idata->buf_bytes, GFP_KERNEL); idata->buf = kmalloc(idata->buf_bytes, GFP_KERNEL);
if (!idata->buf) { if (!idata->buf) {
...@@ -1786,8 +1788,8 @@ static void mmc_blk_packed_hdr_wrq_prep(struct mmc_queue_req *mqrq, ...@@ -1786,8 +1788,8 @@ static void mmc_blk_packed_hdr_wrq_prep(struct mmc_queue_req *mqrq,
packed_cmd_hdr = packed->cmd_hdr; packed_cmd_hdr = packed->cmd_hdr;
memset(packed_cmd_hdr, 0, sizeof(packed->cmd_hdr)); memset(packed_cmd_hdr, 0, sizeof(packed->cmd_hdr));
packed_cmd_hdr[0] = (packed->nr_entries << 16) | packed_cmd_hdr[0] = cpu_to_le32((packed->nr_entries << 16) |
(PACKED_CMD_WR << 8) | PACKED_CMD_VER; (PACKED_CMD_WR << 8) | PACKED_CMD_VER);
hdr_blocks = mmc_large_sector(card) ? 8 : 1; hdr_blocks = mmc_large_sector(card) ? 8 : 1;
/* /*
...@@ -1801,14 +1803,14 @@ static void mmc_blk_packed_hdr_wrq_prep(struct mmc_queue_req *mqrq, ...@@ -1801,14 +1803,14 @@ static void mmc_blk_packed_hdr_wrq_prep(struct mmc_queue_req *mqrq,
((brq->data.blocks * brq->data.blksz) >= ((brq->data.blocks * brq->data.blksz) >=
card->ext_csd.data_tag_unit_size); card->ext_csd.data_tag_unit_size);
/* Argument of CMD23 */ /* Argument of CMD23 */
packed_cmd_hdr[(i * 2)] = packed_cmd_hdr[(i * 2)] = cpu_to_le32(
(do_rel_wr ? MMC_CMD23_ARG_REL_WR : 0) | (do_rel_wr ? MMC_CMD23_ARG_REL_WR : 0) |
(do_data_tag ? MMC_CMD23_ARG_TAG_REQ : 0) | (do_data_tag ? MMC_CMD23_ARG_TAG_REQ : 0) |
blk_rq_sectors(prq); blk_rq_sectors(prq));
/* Argument of CMD18 or CMD25 */ /* Argument of CMD18 or CMD25 */
packed_cmd_hdr[((i * 2)) + 1] = packed_cmd_hdr[((i * 2)) + 1] = cpu_to_le32(
mmc_card_blockaddr(card) ? mmc_card_blockaddr(card) ?
blk_rq_pos(prq) : blk_rq_pos(prq) << 9; blk_rq_pos(prq) : blk_rq_pos(prq) << 9);
packed->blocks += blk_rq_sectors(prq); packed->blocks += blk_rq_sectors(prq);
i++; i++;
} }
......
...@@ -789,14 +789,16 @@ static int pxamci_probe(struct platform_device *pdev) ...@@ -789,14 +789,16 @@ static int pxamci_probe(struct platform_device *pdev)
gpio_direction_output(gpio_power, gpio_direction_output(gpio_power,
host->pdata->gpio_power_invert); host->pdata->gpio_power_invert);
} }
if (gpio_is_valid(gpio_ro)) if (gpio_is_valid(gpio_ro)) {
ret = mmc_gpio_request_ro(mmc, gpio_ro); ret = mmc_gpio_request_ro(mmc, gpio_ro);
if (ret) { if (ret) {
dev_err(&pdev->dev, "Failed requesting gpio_ro %d\n", gpio_ro); dev_err(&pdev->dev, "Failed requesting gpio_ro %d\n",
goto out; gpio_ro);
} else { goto out;
mmc->caps2 |= host->pdata->gpio_card_ro_invert ? } else {
0 : MMC_CAP2_RO_ACTIVE_HIGH; mmc->caps2 |= host->pdata->gpio_card_ro_invert ?
0 : MMC_CAP2_RO_ACTIVE_HIGH;
}
} }
if (gpio_is_valid(gpio_cd)) if (gpio_is_valid(gpio_cd))
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment