[kernel/f19] Add another fix for skge (rhbz 1008323)

Josh Boyer jwboyer at fedoraproject.org
Wed Sep 25 14:19:13 UTC 2013


commit 6dc9f1171b0fff53fd405cf6813086fd93a07425
Author: Josh Boyer <jwboyer at fedoraproject.org>
Date:   Wed Sep 25 10:18:45 2013 -0400

    Add another fix for skge (rhbz 1008323)

 kernel.spec                                        |    5 ++
 ...x-invalid-value-passed-to-pci_unmap_sigle.patch |   61 ++++++++++++++++++++
 2 files changed, 66 insertions(+), 0 deletions(-)
---
diff --git a/kernel.spec b/kernel.spec
index c88c776..0f6b419 100644
--- a/kernel.spec
+++ b/kernel.spec
@@ -765,6 +765,7 @@ Patch25105: 0001-HID-kye-Add-report-fixup-for-Genius-Gx-Imperator-Key.patch
 
 #rhbz 1008323
 Patch25106: 0001-skge-fix-broken-driver.patch
+Patch25120: skge-fix-invalid-value-passed-to-pci_unmap_sigle.patch
 
 #rhbz 985522
 Patch25107: ntp-Make-periodic-RTC-update-more-reliable.patch
@@ -1509,6 +1510,7 @@ ApplyPatch rpc-let-xdr-layer-allocate-gssproxy-receieve-pages.patch
 
 #rhbz 1008323
 ApplyPatch 0001-skge-fix-broken-driver.patch
+ApplyPatch skge-fix-invalid-value-passed-to-pci_unmap_sigle.patch
 
 # END OF PATCH APPLICATIONS
 
@@ -2322,6 +2324,9 @@ fi
 # and build.
 
 %changelog
+* Wed Sep 25 2013 Josh Boyer <jwboyer at fedoraproject.org>
+- Add another fix for skge (rhbz 1008323)
+
 * Mon Sep 23 2013 Neil Horman <nhorman at redhat.com>
 - Add alb learning packet config knob (rhbz 971893)
 
diff --git a/skge-fix-invalid-value-passed-to-pci_unmap_sigle.patch b/skge-fix-invalid-value-passed-to-pci_unmap_sigle.patch
new file mode 100644
index 0000000..908e0c7
--- /dev/null
+++ b/skge-fix-invalid-value-passed-to-pci_unmap_sigle.patch
@@ -0,0 +1,61 @@
+From 3361dc9538832a2a9150a8c722374ca844bf8dc8 Mon Sep 17 00:00:00 2001
+From: Mikulas Patocka <mpatocka at redhat.com>
+Date: Fri, 20 Sep 2013 17:53:22 +0000
+Subject: skge: fix invalid value passed to pci_unmap_sigle
+
+In my patch c194992cbe71c20bb3623a566af8d11b0bfaa721 ("skge: fix
+broken driver") I didn't fix the skge bug correctly. The value of the
+new mapping (not old) was passed to pci_unmap_single.
+
+If we enable CONFIG_DMA_API_DEBUG, it results in this warning:
+WARNING: CPU: 0 PID: 0 at lib/dma-debug.c:986 check_sync+0x4c4/0x580()
+skge 0000:02:07.0: DMA-API: device driver tries to sync DMA memory it has
+not allocated [device address=0x000000023a0096c0] [size=1536 bytes]
+
+This patch makes the skge driver pass the correct value to
+pci_unmap_single and fixes the warning. It copies the old descriptor to
+on-stack variable "ee" and unmaps it if mapping of the new descriptor
+succeeded.
+
+This patch should be backported to 3.11-stable.
+
+Signed-off-by: Mikulas Patocka <mpatocka at redhat.com>
+Reported-by: Francois Romieu <romieu at fr.zoreil.com>
+Tested-by: Mikulas Patocka <mpatocka at redhat.com>
+Signed-off-by: David S. Miller <davem at davemloft.net>
+---
+diff --git a/drivers/net/ethernet/marvell/skge.c b/drivers/net/ethernet/marvell/skge.c
+index 1a9c4f6..ecc7f7b 100644
+--- a/drivers/net/ethernet/marvell/skge.c
++++ b/drivers/net/ethernet/marvell/skge.c
+@@ -3086,13 +3086,16 @@ static struct sk_buff *skge_rx_get(struct net_device *dev,
+ 					       PCI_DMA_FROMDEVICE);
+ 		skge_rx_reuse(e, skge->rx_buf_size);
+ 	} else {
++		struct skge_element ee;
+ 		struct sk_buff *nskb;
+ 
+ 		nskb = netdev_alloc_skb_ip_align(dev, skge->rx_buf_size);
+ 		if (!nskb)
+ 			goto resubmit;
+ 
+-		skb = e->skb;
++		ee = *e;
++
++		skb = ee.skb;
+ 		prefetch(skb->data);
+ 
+ 		if (skge_rx_setup(skge, e, nskb, skge->rx_buf_size) < 0) {
+@@ -3101,8 +3104,8 @@ static struct sk_buff *skge_rx_get(struct net_device *dev,
+ 		}
+ 
+ 		pci_unmap_single(skge->hw->pdev,
+-				 dma_unmap_addr(e, mapaddr),
+-				 dma_unmap_len(e, maplen),
++				 dma_unmap_addr(&ee, mapaddr),
++				 dma_unmap_len(&ee, maplen),
+ 				 PCI_DMA_FROMDEVICE);
+ 	}
+ 
+--
+cgit v0.9.2


More information about the scm-commits mailing list