Message ID | 1676050315-19381-1-git-send-email-michael.chan@broadcom.com (mailing list archive) |
---|---|
State | Accepted |
Commit | 2038cc592811209de20c4e094ca08bfb1e6fbc6c |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | [net] bnxt_en: Fix mqprio and XDP ring checking logic | expand |
Hello: This patch was applied to netdev/net.git (master) by David S. Miller <davem@davemloft.net>: On Fri, 10 Feb 2023 12:31:55 -0500 you wrote: > In bnxt_reserve_rings(), there is logic to check that the number of TX > rings reserved is enough to cover all the mqprio TCs, but it fails to > account for the TX XDP rings. So the check will always fail if there > are mqprio TCs and TX XDP rings. As a result, the driver always fails > to initialize after the XDP program is attached and the device will be > brought down. A subsequent ifconfig up will also fail because the > number of TX rings is set to an inconsistent number. Fix the check to > properly account for TX XDP rings. If the check fails, set the number > of TX rings back to a consistent number after calling netdev_reset_tc(). > > [...] Here is the summary with links: - [net] bnxt_en: Fix mqprio and XDP ring checking logic https://git.kernel.org/netdev/net/c/2038cc592811 You are awesome, thank you!
diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c index 240a7e8a7652..6c32f5c427b5 100644 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c @@ -9274,10 +9274,14 @@ int bnxt_reserve_rings(struct bnxt *bp, bool irq_re_init) netdev_err(bp->dev, "ring reservation/IRQ init failure rc: %d\n", rc); return rc; } - if (tcs && (bp->tx_nr_rings_per_tc * tcs != bp->tx_nr_rings)) { + if (tcs && (bp->tx_nr_rings_per_tc * tcs != + bp->tx_nr_rings - bp->tx_nr_rings_xdp)) { netdev_err(bp->dev, "tx ring reservation failure\n"); netdev_reset_tc(bp->dev); - bp->tx_nr_rings_per_tc = bp->tx_nr_rings; + if (bp->tx_nr_rings_xdp) + bp->tx_nr_rings_per_tc = bp->tx_nr_rings_xdp; + else + bp->tx_nr_rings_per_tc = bp->tx_nr_rings; return -ENOMEM; } return 0;