]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
gve: clean XDP queues in gve_tx_stop_ring_gqi
authorJoshua Washington <joshwash@google.com>
Wed, 18 Dec 2024 13:34:11 +0000 (05:34 -0800)
committerDavid S. Miller <davem@davemloft.net>
Fri, 20 Dec 2024 12:49:41 +0000 (12:49 +0000)
When stopping XDP TX rings, the XDP clean function needs to be called to
clean out the entire queue, similar to what happens in the normal TX
queue case. Otherwise, the FIFO won't be cleared correctly, and
xsk_tx_completed won't be reported.

Fixes: 75eaae158b1b ("gve: Add XDP DROP and TX support for GQI-QPL format")
Cc: stable@vger.kernel.org
Signed-off-by: Joshua Washington <joshwash@google.com>
Signed-off-by: Praveen Kaligineedi <pkaligineedi@google.com>
Reviewed-by: Praveen Kaligineedi <pkaligineedi@google.com>
Reviewed-by: Willem de Bruijn <willemb@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/google/gve/gve_tx.c

index e7fb7d6d283df192709e40bad552c07075240f2e..83ad278ec91fe7839e2a9433955d5c9a352be535 100644 (file)
@@ -206,7 +206,10 @@ void gve_tx_stop_ring_gqi(struct gve_priv *priv, int idx)
                return;
 
        gve_remove_napi(priv, ntfy_idx);
-       gve_clean_tx_done(priv, tx, priv->tx_desc_cnt, false);
+       if (tx->q_num < priv->tx_cfg.num_queues)
+               gve_clean_tx_done(priv, tx, priv->tx_desc_cnt, false);
+       else
+               gve_clean_xdp_done(priv, tx, priv->tx_desc_cnt);
        netdev_tx_reset_queue(tx->netdev_txq);
        gve_tx_remove_from_block(priv, idx);
 }