In nbu2ss_eq_queue() memory is allocated with dma_alloc_coherent(),
though, strangely, NULL is passed as the struct device* argument. Pass
the UDC's device instead. Fix up the corresponding call to
dma_free_coherent() in the same way.

Build-tested on x86 only.

Fixes: 33aa8d45a4fe ("staging: emxx_udc: Add Emma Mobile USB Gadget driver")
Reported-by: Dan Carpenter <dan.carpen...@oracle.com>
Signed-off-by: Alex Dewar <alex.dewa...@gmail.com>
---
v2: also fix call to dma_free_coherent() (Dan)

@Magnus: I noticed you contributed this code back in 2014... I don't
suppose you happen to have the hardware lying around to test this so we
can get a Tested-by....? :)
---
 drivers/staging/emxx_udc/emxx_udc.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/staging/emxx_udc/emxx_udc.c 
b/drivers/staging/emxx_udc/emxx_udc.c
index 03929b9d3a8bc..d0725bc8b48a4 100644
--- a/drivers/staging/emxx_udc/emxx_udc.c
+++ b/drivers/staging/emxx_udc/emxx_udc.c
@@ -2593,7 +2593,7 @@ static int nbu2ss_ep_queue(struct usb_ep *_ep,
 
        if (req->unaligned) {
                if (!ep->virt_buf)
-                       ep->virt_buf = dma_alloc_coherent(NULL, PAGE_SIZE,
+                       ep->virt_buf = dma_alloc_coherent(udc->dev, PAGE_SIZE,
                                                          &ep->phys_buf,
                                                          GFP_ATOMIC | GFP_DMA);
                if (ep->epnum > 0)  {
@@ -3148,7 +3148,7 @@ static int nbu2ss_drv_remove(struct platform_device *pdev)
        for (i = 0; i < NUM_ENDPOINTS; i++) {
                ep = &udc->ep[i];
                if (ep->virt_buf)
-                       dma_free_coherent(NULL, PAGE_SIZE, (void *)ep->virt_buf,
+                       dma_free_coherent(udc->dev, PAGE_SIZE, (void 
*)ep->virt_buf,
                                          ep->phys_buf);
        }
 
-- 
2.28.0

Reply via email to