net/af_xdp: fix trigger for syscall on Tx
The send() syscall on the Tx path is not concerned with busy polling
and as such its invocation should not depend on whether or not it is
configured. Fix this by distinguishing the conditions necessary for
syscalls on the Rx and Tx paths individually.
Fixes: 055a393626
("net/af_xdp: prefer busy polling")
Signed-off-by: Ciara Loftus <ciara.loftus@intel.com>
This commit is contained in:
parent
be1fb9fe3c
commit
2aa51cdd55
@ -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
|
||||
|
@ -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 */
|
||||
|
Loading…
Reference in New Issue
Block a user