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-03-05 13:40:53 +0100
commitaf9423075a2a7091e2b329fcaa2007853a3358c9 (patch)
tree2c0f16233421aa1ee2a0e9aed3eb2879af3e2ab7
parentb4a8cfad6645e3853ed99604bfaaf6612379cd42 (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);