2015-06-19 12:00, Cunming Liang: > +int > +rte_epoll_wait(int epfd, struct rte_epoll_event *events, > + int maxevents, int timeout) > +{ > + struct epoll_event evs[maxevents]; > + int rc; > + > + if (!events) { > + RTE_LOG(ERR, EAL, "rte_epoll_event can't be NULL\n"); > + return -1; > + } > + > + /* using per thread epoll fd */ > + if (epfd == RTE_EPOLL_PER_THREAD) > + epfd = rte_intr_tls_epfd(); > + > + while (1) { > + rc = epoll_wait(epfd, evs, maxevents, timeout); > + if (likely(rc > 0)) { > + /* epoll_wait has at least one fd ready to read */ > + rc = eal_epoll_process_event(evs, rc, events); > + break; > + } else if (rc < 0) { > + if (errno == EINTR) > + continue; > + /* epoll_wait fail */ > + RTE_LOG(ERR, EAL, "epoll_wait returns with fail %s\n", > + strerror(errno)); > + rc = -1; > + break; > + } > + } > + > + return rc; > +}
In general, such loop is application-level. What is the added value of rte_epoll_wait()? Do we need some wrappers to libc in DPDK?