[prev in list] [next in list] [prev in thread] [next in thread] 

List:       ipfire-scm
Subject:    [git.ipfire.org] IPFire 2.x development tree branch, core126, updated. ed4bbe44d121480e56c817f42f797
From:       Arne Fitzenreiter <git () ipfire ! org>
Date:       2018-12-10 19:46:43
Message-ID: 20181210194643.DBF7184FDD5 () people01 ! i ! ipfire ! org
[Download RAW message or body]

This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "IPFire 2.x development tree".

The branch, core126 has been updated
       via  ed4bbe44d121480e56c817f42f797423507c7630 (commit)
      from  ede4314397661889ce05f6a9d4dcdd5cc88ffb40 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit ed4bbe44d121480e56c817f42f797423507c7630
Author: Arne Fitzenreiter <arne_f@ipfire.org>
Date:   Mon Dec 10 20:45:54 2018 +0100

    kernel: fix dwc2 (usb) dma crashes on RPi1-3
    
    Signed-off-by: Arne Fitzenreiter <arne_f@ipfire.org>

-----------------------------------------------------------------------

Summary of changes:
 lfs/linux                                          |  3 +
 ...ux-4.14-Revert-usb-dwc2-Fix-DMA-alignment.patch | 99 ++++++++++++++++++++++
 2 files changed, 102 insertions(+)
 create mode 100644 src/patches/linux/linux-4.14-Revert-usb-dwc2-Fix-DMA-alignment.patch


Difference in files:
diff --git a/lfs/linux b/lfs/linux
index 0994e3e56..346378819 100644
--- a/lfs/linux
+++ b/lfs/linux
@@ -157,10 +157,13 @@ endif
 ifeq "$(KCFG)" "-multi"
 	# Apply Arm-multiarch kernel patches.
 	cd $(DIR_APP) && xzcat $(DIR_DL)/arm-multi-patches-$(ARM_PATCHES).patch.xz | patch \
-Np1 +	cd $(DIR_APP) && patch -Np1 < \
$(DIR_SRC)/src/patches/linux/linux-4.14-Revert-usb-dwc2-Fix-DMA-alignment.patch +
 endif
 ifeq "$(BUILD_ARCH)" "aarch64"
 	# Apply Arm-multiarch kernel patches.
 	cd $(DIR_APP) && xzcat $(DIR_DL)/arm-multi-patches-$(ARM_PATCHES).patch.xz | patch \
