diff options
author | Frank Li <Frank.Li@nxp.com> | 2023-05-18 16:49:46 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2023-05-29 15:52:37 +0100 |
commit | 3124387537bc94251e65c2841062d14736380ec4 (patch) | |
tree | 92910d9061d9839f529d19d007c61a9a4971b3c2 /drivers/usb/cdns3 | |
parent | 2a1c4639d6d6bcee27f74e38f83ffb43579c4733 (diff) | |
download | linux-3124387537bc94251e65c2841062d14736380ec4.tar.gz linux-3124387537bc94251e65c2841062d14736380ec4.tar.bz2 linux-3124387537bc94251e65c2841062d14736380ec4.zip |
usb: cdns3: optimize OUT transfer by copying only actual received data
Previously, the entire length of the request, which is equal to or greater
than the actual data, was dma synced and memcpy when using the bounce
buffer. Actually only the actual data indicated by request->actual need be
synced and copied.
Signed-off-by: Frank Li <Frank.Li@nxp.com>
Link: https://lore.kernel.org/r/20230518204947.3770236-2-Frank.Li@nxp.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/usb/cdns3')
-rw-r--r-- | drivers/usb/cdns3/cdns3-gadget.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/drivers/usb/cdns3/cdns3-gadget.c b/drivers/usb/cdns3/cdns3-gadget.c index d2cedd6db88f..27199198cc26 100644 --- a/drivers/usb/cdns3/cdns3-gadget.c +++ b/drivers/usb/cdns3/cdns3-gadget.c @@ -809,10 +809,10 @@ void cdns3_gadget_giveback(struct cdns3_endpoint *priv_ep, /* Make DMA buffer CPU accessible */ dma_sync_single_for_cpu(priv_dev->sysdev, priv_req->aligned_buf->dma, - priv_req->aligned_buf->size, + request->actual, priv_req->aligned_buf->dir); memcpy(request->buf, priv_req->aligned_buf->buf, - request->length); + request->actual); } priv_req->flags &= ~(REQUEST_PENDING | REQUEST_UNALIGNED); |