> -----Original Message----- > From: dev [mailto:dev-bounces at dpdk.org] On Behalf Of Ouyang Changchun > Sent: Tuesday, January 27, 2015 10:36 AM > To: dev at dpdk.org > Subject: [dpdk-dev] [PATCH v2 04/24] virtio: Add support for Link State > interrupt > > Virtio has link state interrupt which can be used. > > Signed-off-by: Stephen Hemminger <stephen at networkplumber.org> > Signed-off-by: Changchun Ouyang <changchun.ouyang at intel.com> > --- > lib/librte_pmd_virtio/virtio_ethdev.c | 78 +++++++++++++++++++++++++++------ > -- > lib/librte_pmd_virtio/virtio_pci.c | 22 ++++++++++ > lib/librte_pmd_virtio/virtio_pci.h | 4 ++ > 3 files changed, 86 insertions(+), 18 deletions(-) > > diff --git a/lib/librte_pmd_virtio/virtio_ethdev.c > b/lib/librte_pmd_virtio/virtio_ethdev.c > index 5df3b54..ef87ff8 100644 > --- a/lib/librte_pmd_virtio/virtio_ethdev.c > +++ b/lib/librte_pmd_virtio/virtio_ethdev.c > @@ -845,6 +845,34 @@ static int virtio_resource_init(struct rte_pci_device > *pci_dev __rte_unused) > #endif > > /* > + * Process Virtio Config changed interrupt and call the callback > + * if link state changed. > + */ > +static void > +virtio_interrupt_handler(__rte_unused struct rte_intr_handle *handle, > + void *param) > +{ > + struct rte_eth_dev *dev = param; > + struct virtio_hw *hw = > + VIRTIO_DEV_PRIVATE_TO_HW(dev->data->dev_private); > + uint8_t isr; > + > + /* Read interrupt status which clears interrupt */ > + isr = vtpci_isr(hw); > + PMD_DRV_LOG(INFO, "interrupt status = %#x", isr); > + > + if (rte_intr_enable(&dev->pci_dev->intr_handle) < 0) > + PMD_DRV_LOG(ERR, "interrupt enable failed"); > +
Is it better to put rte_intr_enable after we have handled the interrupt. Is there the possibility of interrupt reentrant in uio intr framework? > + if (isr & VIRTIO_PCI_ISR_CONFIG) { > + if (virtio_dev_link_update(dev, 0) == 0) > + _rte_eth_dev_callback_process(dev, > + > RTE_ETH_EVENT_INTR_LSC); > + } > + > +} > + >