| b.liu | e958203 | 2025-04-17 19:18:16 +0800 | [diff] [blame] | 1 | The hardware queue scheduling is apparently configured with fixed | 
 | 2 | priorities, which creates a nasty fairness issue where traffic from one | 
 | 3 | CPU can starve traffic from all other CPUs. | 
 | 4 |  | 
 | 5 | Work around this issue by forcing all tx packets to go through one CPU, | 
 | 6 | until this issue is fixed properly. | 
 | 7 |  | 
 | 8 | Signed-off-by: Felix Fietkau <nbd@nbd.name> | 
 | 9 | --- | 
 | 10 | --- a/drivers/net/ethernet/marvell/mvneta.c | 
 | 11 | +++ b/drivers/net/ethernet/marvell/mvneta.c | 
 | 12 | @@ -4691,6 +4691,16 @@ static int mvneta_ethtool_set_eee(struct | 
 | 13 |  	return phylink_ethtool_set_eee(pp->phylink, eee); | 
 | 14 |  } | 
 | 15 |   | 
 | 16 | +#ifndef CONFIG_ARM64 | 
 | 17 | +static u16 mvneta_select_queue(struct net_device *dev, struct sk_buff *skb, | 
 | 18 | +			       struct net_device *sb_dev) | 
 | 19 | +{ | 
 | 20 | +	/* XXX: hardware queue scheduling is broken, | 
 | 21 | +	 * use only one queue until it is fixed */ | 
 | 22 | +	return 0; | 
 | 23 | +} | 
 | 24 | +#endif | 
 | 25 | + | 
 | 26 |  static const struct net_device_ops mvneta_netdev_ops = { | 
 | 27 |  	.ndo_open            = mvneta_open, | 
 | 28 |  	.ndo_stop            = mvneta_stop, | 
 | 29 | @@ -4701,6 +4711,9 @@ static const struct net_device_ops mvnet | 
 | 30 |  	.ndo_fix_features    = mvneta_fix_features, | 
 | 31 |  	.ndo_get_stats64     = mvneta_get_stats64, | 
 | 32 |  	.ndo_do_ioctl        = mvneta_ioctl, | 
 | 33 | +#ifndef CONFIG_ARM64 | 
 | 34 | +	.ndo_select_queue    = mvneta_select_queue, | 
 | 35 | +#endif | 
 | 36 |  	.ndo_bpf             = mvneta_xdp, | 
 | 37 |  	.ndo_xdp_xmit        = mvneta_xdp_xmit, | 
 | 38 |  }; |