If rte_eth_conf.intr_conf.rxq != 0 and rte_eth_conf.intr_conf.lsc = 0 when rte_eth_dev_configure() is called, rx queue interrupts can be enabled/disabled with rte_eth_dev_rx_intr_{enable|disable} and DPDK applications can wait for rx queue interrupts with rte_epoll_wait(). This is the case for both igb_uio and vfio-pci drivers.
vfio-pci already uses non-threaded ISR, but currently we can only use igb_uio when running DPDK applications in virtual machines. David -----Original Message----- From: Stephen Hemminger [mailto:step...@networkplumber.org] Sent: Friday, January 20, 2017 3:51 PM To: Su, David W <david.w...@intel.com> Cc: dev@dpdk.org Subject: Re: [dpdk-dev] [PATCH] igb_uio: use non-threaded ISR On Fri, 20 Jan 2017 15:08:19 -0800 David Su <david.w...@intel.com> wrote: > This eliminates the overhead of a task switch when an interrupt arrives. > > Signed-off-by: David Su <david.w...@intel.com> > --- > lib/librte_eal/linuxapp/igb_uio/igb_uio.c | 3 ++- > 1 files changed, 2 insertions(+), 1 deletions(-) > > diff --git a/lib/librte_eal/linuxapp/igb_uio/igb_uio.c > b/lib/librte_eal/linuxapp/igb_uio/igb_uio.c > index df41e45..9338e14 100644 > --- a/lib/librte_eal/linuxapp/igb_uio/igb_uio.c > +++ b/lib/librte_eal/linuxapp/igb_uio/igb_uio.c > @@ -382,6 +382,7 @@ igbuio_pci_probe(struct pci_dev *dev, const struct > pci_device_id *id) > msix_entry.entry = 0; > if (pci_enable_msix(dev, &msix_entry, 1) == 0) { > dev_dbg(&dev->dev, "using MSI-X"); > + udev->info.irq_flags = IRQF_NO_THREAD; > udev->info.irq = msix_entry.vector; > udev->mode = RTE_INTR_MODE_MSIX; > break; > @@ -390,7 +391,7 @@ igbuio_pci_probe(struct pci_dev *dev, const struct > pci_device_id *id) > case RTE_INTR_MODE_LEGACY: > if (pci_intx_mask_supported(dev)) { > dev_dbg(&dev->dev, "using INTX"); > - udev->info.irq_flags = IRQF_SHARED; > + udev->info.irq_flags = IRQF_SHARED | IRQF_NO_THREAD; > udev->info.irq = dev->irq; > udev->mode = RTE_INTR_MODE_LEGACY; > break; Since interrupts are only used for link state transistions with igb_uio, I can't see how the overhead of task switch would matter.