net/ice/base: fix build with GCC 11
[dpdk.git] / drivers / net / af_xdp / rte_eth_af_xdp.c
index 8c6cd22..eb5660a 100644 (file)
@@ -5,7 +5,6 @@
 #include <errno.h>
 #include <stdlib.h>
 #include <string.h>
-#include <poll.h>
 #include <netinet/in.h>
 #include <net/if.h>
 #include <sys/socket.h>
@@ -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;
        }