Re: [PATCH net v3] net/mlx5e: fix BQL reset on SQ re-activation

Bobby Eshleman <[email protected]>
Newsgroups org.kernel.vger.linux-rdma,org.kernel.vger.linux-kernel,org.kernel.vger.netdev
Message-ID <[email protected]>
On Tue, Aug 04, 2026 at 11:23:53AM +0300, Tariq Toukan wrote:
> 
> 
> On 04/08/2026 2:47, Bobby Eshleman wrote:
> > From: Bobby Eshleman <[email protected]>
> > 
> > mlx5e_queue_start() deactivates and re-activates all channels but closes
> > only the queue being restarted. mlx5e_activate_txqsq() then
> > unconditionally calls netdev_tx_reset_queue(), zeroing the BQL counters
> > of channels that kept their in-flight TX WQEs. The next completion then
> > over-charges and trips the BUG_ON() in dql_completed():
> > 
> >    kernel BUG at lib/dynamic_queue_limits.c:99!
> >    RIP: 0010:dql_completed+0x23d/0x280
> >    Call Trace:
> >     <IRQ>
> >     mlx5e_poll_tx_cq+0x668/0xa60
> >     mlx5e_napi_poll+0x5b/0x7b0
> >     net_rx_action+0x15a/0x580
> > 
> > Reset BQL only when the SQ has no bytes in flight (sq->cc == sq->pc).
> > 
> > In the case that reset is skipped, the outstanding WQEs will eventually
> > complete and rebalance the dql. The dql->limit is carried across the
> > reset.
> > 
> > Fixes: b2588ea40ec9 ("net/mlx5e: Implement queue mgmt ops and single channel swap")
> > Signed-off-by: Bobby Eshleman <[email protected]>
> 
> Reviewed-by: Tariq Toukan <[email protected]>
> 
> Thanks.

Thanks Tariq, and my apologies for forgetting to carry the R-b forward.

> 
> > ---
> > Changes in v3:
> > - Sample sq->cc/sq->pc before setting MLX5E_SQ_STATE_ENABLED, so a
> >    concurrent mlx5e_poll_tx_cq() cannot un-charge BQL between the check
> >    and netdev_tx_reset_queue() (Sashiko:
> >    https://netdev-ai.bots.linux.dev/sashiko/#/patchset/[email protected])
> > - Link to v2: https://lore.kernel.org/r/[email protected]
> > 
> > Changes in v2:
> > - remove misleading comment (Tariq)
> > - Link to v1: https://lore.kernel.org/r/[email protected]
> > ---
> >   drivers/net/ethernet/mellanox/mlx5/core/en_main.c | 4 +++-
> >   1 file changed, 3 insertions(+), 1 deletion(-)
> > 
> > diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
> > index 7d47a1da8b6b..f0407a850ea8 100644
> > --- a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
> > +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
> > @@ -1939,8 +1939,10 @@ int mlx5e_open_txqsq(struct mlx5e_channel *c, u32 tisn, int txq_ix,
> >   void mlx5e_activate_txqsq(struct mlx5e_txqsq *sq)
> >   {
> >   	sq->txq = netdev_get_tx_queue(sq->netdev, sq->txq_ix);
> > +	/* Reset BQL only when the SQ has no bytes in flight. */
> > +	if (sq->cc == sq->pc)
> > +		netdev_tx_reset_queue(sq->txq);
> >   	set_bit(MLX5E_SQ_STATE_ENABLED, &sq->state);
> > -	netdev_tx_reset_queue(sq->txq);
> >   	netif_tx_start_queue(sq->txq);
> >   	netif_queue_set_napi(sq->netdev, sq->txq_ix, NETDEV_QUEUE_TYPE_TX, sq->cq.napi);
> >   }
> > 
> > ---
> > base-commit: d1000fd7995e51deec872d154e0a40d82f7a539f
> > change-id: 20260728-mlx5-bql-84e02a5a46c8
> > 
> > Best regards,
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.