mirror of
https://github.com/FUjr/gl-infra-builder.git
synced 2025-12-16 09:10:02 +00:00
48 lines
1.9 KiB
Diff
48 lines
1.9 KiB
Diff
From 69d874827de04468e1418d8783bd8036a6f8a7aa Mon Sep 17 00:00:00 2001
|
|
From: "GL.iNet-Xinfa.Deng" <xinfa.deng@gl-inet.com>
|
|
Date: Wed, 24 Nov 2021 14:20:08 +0800
|
|
Subject: [PATCH] fix: DMA alignment to start at allocated boundary
|
|
|
|
---
|
|
linux-4.14.90-dev/linux-4.14.90/drivers/usb/dwc2/hcd.c | 10 +++++++---
|
|
1 file changed, 7 insertions(+), 3 deletions(-)
|
|
|
|
diff --git a/linux-4.14.90-dev/linux-4.14.90/drivers/usb/dwc2/hcd.c b/linux-4.14.90-dev/linux-4.14.90/drivers/usb/dwc2/hcd.c
|
|
index 3c4658b..2d9cb5f 100644
|
|
--- a/linux-4.14.90-dev/linux-4.14.90/drivers/usb/dwc2/hcd.c
|
|
+++ b/linux-4.14.90-dev/linux-4.14.90/drivers/usb/dwc2/hcd.c
|
|
@@ -2675,8 +2675,10 @@ static void dwc2_free_dma_aligned_buffer(struct urb *urb)
|
|
return;
|
|
|
|
/* Restore urb->transfer_buffer from the end of the allocated area */
|
|
- memcpy(&stored_xfer_buffer, urb->transfer_buffer +
|
|
- urb->transfer_buffer_length, sizeof(urb->transfer_buffer));
|
|
+ memcpy(&stored_xfer_buffer,
|
|
+ PTR_ALIGN(urb->transfer_buffer + urb->transfer_buffer_length,
|
|
+ dma_get_cache_alignment()),
|
|
+ sizeof(urb->transfer_buffer));
|
|
|
|
if (usb_urb_dir_in(urb)) {
|
|
if (usb_pipeisoc(urb->pipe))
|
|
@@ -2708,6 +2710,7 @@ static int dwc2_alloc_dma_aligned_buffer(struct urb *urb, gfp_t mem_flags)
|
|
* DMA
|
|
*/
|
|
kmalloc_size = urb->transfer_buffer_length +
|
|
+ (dma_get_cache_alignment() - 1) +
|
|
sizeof(urb->transfer_buffer);
|
|
|
|
kmalloc_ptr = kmalloc(kmalloc_size, mem_flags);
|
|
@@ -2718,7 +2721,8 @@ static int dwc2_alloc_dma_aligned_buffer(struct urb *urb, gfp_t mem_flags)
|
|
* Position value of original urb->transfer_buffer pointer to the end
|
|
* of allocation for later referencing
|
|
*/
|
|
- memcpy(kmalloc_ptr + urb->transfer_buffer_length,
|
|
+ memcpy(PTR_ALIGN(kmalloc_ptr + urb->transfer_buffer_length,
|
|
+ dma_get_cache_alignment()),
|
|
&urb->transfer_buffer, sizeof(urb->transfer_buffer));
|
|
|
|
if (usb_urb_dir_out(urb))
|
|
--
|
|
2.7.4
|
|
|