summaryrefslogtreecommitdiff
path: root/kernels/linux-libre-xen/3.11.1-fix-skge.patch
diff options
context:
space:
mode:
Diffstat (limited to 'kernels/linux-libre-xen/3.11.1-fix-skge.patch')
-rw-r--r--kernels/linux-libre-xen/3.11.1-fix-skge.patch34
1 files changed, 34 insertions, 0 deletions
diff --git a/kernels/linux-libre-xen/3.11.1-fix-skge.patch b/kernels/linux-libre-xen/3.11.1-fix-skge.patch
new file mode 100644
index 000000000..26d90e080
--- /dev/null
+++ b/kernels/linux-libre-xen/3.11.1-fix-skge.patch
@@ -0,0 +1,34 @@
+--- a/drivers/net/ethernet/marvell/skge.c 2013-09-02 16:46:10.000000000 -0400
++++ b/drivers/net/ethernet/marvell/skge.c 2013-09-22 11:14:10.232067541 -0400
+@@ -3086,23 +3086,27 @@
+ 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;
+
++ ee = *e;
++
++ skb = ee.skb;
++ prefetch(skb->data);
++
+ if (skge_rx_setup(skge, e, nskb, skge->rx_buf_size) < 0) {
+ dev_kfree_skb(nskb);
+ goto resubmit;
+ }
+
+ 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);
+- skb = e->skb;
+- prefetch(skb->data);
+ }
+
+ skb_put(skb, len);