On Fri, Mar 6, 2015 at 5:55 PM, Stephen Hemminger < stephen at networkplumber.org> wrote:
> No virtio_dev_init is called too late, after interrupt handling > threads are spawned. > > /* Launch threads, called at application init(). */ > int > rte_eal_init(int argc, char **argv) > { > int i, fctret, ret; > ... > if (rte_eal_intr_init() < 0) > rte_panic("Cannot init interrupt-handling thread\n"); > ... > > if (rte_eal_dev_init() < 0) > rte_panic("Cannot init pmd devices\n" > There is no "io level" loss when going through fork and/or daemon : this affirmation contradicts the manual and my test programs. Now, looking at the problem from scratch, the constructor in virtio pmd does not call iopl(). It registers a driver with an init function called from rte_eal_dev_init(). So iopl() is not called at "_start" time (in both virtio static or shared object cases), but in rte_eal_dev_init(). In the end, the fix would be to move rte_eal_intr_init() after rte_eal_dev_init(). Can you test this ? Thanks. -- David Marchand