X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=drivers%2Fnet%2Faf_xdp%2Frte_eth_af_xdp.c;h=eb5660a3dcab7b69c67a5bcd634e35ba86c40e88;hb=97de3819ed93f4b3a71e429147a7e6a435789ab2;hp=8c6cd224a81e390eb76b67943916ca6220fb5edf;hpb=2aa51cdd559e18fd6bbdead121d84a13ffa3455a;p=dpdk.git diff --git a/drivers/net/af_xdp/rte_eth_af_xdp.c b/drivers/net/af_xdp/rte_eth_af_xdp.c index 8c6cd224a8..eb5660a3dc 100644 --- a/drivers/net/af_xdp/rte_eth_af_xdp.c +++ b/drivers/net/af_xdp/rte_eth_af_xdp.c @@ -5,7 +5,6 @@ #include #include #include -#include #include #include #include @@ -61,7 +60,7 @@ #define PF_XDP AF_XDP #endif -RTE_LOG_REGISTER(af_xdp_logtype, pmd.net.af_xdp, NOTICE); +RTE_LOG_REGISTER_DEFAULT(af_xdp_logtype, NOTICE); #define AF_XDP_LOG(level, fmt, args...) \ rte_log(RTE_LOG_ ## level, af_xdp_logtype, \ @@ -273,9 +272,17 @@ 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 (rx_syscall_needed(&rxq->fq, rxq->busy_budget)) + /* we can assume a kernel >= 5.11 is in use if busy polling is + * enabled and thus we can safely use the recvfrom() syscall + * which is only supported for AF_XDP sockets in kernels >= + * 5.11. + */ + if (rxq->busy_budget) { (void)recvfrom(xsk_socket__fd(rxq->xsk), NULL, 0, - MSG_DONTWAIT, NULL, NULL); + MSG_DONTWAIT, NULL, NULL); + } else if (xsk_ring_prod__needs_wakeup(fq)) { + (void)poll(&rxq->fds[0], 1, 1000); + } return 0; } @@ -346,8 +353,7 @@ af_xdp_rx_cp(void *queue, struct rte_mbuf **bufs, uint16_t nb_pkts) if (nb_pkts == 0) { #if defined(XDP_USE_NEED_WAKEUP) if (xsk_ring_prod__needs_wakeup(fq)) - (void)recvfrom(xsk_socket__fd(rxq->xsk), NULL, 0, - MSG_DONTWAIT, NULL, NULL); + (void)poll(rxq->fds, 1, 1000); #endif return 0; }