aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/ath25/patches-5.4/110-ar2313_ethernet.patch
diff options
context:
space:
mode:
authorSergey Ryazanov <ryazanov.s.a@gmail.com>2020-09-05 02:51:31 +0300
committerAdrian Schmutzler <freifunk@adrianschmutzler.de>2020-09-06 19:49:43 +0200
commitce3b135243ea6f313eb768a23000a436b8a7b2cc (patch)
tree74848ecd91b2fc5b8232e85fc01fec77ad5ffd50 /target/linux/ath25/patches-5.4/110-ar2313_ethernet.patch
parent36e06497f4612a8b7b341dc3834c7281ac8a9b27 (diff)
downloadupstream-ce3b135243ea6f313eb768a23000a436b8a7b2cc.tar.gz
upstream-ce3b135243ea6f313eb768a23000a436b8a7b2cc.tar.bz2
upstream-ce3b135243ea6f313eb768a23000a436b8a7b2cc.zip
ath25: eth: fix crash on skb DMA (un-)map
AR2315 Ethernet driver pass NULL instead of a real device pointer to DMA (un-)map calls. With kernel version 5.4 such behaviour causes a kernel panic. Fix this issue by preserving device pointer during the probe procedure and pass it to each skb data DMA (un-)map call. Signed-off-by: Sergey Ryazanov <ryazanov.s.a@gmail.com>
Diffstat (limited to 'target/linux/ath25/patches-5.4/110-ar2313_ethernet.patch')
-rw-r--r--target/linux/ath25/patches-5.4/110-ar2313_ethernet.patch10
1 files changed, 6 insertions, 4 deletions
diff --git a/target/linux/ath25/patches-5.4/110-ar2313_ethernet.patch b/target/linux/ath25/patches-5.4/110-ar2313_ethernet.patch
index e4f5fa8d2e..57c18abf69 100644
--- a/target/linux/ath25/patches-5.4/110-ar2313_ethernet.patch
+++ b/target/linux/ath25/patches-5.4/110-ar2313_ethernet.patch
@@ -33,7 +33,7 @@
+obj-$(CONFIG_NET_AR231X) += ar231x.o
--- /dev/null
+++ b/drivers/net/ethernet/atheros/ar231x/ar231x.c
-@@ -0,0 +1,1119 @@
+@@ -0,0 +1,1120 @@
+/*
+ * ar231x.c: Linux driver for the Atheros AR231x Ethernet device.
+ *
@@ -225,6 +225,7 @@
+
+ sp = netdev_priv(dev);
+ sp->dev = dev;
++ sp->pdev = pdev;
+ sp->cfg = pdev->dev.platform_data;
+
+ sprintf(buf, "eth%d_membase", pdev->id);
@@ -787,7 +788,7 @@
+ break;
+ }
+ /* done with this descriptor */
-+ dma_unmap_single(NULL, txdesc->addr,
++ dma_unmap_single(&sp->pdev->dev, txdesc->addr,
+ txdesc->devcs & DMA_TX1_BSIZE_MASK,
+ DMA_TO_DEVICE);
+ txdesc->status = 0;
@@ -1014,7 +1015,7 @@
+ /* Setup the transmit descriptor. */
+ td->devcs = ((skb->len << DMA_TX1_BSIZE_SHIFT) |
+ (DMA_TX1_LS | DMA_TX1_IC | DMA_TX1_CHAINED));
-+ td->addr = dma_map_single(NULL, skb->data, skb->len, DMA_TO_DEVICE);
++ td->addr = dma_map_single(&sp->pdev->dev, skb->data, skb->len, DMA_TO_DEVICE);
+ td->status = DMA_TX_OWN;
+
+ /* kick transmitter last */
@@ -1155,7 +1156,7 @@
+
--- /dev/null
+++ b/drivers/net/ethernet/atheros/ar231x/ar231x.h
-@@ -0,0 +1,281 @@
+@@ -0,0 +1,282 @@
+/*
+ * ar231x.h: Linux driver for the Atheros AR231x Ethernet device.
+ *
@@ -1379,6 +1380,7 @@
+ */
+struct ar231x_private {
+ struct net_device *dev;
++ struct platform_device *pdev;
+ int version;
+ u32 mb[2];
+