From 6dc9f1171b0fff53fd405cf6813086fd93a07425 Mon Sep 17 00:00:00 2001 From: Josh Boyer Date: Sep 25 2013 14:18:53 +0000 Subject: Add another fix for skge (rhbz 1008323) --- 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 +- Add another fix for skge (rhbz 1008323) + * Mon Sep 23 2013 Neil Horman - 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 +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 +Reported-by: Francois Romieu +Tested-by: Mikulas Patocka +Signed-off-by: David S. Miller +--- +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