bnxt_en: Fix TX ring indexing logic
authorMichael Chan <michael.chan@broadcom.com>
Tue, 12 Dec 2023 00:51:12 +0000 (16:51 -0800)
committerJakub Kicinski <kuba@kernel.org>
Wed, 13 Dec 2023 00:05:57 +0000 (16:05 -0800)
Two spots were missed when modifying the TX ring indexing logic.
The use of unmasked TX index in bnxt_tx_int() will cause unnecessary
__bnxt_tx_int() calls.  The same issue in bnxt_tx_int_xdp() can
result in illegal array index.

Fixes: 6d1add95536b ("bnxt_en: Modify TX ring indexing logic.")
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
Link: https://lore.kernel.org/r/20231212005122.2401-4-michael.chan@broadcom.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/broadcom/bnxt/bnxt.c
drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c

index 114beaa95e78fcfbcfce2cdade0bc38f40b7fb6c..83a47feaf8693c6d3369e857d41c8b8ae5eb6cf6 100644 (file)
@@ -781,7 +781,7 @@ static void bnxt_tx_int(struct bnxt *bp, struct bnxt_napi *bnapi, int budget)
        int i;
 
        bnxt_for_each_napi_tx(i, bnapi, txr) {
-               if (txr->tx_hw_cons != txr->tx_cons)
+               if (txr->tx_hw_cons != RING_TX(bp, txr->tx_cons))
                        __bnxt_tx_int(bp, txr, budget);
        }
        bnapi->events &= ~BNXT_TX_CMP_EVENT;
index 4791f6a14e55dd5d2adcaaa7f1db40bd70dbb929..037624f17aea26187ada7eb209a470da05bc50fe 100644 (file)
@@ -173,7 +173,7 @@ void bnxt_tx_int_xdp(struct bnxt *bp, struct bnxt_napi *bnapi, int budget)
        bnapi->events &= ~BNXT_TX_CMP_EVENT;
        WRITE_ONCE(txr->tx_cons, tx_cons);
        if (rx_doorbell_needed) {
-               tx_buf = &txr->tx_buf_ring[last_tx_cons];
+               tx_buf = &txr->tx_buf_ring[RING_TX(bp, last_tx_cons)];
                bnxt_db_write(bp, &rxr->rx_db, tx_buf->rx_prod);
 
        }