Merge branch 'qdisc-noop'

Jesper Dangaard Brouer says:

====================
Fix qdisc noop issue caused by driver and identify future bugs

I've been very puzzled why networking on my NXP development board,
using driver dpaa2-eth, stopped working when I updated the kernel
version >= 5.3.  The observable issue were that interface would drop
all TX packets, because it had assigned the qdisc noop.

This turned out the be a NIC driver bug, that would only get triggered
when using sysctl net/core/default_qdisc=fq_codel. It was non-trivial
to find out[1] this was driver related. Thus, this patchset besides
fixing the driver bug, also helps end-user identify the issue.

[1]: https://github.com/xdp-project/xdp-project/blob/master/areas/arm64/board_nxp_ls1088/nxp-board04-troubleshoot-qdisc.org
====================

Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
David S. Miller 2020-04-24 16:44:55 -07:00
commit 6861d6d9cf
2 changed files with 6 additions and 3 deletions

View File

@ -2021,7 +2021,7 @@ static int dpaa2_eth_setup_tc(struct net_device *net_dev,
int i; int i;
if (type != TC_SETUP_QDISC_MQPRIO) if (type != TC_SETUP_QDISC_MQPRIO)
return -EINVAL; return -EOPNOTSUPP;
mqprio->hw = TC_MQPRIO_HW_OFFLOAD_TCS; mqprio->hw = TC_MQPRIO_HW_OFFLOAD_TCS;
num_queues = dpaa2_eth_queue_count(priv); num_queues = dpaa2_eth_queue_count(priv);
@ -2033,7 +2033,7 @@ static int dpaa2_eth_setup_tc(struct net_device *net_dev,
if (num_tc > dpaa2_eth_tc_count(priv)) { if (num_tc > dpaa2_eth_tc_count(priv)) {
netdev_err(net_dev, "Max %d traffic classes supported\n", netdev_err(net_dev, "Max %d traffic classes supported\n",
dpaa2_eth_tc_count(priv)); dpaa2_eth_tc_count(priv));
return -EINVAL; return -EOPNOTSUPP;
} }
if (!num_tc) { if (!num_tc) {

View File

@ -735,8 +735,11 @@ static int tcf_block_offload_cmd(struct tcf_block *block,
INIT_LIST_HEAD(&bo.cb_list); INIT_LIST_HEAD(&bo.cb_list);
err = dev->netdev_ops->ndo_setup_tc(dev, TC_SETUP_BLOCK, &bo); err = dev->netdev_ops->ndo_setup_tc(dev, TC_SETUP_BLOCK, &bo);
if (err < 0) if (err < 0) {
if (err != -EOPNOTSUPP)
NL_SET_ERR_MSG(extack, "Driver ndo_setup_tc failed");
return err; return err;
}
return tcf_block_setup(block, &bo); return tcf_block_setup(block, &bo);
} }