Polling the Tx queue file descriptor before writing to it is not mandatory since it is configured as non-blocking.
Signed-off-by: Adrien Mazarguil <adrien.mazarg...@6wind.com> Acked-by: Pascal Mazon <pascal.ma...@6wind.com> --- drivers/net/tap/rte_eth_tap.c | 26 ++++++++------------------ 1 file changed, 8 insertions(+), 18 deletions(-) diff --git a/drivers/net/tap/rte_eth_tap.c b/drivers/net/tap/rte_eth_tap.c index efc4426..c757a7c 100644 --- a/drivers/net/tap/rte_eth_tap.c +++ b/drivers/net/tap/rte_eth_tap.c @@ -43,7 +43,6 @@ #include <sys/ioctl.h> #include <sys/mman.h> #include <unistd.h> -#include <poll.h> #include <arpa/inet.h> #include <linux/if.h> #include <linux/if_tun.h> @@ -242,7 +241,6 @@ pmd_tx_burst(void *queue, struct rte_mbuf **bufs, uint16_t nb_pkts) { struct rte_mbuf *mbuf; struct tx_queue *txq = queue; - struct pollfd pfd; uint16_t num_tx = 0; unsigned long num_tx_bytes = 0; int i, n; @@ -250,26 +248,18 @@ pmd_tx_burst(void *queue, struct rte_mbuf **bufs, uint16_t nb_pkts) if (unlikely(nb_pkts == 0)) return 0; - pfd.events = POLLOUT; - pfd.fd = txq->fd; for (i = 0; i < nb_pkts; i++) { - n = poll(&pfd, 1, 0); - + /* copy the tx frame data */ + mbuf = bufs[num_tx]; + n = write(txq->fd, + rte_pktmbuf_mtod(mbuf, void *), + rte_pktmbuf_pkt_len(mbuf)); if (n <= 0) break; - if (pfd.revents & POLLOUT) { - /* copy the tx frame data */ - mbuf = bufs[num_tx]; - n = write(pfd.fd, rte_pktmbuf_mtod(mbuf, void*), - rte_pktmbuf_pkt_len(mbuf)); - if (n <= 0) - break; - - num_tx++; - num_tx_bytes += mbuf->pkt_len; - rte_pktmbuf_free(mbuf); - } + num_tx++; + num_tx_bytes += mbuf->pkt_len; + rte_pktmbuf_free(mbuf); } txq->stats.opackets += num_tx; -- 2.1.4