bnxt_en: Fix AGG ring check logic in bnxt_check_rings()
_bnxt_get_max_rings() that is invoked in bnxt_check_rings() already
accounts for the AGG ring(s) and gives a max value based on that.
Increasing for AGG rings before calling _bnxt_get_max_rings() will
result in checking for twice the number of rings than required and
it can fail. Fix it by adjusting for AGG rings after calling
_bnxt_get_max_rings().
Fixes: f5b29c6afe
("bnxt_en: Add helper to get the number of CP rings required for TX rings")
Signed-off-by: Somnath Kotur <somnath.kotur@broadcom.com>
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
Link: https://lore.kernel.org/r/20231212005122.2401-3-michael.chan@broadcom.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
f1e50b276d
commit
7fb17a0c18
@ -12724,14 +12724,14 @@ int bnxt_check_rings(struct bnxt *bp, int tx, int rx, bool sh, int tcs,
|
||||
if (tcs)
|
||||
tx_sets = tcs;
|
||||
|
||||
if (bp->flags & BNXT_FLAG_AGG_RINGS)
|
||||
rx_rings <<= 1;
|
||||
|
||||
_bnxt_get_max_rings(bp, &max_rx, &max_tx, &max_cp);
|
||||
|
||||
if (max_rx < rx_rings)
|
||||
return -ENOMEM;
|
||||
|
||||
if (bp->flags & BNXT_FLAG_AGG_RINGS)
|
||||
rx_rings <<= 1;
|
||||
|
||||
tx_rings_needed = tx * tx_sets + tx_xdp;
|
||||
if (max_tx < tx_rings_needed)
|
||||
return -ENOMEM;
|
||||
|
Loading…
Reference in New Issue
Block a user