forked from Minki/linux
net: ena: xdp: update napi budget for DROP and ABORTED
This patch fixes two issues with XDP:
1. If the XDP verdict is XDP_ABORTED we break the loop, which results in
us handling one buffer per napi cycle instead of the total budget
(usually 64). To overcome this simply change the xdp_verdict check to
!= XDP_PASS. When the verdict is XDP_PASS, the skb is not expected to
be NULL.
2. Update the residual budget for XDP_DROP and XDP_ABORTED, since
packets are handled in these cases.
Fixes: 548c4940b9
("net: ena: Implement XDP_TX action")
Signed-off-by: Sameeh Jubran <sameehj@amazon.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
cd07ecccba
commit
3921a81c31
@ -1646,11 +1646,9 @@ static int ena_clean_rx_irq(struct ena_ring *rx_ring, struct napi_struct *napi,
|
||||
&next_to_clean);
|
||||
|
||||
if (unlikely(!skb)) {
|
||||
if (xdp_verdict == XDP_TX) {
|
||||
if (xdp_verdict == XDP_TX)
|
||||
ena_free_rx_page(rx_ring,
|
||||
&rx_ring->rx_buffer_info[rx_ring->ena_bufs[0].req_id]);
|
||||
res_budget--;
|
||||
}
|
||||
for (i = 0; i < ena_rx_ctx.descs; i++) {
|
||||
rx_ring->free_ids[next_to_clean] =
|
||||
rx_ring->ena_bufs[i].req_id;
|
||||
@ -1658,8 +1656,10 @@ static int ena_clean_rx_irq(struct ena_ring *rx_ring, struct napi_struct *napi,
|
||||
ENA_RX_RING_IDX_NEXT(next_to_clean,
|
||||
rx_ring->ring_size);
|
||||
}
|
||||
if (xdp_verdict == XDP_TX || xdp_verdict == XDP_DROP)
|
||||
if (xdp_verdict != XDP_PASS) {
|
||||
res_budget--;
|
||||
continue;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user