summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLoic Poulain <loic.poulain@linaro.org>2021-02-18 18:09:06 +0100
committerLoic Poulain <loic.poulain@linaro.org>2021-02-18 18:13:07 +0100
commitf8d751090c1e810ee22006c711baa276b8af375d (patch)
treee203641fa601a0db909260ebb413d15d167d5369
parentb259fcd3478ff437227724aea8fca47fbf0b45cd (diff)
mhi: uci: Fix buffer size
The buffer size for MHI transfer is currently amputated from it's last bytes by the private buf info structure, fix that and submit full MTU sized packets. Signed-off-by: Loic Poulain <loic.poulain@linaro.org>
-rw-r--r--drivers/bus/mhi/uci.c11
1 files changed, 4 insertions, 7 deletions
diff --git a/drivers/bus/mhi/uci.c b/drivers/bus/mhi/uci.c
index def063e6d9b7..e08882a61b69 100644
--- a/drivers/bus/mhi/uci.c
+++ b/drivers/bus/mhi/uci.c
@@ -124,7 +124,6 @@ static int mhi_queue_inbound(struct uci_dev *udev)
struct mhi_device *mhi_dev = udev->mhi_dev;
struct device *dev = &mhi_dev->dev;
int nr_desc, i, ret = -EIO;
- size_t dl_buf_size;
void *buf;
struct uci_buf *ubuf;
@@ -138,20 +137,18 @@ static int mhi_queue_inbound(struct uci_dev *udev)
nr_desc = mhi_get_free_desc_count(mhi_dev, DMA_FROM_DEVICE);
for (i = 0; i < nr_desc; i++) {
- buf = kmalloc(udev->mtu, GFP_KERNEL);
+ buf = kmalloc(udev->mtu + sizeof(*ubuf), GFP_KERNEL);
if (!buf)
return -ENOMEM;
- dl_buf_size = udev->mtu - sizeof(*ubuf);
-
/* save uci_buf info at the end of buf */
- ubuf = buf + dl_buf_size;
+ ubuf = buf + udev->mtu;
ubuf->data = buf;
dev_dbg(dev, "Allocated buf %d of %d size %zu\n", i, nr_desc,
- dl_buf_size);
+ udev->mtu + sizeof(*ubuf));
- ret = mhi_queue_buf(mhi_dev, DMA_FROM_DEVICE, buf, dl_buf_size,
+ ret = mhi_queue_buf(mhi_dev, DMA_FROM_DEVICE, buf, udev->mtu,
MHI_EOT);
if (ret) {
kfree(buf);