summaryrefslogtreecommitdiff
path: root/target/linux/generic/patches-3.7/132-solos-dma.patch
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/generic/patches-3.7/132-solos-dma.patch')
-rw-r--r--target/linux/generic/patches-3.7/132-solos-dma.patch39
1 files changed, 5 insertions, 34 deletions
diff --git a/target/linux/generic/patches-3.7/132-solos-dma.patch b/target/linux/generic/patches-3.7/132-solos-dma.patch
index c95ecbe..0b761ea 100644
--- a/target/linux/generic/patches-3.7/132-solos-dma.patch
+++ b/target/linux/generic/patches-3.7/132-solos-dma.patch
@@ -44,21 +44,6 @@ Date: Wed Dec 19 11:01:18 2012 +0000
Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
-commit cae49ede00ec3d0cda290b03fee55b72b49efc11
-Author: David Woodhouse <dwmw2@infradead.org>
-Date: Tue Dec 11 14:57:14 2012 +0000
-
- solos-pci: fix double-free of TX skb in DMA mode
-
- We weren't clearing card->tx_skb[port] when processing the TX done interrupt.
- If there wasn't another skb ready to transmit immediately, this led to a
- double-free because we'd free it *again* next time we did have a packet to
- send.
-
- Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
- Cc: stable@kernel.org
- Signed-off-by: David S. Miller <davem@davemloft.net>
-
==
There is a typo here so we do a double lock instead of an unlock.
@@ -314,21 +299,7 @@ solos-pci: add GPIO support for newer versions on Geos board
if(card->fpga_version > LEGACY_BUFFERS)
iowrite32(word, FLASH_BUF + i);
else
-@@ -945,10 +1069,11 @@ static uint32_t fpga_tx(struct solos_car
- for (port = 0; tx_pending; tx_pending >>= 1, port++) {
- if (tx_pending & 1) {
- struct sk_buff *oldskb = card->tx_skb[port];
-- if (oldskb)
-+ if (oldskb) {
- pci_unmap_single(card->dev, SKB_CB(oldskb)->dma_addr,
- oldskb->len, PCI_DMA_TODEVICE);
--
-+ card->tx_skb[port] = NULL;
-+ }
- spin_lock(&card->tx_queue_lock);
- skb = skb_dequeue(&card->tx_queue[port]);
- if (!skb)
-@@ -960,7 +1085,12 @@ static uint32_t fpga_tx(struct solos_car
+@@ -961,7 +1085,12 @@ static uint32_t fpga_tx(struct solos_car
tx_started |= 1 << port;
oldskb = skb; /* We're done with this skb already */
} else if (skb && card->using_dma) {
@@ -342,7 +313,7 @@ solos-pci: add GPIO support for newer versions on Geos board
skb->len, PCI_DMA_TODEVICE);
card->tx_skb[port] = skb;
iowrite32(SKB_CB(skb)->dma_addr,
-@@ -1134,18 +1264,33 @@ static int fpga_probe(struct pci_dev *de
+@@ -1135,18 +1264,33 @@ static int fpga_probe(struct pci_dev *de
db_fpga_upgrade = db_firmware_upgrade = 0;
}
@@ -379,7 +350,7 @@ solos-pci: add GPIO support for newer versions on Geos board
pci_set_drvdata(dev, card);
tasklet_init(&card->tlet, solos_bh, (unsigned long)card);
-@@ -1180,6 +1325,10 @@ static int fpga_probe(struct pci_dev *de
+@@ -1181,6 +1325,10 @@ static int fpga_probe(struct pci_dev *de
if (err)
goto out_free_irq;
@@ -390,7 +361,7 @@ solos-pci: add GPIO support for newer versions on Geos board
return 0;
out_free_irq:
-@@ -1188,6 +1337,7 @@ static int fpga_probe(struct pci_dev *de
+@@ -1189,6 +1337,7 @@ static int fpga_probe(struct pci_dev *de
tasklet_kill(&card->tlet);
out_unmap_both:
@@ -398,7 +369,7 @@ solos-pci: add GPIO support for newer versions on Geos board
pci_set_drvdata(dev, NULL);
pci_iounmap(dev, card->buffers);
out_unmap_config:
-@@ -1290,11 +1440,16 @@ static void fpga_remove(struct pci_dev *
+@@ -1291,11 +1440,16 @@ static void fpga_remove(struct pci_dev *
iowrite32(1, card->config_regs + FPGA_MODE);
(void)ioread32(card->config_regs + FPGA_MODE);