git.droids-corp.org
/
dpdk.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
net/ice/base: fix build with GCC 11
[dpdk.git]
/
drivers
/
net
/
af_xdp
/
rte_eth_af_xdp.c
diff --git
a/drivers/net/af_xdp/rte_eth_af_xdp.c
b/drivers/net/af_xdp/rte_eth_af_xdp.c
index
8c6cd22
..
eb5660a
100644
(file)
--- 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 <errno.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <stdlib.h>
#include <string.h>
-#include <poll.h>
#include <netinet/in.h>
#include <net/if.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <net/if.h>
#include <sys/socket.h>
@@
-61,7
+60,7
@@
#define PF_XDP AF_XDP
#endif
#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, \
#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) {
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,
(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;
}
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))
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;
}
#endif
return 0;
}