[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