Skip to content

Commit edc0140

Browse files
Sebastian Andrzej SiewiorPaolo Abeni
authored andcommitted
bnxt_en: Flush XDP for bnxt_poll_nitroa0()'s NAPI
bnxt_poll_nitroa0() invokes bnxt_rx_pkt() which can run a XDP program which in turn can return XDP_REDIRECT. bnxt_rx_pkt() is also used by __bnxt_poll_work() which flushes (xdp_do_flush()) the packets after each round. bnxt_poll_nitroa0() lacks this feature. xdp_do_flush() should be invoked before leaving the NAPI callback. Invoke xdp_do_flush() after a redirect in bnxt_poll_nitroa0() NAPI. Cc: Michael Chan <michael.chan@broadcom.com> Fixes: f18c2b7 ("bnxt_en: optimized XDP_REDIRECT support") Reviewed-by: Andy Gospodarek <gospo@broadcom.com> Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> Reviewed-by: Michael Chan <michael.chan@broadcom.com> Acked-by: Jesper Dangaard Brouer <hawk@kernel.org> Signed-off-by: Paolo Abeni <pabeni@redhat.com>
1 parent 6f411fb commit edc0140

File tree

1 file changed

+5
-0
lines changed
  • drivers/net/ethernet/broadcom/bnxt

1 file changed

+5
-0
lines changed

drivers/net/ethernet/broadcom/bnxt/bnxt.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2614,6 +2614,7 @@ static int bnxt_poll_nitroa0(struct napi_struct *napi, int budget)
26142614
struct rx_cmp_ext *rxcmp1;
26152615
u32 cp_cons, tmp_raw_cons;
26162616
u32 raw_cons = cpr->cp_raw_cons;
2617+
bool flush_xdp = false;
26172618
u32 rx_pkts = 0;
26182619
u8 event = 0;
26192620

@@ -2648,6 +2649,8 @@ static int bnxt_poll_nitroa0(struct napi_struct *napi, int budget)
26482649
rx_pkts++;
26492650
else if (rc == -EBUSY) /* partial completion */
26502651
break;
2652+
if (event & BNXT_REDIRECT_EVENT)
2653+
flush_xdp = true;
26512654
} else if (unlikely(TX_CMP_TYPE(txcmp) ==
26522655
CMPL_BASE_TYPE_HWRM_DONE)) {
26532656
bnxt_hwrm_handler(bp, txcmp);
@@ -2667,6 +2670,8 @@ static int bnxt_poll_nitroa0(struct napi_struct *napi, int budget)
26672670

26682671
if (event & BNXT_AGG_EVENT)
26692672
bnxt_db_write(bp, &rxr->rx_agg_db, rxr->rx_agg_prod);
2673+
if (flush_xdp)
2674+
xdp_do_flush();
26702675

26712676
if (!bnxt_has_work(bp, cpr) && rx_pkts < budget) {
26722677
napi_complete_done(napi, rx_pkts);

0 commit comments

Comments
 (0)