diff --git a/drivers/net/af_xdp/compat.h b/drivers/net/af_xdp/compat.h index 545c8aa395..9de9454885 100644 --- a/drivers/net/af_xdp/compat.h +++ b/drivers/net/af_xdp/compat.h @@ -42,14 +42,24 @@ create_shared_socket(struct xsk_socket **xsk_ptr __rte_unused, #ifdef XDP_USE_NEED_WAKEUP static int -syscall_needed(struct xsk_ring_prod *q, uint32_t busy_budget) +rx_syscall_needed(struct xsk_ring_prod *q, uint32_t busy_budget) { return xsk_ring_prod__needs_wakeup(q) | busy_budget; } +static int +tx_syscall_needed(struct xsk_ring_prod *q) +{ + return xsk_ring_prod__needs_wakeup(q); +} #else static int -syscall_needed(struct xsk_ring_prod *q __rte_unused, uint32_t busy_budget) +rx_syscall_needed(struct xsk_ring_prod *q __rte_unused, uint32_t busy_budget) { return busy_budget; } +static int +tx_syscall_needed(struct xsk_ring_prod *q __rte_unused) +{ + return 1; +} #endif diff --git a/drivers/net/af_xdp/rte_eth_af_xdp.c b/drivers/net/af_xdp/rte_eth_af_xdp.c index 6e44a21c64..8c6cd224a8 100644 --- a/drivers/net/af_xdp/rte_eth_af_xdp.c +++ b/drivers/net/af_xdp/rte_eth_af_xdp.c @@ -273,7 +273,7 @@ af_xdp_rx_zc(void *queue, struct rte_mbuf **bufs, uint16_t nb_pkts) nb_pkts = xsk_ring_cons__peek(rx, nb_pkts, &idx_rx); if (nb_pkts == 0) { - if (syscall_needed(&rxq->fq, rxq->busy_budget)) + if (rx_syscall_needed(&rxq->fq, rxq->busy_budget)) (void)recvfrom(xsk_socket__fd(rxq->xsk), NULL, 0, MSG_DONTWAIT, NULL, NULL); @@ -456,7 +456,7 @@ kick_tx(struct pkt_tx_queue *txq, struct xsk_ring_cons *cq) pull_umem_cq(umem, XSK_RING_CONS__DEFAULT_NUM_DESCS, cq); - if (syscall_needed(&txq->tx, txq->pair->busy_budget)) + if (tx_syscall_needed(&txq->tx)) while (send(xsk_socket__fd(txq->pair->xsk), NULL, 0, MSG_DONTWAIT) < 0) { /* some thing unexpected */