diff options
-rw-r--r-- | drivers/usb/dwc2/hcd.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/drivers/usb/dwc2/hcd.c b/drivers/usb/dwc2/hcd.c index 5c51bf5506d1..2192a2873c7c 100644 --- a/drivers/usb/dwc2/hcd.c +++ b/drivers/usb/dwc2/hcd.c | |||
@@ -2480,8 +2480,10 @@ static void dwc2_free_dma_aligned_buffer(struct urb *urb) | |||
2480 | return; | 2480 | return; |
2481 | 2481 | ||
2482 | /* Restore urb->transfer_buffer from the end of the allocated area */ | 2482 | /* Restore urb->transfer_buffer from the end of the allocated area */ |
2483 | memcpy(&stored_xfer_buffer, urb->transfer_buffer + | 2483 | memcpy(&stored_xfer_buffer, |
2484 | urb->transfer_buffer_length, sizeof(urb->transfer_buffer)); | 2484 | PTR_ALIGN(urb->transfer_buffer + urb->transfer_buffer_length, |
2485 | dma_get_cache_alignment()), | ||
2486 | sizeof(urb->transfer_buffer)); | ||
2485 | 2487 | ||
2486 | if (usb_urb_dir_in(urb)) { | 2488 | if (usb_urb_dir_in(urb)) { |
2487 | if (usb_pipeisoc(urb->pipe)) | 2489 | if (usb_pipeisoc(urb->pipe)) |
@@ -2513,6 +2515,7 @@ static int dwc2_alloc_dma_aligned_buffer(struct urb *urb, gfp_t mem_flags) | |||
2513 | * DMA | 2515 | * DMA |
2514 | */ | 2516 | */ |
2515 | kmalloc_size = urb->transfer_buffer_length + | 2517 | kmalloc_size = urb->transfer_buffer_length + |
2518 | (dma_get_cache_alignment() - 1) + | ||
2516 | sizeof(urb->transfer_buffer); | 2519 | sizeof(urb->transfer_buffer); |
2517 | 2520 | ||
2518 | kmalloc_ptr = kmalloc(kmalloc_size, mem_flags); | 2521 | kmalloc_ptr = kmalloc(kmalloc_size, mem_flags); |
@@ -2523,7 +2526,8 @@ static int dwc2_alloc_dma_aligned_buffer(struct urb *urb, gfp_t mem_flags) | |||
2523 | * Position value of original urb->transfer_buffer pointer to the end | 2526 | * Position value of original urb->transfer_buffer pointer to the end |
2524 | * of allocation for later referencing | 2527 | * of allocation for later referencing |
2525 | */ | 2528 | */ |
2526 | memcpy(kmalloc_ptr + urb->transfer_buffer_length, | 2529 | memcpy(PTR_ALIGN(kmalloc_ptr + urb->transfer_buffer_length, |
2530 | dma_get_cache_alignment()), | ||
2527 | &urb->transfer_buffer, sizeof(urb->transfer_buffer)); | 2531 | &urb->transfer_buffer, sizeof(urb->transfer_buffer)); |
2528 | 2532 | ||
2529 | if (usb_urb_dir_out(urb)) | 2533 | if (usb_urb_dir_out(urb)) |