mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-25 16:31:13 +00:00
a898a321a2
Because some still unresolved bugs in this driver, which sprout occasional questions what this patch works around, point to the issue which started this. Being here, fill headers required by git am. Signed-off-by: Tomasz Maciej Nowak <tmn505@gmail.com>
44 lines
1.4 KiB
Diff
44 lines
1.4 KiB
Diff
From: Felix Fietkau <nbd@nbd.name>
|
|
Subject: mvneta: tx queue workaround
|
|
|
|
The hardware queue scheduling is apparently configured with fixed
|
|
priorities, which creates a nasty fairness issue where traffic from one
|
|
CPU can starve traffic from all other CPUs.
|
|
|
|
Work around this issue by forcing all tx packets to go through one CPU,
|
|
until this issue is fixed properly.
|
|
|
|
Ref: https://github.com/openwrt/openwrt/issues/5411
|
|
|
|
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|
---
|
|
--- a/drivers/net/ethernet/marvell/mvneta.c
|
|
+++ b/drivers/net/ethernet/marvell/mvneta.c
|
|
@@ -5233,6 +5233,16 @@ static int mvneta_setup_tc(struct net_de
|
|
}
|
|
}
|
|
|
|
+#ifndef CONFIG_ARM64
|
|
+static u16 mvneta_select_queue(struct net_device *dev, struct sk_buff *skb,
|
|
+ struct net_device *sb_dev)
|
|
+{
|
|
+ /* XXX: hardware queue scheduling is broken,
|
|
+ * use only one queue until it is fixed */
|
|
+ return 0;
|
|
+}
|
|
+#endif
|
|
+
|
|
static const struct net_device_ops mvneta_netdev_ops = {
|
|
.ndo_open = mvneta_open,
|
|
.ndo_stop = mvneta_stop,
|
|
@@ -5243,6 +5253,9 @@ static const struct net_device_ops mvnet
|
|
.ndo_fix_features = mvneta_fix_features,
|
|
.ndo_get_stats64 = mvneta_get_stats64,
|
|
.ndo_eth_ioctl = mvneta_ioctl,
|
|
+#ifndef CONFIG_ARM64
|
|
+ .ndo_select_queue = mvneta_select_queue,
|
|
+#endif
|
|
.ndo_bpf = mvneta_xdp,
|
|
.ndo_xdp_xmit = mvneta_xdp_xmit,
|
|
.ndo_setup_tc = mvneta_setup_tc,
|