drivers/net: use ack in interrupt handlers
[dpdk.git] / drivers / net / virtio / virtio_ethdev.c
index 04aecb7..62c8274 100644 (file)
@@ -1264,6 +1264,20 @@ virtio_vlan_filter_set(struct rte_eth_dev *dev, uint16_t vlan_id, int on)
        return virtio_send_command(hw->cvq, &ctrl, &len, 1);
 }
 
+static int
+virtio_intr_unmask(struct rte_eth_dev *dev)
+{
+       struct virtio_hw *hw = dev->data->dev_private;
+
+       if (rte_intr_ack(dev->intr_handle) < 0)
+               return -1;
+
+       if (!hw->virtio_user_dev)
+               hw->use_msix = vtpci_msix_detect(RTE_ETH_DEV_TO_PCI(dev));
+
+       return 0;
+}
+
 static int
 virtio_intr_enable(struct rte_eth_dev *dev)
 {
@@ -1457,7 +1471,7 @@ virtio_interrupt_handler(void *param)
        isr = vtpci_isr(hw);
        PMD_DRV_LOG(INFO, "interrupt status = %#x", isr);
 
-       if (virtio_intr_enable(dev) < 0)
+       if (virtio_intr_unmask(dev) < 0)
                PMD_DRV_LOG(ERR, "interrupt enable failed");
 
        if (isr & VIRTIO_PCI_ISR_CONFIG) {