aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/generic/patches-3.18/077-07-bgmac-simplify-rx-DMA-error-handling.patch
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@openwrt.org>2015-04-13 20:08:30 +0000
committerFelix Fietkau <nbd@openwrt.org>2015-04-13 20:08:30 +0000
commit87f854059aa3c703a87e08649801b15c93b845e7 (patch)
tree0ca977f242f1617f1a337e4de631975464a71660 /target/linux/generic/patches-3.18/077-07-bgmac-simplify-rx-DMA-error-handling.patch
parent232c61742e7391edeb7c429ab9cc14652c2894ac (diff)
downloadupstream-87f854059aa3c703a87e08649801b15c93b845e7.tar.gz
upstream-87f854059aa3c703a87e08649801b15c93b845e7.tar.bz2
upstream-87f854059aa3c703a87e08649801b15c93b845e7.zip
kernel: fix more bgmac dma init/cleanup issues
Signed-off-by: Felix Fietkau <nbd@openwrt.org> SVN-Revision: 45422
Diffstat (limited to 'target/linux/generic/patches-3.18/077-07-bgmac-simplify-rx-DMA-error-handling.patch')
-rw-r--r--target/linux/generic/patches-3.18/077-07-bgmac-simplify-rx-DMA-error-handling.patch22
1 files changed, 21 insertions, 1 deletions
diff --git a/target/linux/generic/patches-3.18/077-07-bgmac-simplify-rx-DMA-error-handling.patch b/target/linux/generic/patches-3.18/077-07-bgmac-simplify-rx-DMA-error-handling.patch
index e1e8c8f656..d6feed05b2 100644
--- a/target/linux/generic/patches-3.18/077-07-bgmac-simplify-rx-DMA-error-handling.patch
+++ b/target/linux/generic/patches-3.18/077-07-bgmac-simplify-rx-DMA-error-handling.patch
@@ -49,7 +49,7 @@ Signed-off-by: Felix Fietkau <nbd@openwrt.org>
- slot->dma_addr,
- BGMAC_RX_BUF_SIZE,
- DMA_FROM_DEVICE);
-+ kfree(buf);
++ put_page(virt_to_head_page(buf));
break;
}
@@ -99,3 +99,23 @@ Signed-off-by: Felix Fietkau <nbd@openwrt.org>
}
return handled;
+@@ -528,14 +512,14 @@ static void bgmac_dma_rx_ring_free(struc
+
+ for (i = 0; i < ring->num_slots; i++) {
+ slot = &ring->slots[i];
+- if (!slot->buf)
++ if (!slot->dma_addr)
+ continue;
+
+- if (slot->dma_addr)
+- dma_unmap_single(dma_dev, slot->dma_addr,
+- BGMAC_RX_BUF_SIZE,
+- DMA_FROM_DEVICE);
++ dma_unmap_single(dma_dev, slot->dma_addr,
++ BGMAC_RX_BUF_SIZE,
++ DMA_FROM_DEVICE);
+ put_page(virt_to_head_page(slot->buf));
++ slot->dma_addr = 0;
+ }
+ }
+