> On Mar 14, 2017, at 8:51 PM, Adrien Mazarguil <adrien.mazarg...@6wind.com> > wrote: > > 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>
Acked-by: Keith Wiles <keith.wi...@intel.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 > Regards, Keith