aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/generic/backport-5.10/610-v5.13-42-net-ethernet-mtk_eth_soc-remove-unnecessary-TX-queue.patch
diff options
context:
space:
mode:
authorIlya Lipnitskiy <ilya.lipnitskiy@gmail.com>2021-04-23 17:19:22 -0700
committerHauke Mehrtens <hauke@hauke-m.de>2021-04-30 23:48:37 +0200
commit0d6f20723047c02bd624f0384df9dc74ee075bc7 (patch)
treef8ecc404999fafdf99475653201802143f1c60f2 /target/linux/generic/backport-5.10/610-v5.13-42-net-ethernet-mtk_eth_soc-remove-unnecessary-TX-queue.patch
parent4b14b42abfe263ea9f67ff4e29e563e1160005fc (diff)
downloadupstream-0d6f20723047c02bd624f0384df9dc74ee075bc7.tar.gz
upstream-0d6f20723047c02bd624f0384df9dc74ee075bc7.tar.bz2
upstream-0d6f20723047c02bd624f0384df9dc74ee075bc7.zip
kernel: backport mtk_soc_eth fixes from v5.13
Fixes logic that leads to this error when booting mt7621 and other devices that use the mediatek ethernet driver: [ 23.144378] mtk_soc_eth 1e100000.ethernet: PPE table busy The rest are mostly moved from pending-5.10 to backport-5.10 with a couple of cleanups and improvements from upstream. Refresh patches. Links: https://git.kernel.org/netdev/net-next/c/c5d66587b890 https://git.kernel.org/netdev/net-next/c/3f57d8c40fea https://git.kernel.org/netdev/net-next/c/5196c4178549 https://git.kernel.org/netdev/net-next/c/787082ab9f7b https://git.kernel.org/netdev/net-next/c/c30c4a827390 https://git.kernel.org/netdev/net-next/c/3630d519d7c3 https://git.kernel.org/netdev/net-next/c/16ef670789b2 https://git.kernel.org/netdev/net-next/c/59555a8d0dd3 https://git.kernel.org/netdev/net-next/c/6b4423b258b9 https://git.kernel.org/netdev/net-next/c/e9229ffd550b https://git.kernel.org/netdev/net-next/c/4e6bf609569c https://git.kernel.org/netdev/net-next/c/816ac3e6e67b https://git.kernel.org/netdev/net-next/c/16769a8923fa https://git.kernel.org/netdev/net-next/c/db2c7b353db3 https://git.kernel.org/netdev/net-next/c/fa817272c37e https://git.kernel.org/netdev/net-next/c/3bc8e0aff23b Fixes: f07fe36f22fc ("kernel: update flow offload patches to upstream version") Cc: Felix Fietkau <nbd@nbd.name> Signed-off-by: Ilya Lipnitskiy <ilya.lipnitskiy@gmail.com>
Diffstat (limited to 'target/linux/generic/backport-5.10/610-v5.13-42-net-ethernet-mtk_eth_soc-remove-unnecessary-TX-queue.patch')
-rw-r--r--target/linux/generic/backport-5.10/610-v5.13-42-net-ethernet-mtk_eth_soc-remove-unnecessary-TX-queue.patch54
1 files changed, 54 insertions, 0 deletions
diff --git a/target/linux/generic/backport-5.10/610-v5.13-42-net-ethernet-mtk_eth_soc-remove-unnecessary-TX-queue.patch b/target/linux/generic/backport-5.10/610-v5.13-42-net-ethernet-mtk_eth_soc-remove-unnecessary-TX-queue.patch
new file mode 100644
index 0000000000..67a7e3baed
--- /dev/null
+++ b/target/linux/generic/backport-5.10/610-v5.13-42-net-ethernet-mtk_eth_soc-remove-unnecessary-TX-queue.patch
@@ -0,0 +1,54 @@
+From 16ef670789b252b221700adc413497ed2f941d8a Mon Sep 17 00:00:00 2001
+From: Felix Fietkau <nbd@nbd.name>
+Date: Thu, 22 Apr 2021 22:20:59 -0700
+Subject: [PATCH] net: ethernet: mtk_eth_soc: remove unnecessary TX queue stops
+
+When running short on descriptors, only stop the queue for the netdev that
+tx was attempted for. By the time something tries to send on the other
+netdev, the ring might have some more room already.
+
+Signed-off-by: Felix Fietkau <nbd@nbd.name>
+Signed-off-by: Ilya Lipnitskiy <ilya.lipnitskiy@gmail.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+---
+ drivers/net/ethernet/mediatek/mtk_eth_soc.c | 15 ++-------------
+ 1 file changed, 2 insertions(+), 13 deletions(-)
+
+--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
++++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+@@ -1131,17 +1131,6 @@ static void mtk_wake_queue(struct mtk_et
+ }
+ }
+
+-static void mtk_stop_queue(struct mtk_eth *eth)
+-{
+- int i;
+-
+- for (i = 0; i < MTK_MAC_COUNT; i++) {
+- if (!eth->netdev[i])
+- continue;
+- netif_stop_queue(eth->netdev[i]);
+- }
+-}
+-
+ static netdev_tx_t mtk_start_xmit(struct sk_buff *skb, struct net_device *dev)
+ {
+ struct mtk_mac *mac = netdev_priv(dev);
+@@ -1162,7 +1151,7 @@ static netdev_tx_t mtk_start_xmit(struct
+
+ tx_num = mtk_cal_txd_req(skb);
+ if (unlikely(atomic_read(&ring->free_count) <= tx_num)) {
+- mtk_stop_queue(eth);
++ netif_stop_queue(dev);
+ netif_err(eth, tx_queued, dev,
+ "Tx Ring full when queue awake!\n");
+ spin_unlock(&eth->page_lock);
+@@ -1188,7 +1177,7 @@ static netdev_tx_t mtk_start_xmit(struct
+ goto drop;
+
+ if (unlikely(atomic_read(&ring->free_count) <= ring->thresh))
+- mtk_stop_queue(eth);
++ netif_stop_queue(dev);
+
+ spin_unlock(&eth->page_lock);
+