-Np1 +	cd $(DIR_APP) && patch -Np1 < \
$(DIR_SRC)/src/patches/linux/linux-4.14-Revert-usb-dwc2-Fix-DMA-alignment.patch  \
endif  cd $(DIR_APP) && patch -Np1 < \
$(DIR_SRC)/src/patches/linux/linux-3.14.79-amba-fix.patch  
diff --git a/src/patches/linux/linux-4.14-Revert-usb-dwc2-Fix-DMA-alignment.patch \
b/src/patches/linux/linux-4.14-Revert-usb-dwc2-Fix-DMA-alignment.patch new file mode \
100644 index 000000000..e4c8b9982
--- /dev/null
+++ b/src/patches/linux/linux-4.14-Revert-usb-dwc2-Fix-DMA-alignment.patch
@@ -0,0 +1,99 @@
+From a44147a09baf8c46cc0b02332df3a4656e0659d5 Mon Sep 17 00:00:00 2001
+From: Arne Fitzenreiter <arne_f@ipfire.org>
+Date: Mon, 10 Dec 2018 13:12:00 +0100
+Subject: [PATCH] Revert "usb: dwc2: Fix DMA alignment to start at allocated
+ boundary"
+
+This reverts commit 68fc92a0f3913d539d1ac68a861f895e34099e46.
+---
+ drivers/usb/dwc2/hcd.c | 44 +++++++++++++++++++++-----------------------
+ 1 file changed, 21 insertions(+), 23 deletions(-)
+
+diff --git a/drivers/usb/dwc2/hcd.c b/drivers/usb/dwc2/hcd.c
+index fa20ec4..4b81d08 100644
+--- a/drivers/usb/dwc2/hcd.c
++++ b/drivers/usb/dwc2/hcd.c
+@@ -2644,29 +2644,34 @@ static int dwc2_alloc_split_dma_aligned_buf(struct \
dwc2_hsotg *hsotg, + 
+ #define DWC2_USB_DMA_ALIGN 4
+ 
++struct dma_aligned_buffer {
++	void *kmalloc_ptr;
++	void *old_xfer_buffer;
++	u8 data[0];
++};
++
+ static void dwc2_free_dma_aligned_buffer(struct urb *urb)
+ {
+-	void *stored_xfer_buffer;
++	struct dma_aligned_buffer *temp;
+ 
+ 	if (!(urb->transfer_flags & URB_ALIGNED_TEMP_BUFFER))
+ 		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));
++	temp = container_of(urb->transfer_buffer,
++			    struct dma_aligned_buffer, data);
+ 
+ 	if (usb_urb_dir_in(urb))
+-		memcpy(stored_xfer_buffer, urb->transfer_buffer,
++		memcpy(temp->old_xfer_buffer, temp->data,
+ 		       urb->transfer_buffer_length);
+-	kfree(urb->transfer_buffer);
+-	urb->transfer_buffer = stored_xfer_buffer;
++	urb->transfer_buffer = temp->old_xfer_buffer;
++	kfree(temp->kmalloc_ptr);
+ 
+ 	urb->transfer_flags &= ~URB_ALIGNED_TEMP_BUFFER;
+ }
+ 
+ static int dwc2_alloc_dma_aligned_buffer(struct urb *urb, gfp_t mem_flags)
+ {
+-	void *kmalloc_ptr;
++	struct dma_aligned_buffer *temp, *kmalloc_ptr;
+ 	size_t kmalloc_size;
+ 
+ 	if (urb->num_sgs || urb->sg ||
+@@ -2674,29 +2679,22 @@ static int dwc2_alloc_dma_aligned_buffer(struct urb *urb, \
gfp_t mem_flags) + 	    !((uintptr_t)urb->transfer_buffer & (DWC2_USB_DMA_ALIGN - \
1))) + 		return 0;
+ 
+-	/*
+-	 * Allocate a buffer with enough padding for original transfer_buffer
+-	 * pointer. This allocation is guaranteed to be aligned properly for
+-	 * DMA
+-	 */
++	/* Allocate a buffer with enough padding for alignment */
+ 	kmalloc_size = urb->transfer_buffer_length +
+-		sizeof(urb->transfer_buffer);
++		sizeof(struct dma_aligned_buffer) + DWC2_USB_DMA_ALIGN - 1;
+ 
+ 	kmalloc_ptr = kmalloc(kmalloc_size, mem_flags);
+ 	if (!kmalloc_ptr)
+ 		return -ENOMEM;
+ 
+-	/*
+-	 * Position value of original urb->transfer_buffer pointer to the end
+-	 * of allocation for later referencing
+-	 */
+-	memcpy(kmalloc_ptr + urb->transfer_buffer_length,
+-	       &urb->transfer_buffer, sizeof(urb->transfer_buffer));
+-
++	/* Position our struct dma_aligned_buffer such that data is aligned */
++	temp = PTR_ALIGN(kmalloc_ptr + 1, DWC2_USB_DMA_ALIGN) - 1;
++	temp->kmalloc_ptr = kmalloc_ptr;
++	temp->old_xfer_buffer = urb->transfer_buffer;
+ 	if (usb_urb_dir_out(urb))
+-		memcpy(kmalloc_ptr, urb->transfer_buffer,
++		memcpy(temp->data, urb->transfer_buffer,
+ 		       urb->transfer_buffer_length);
+-	urb->transfer_buffer = kmalloc_ptr;
++	urb->transfer_buffer = temp->data;
+ 
+ 	urb->transfer_flags |= URB_ALIGNED_TEMP_BUFFER;
+ 
+-- 
+2.7.4
+


hooks/post-receive
--
IPFire 2.x development tree
_______________________________________________
IPFire-SCM mailing list
IPFire-SCM@lists.ipfire.org
https://lists.ipfire.org/mailman/listinfo/ipfire-scm


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic