static irqreturn_t ivshmem_msix_handler(int irq, void *opaque) { struct uio_info *dev_info = (struct uio_info *) opaque; /* we have to do this explicitly when using MSI-X */ uio_event_notify(dev_info); return IRQ_HANDLED; }
/** * uio_interrupt - hardware interrupt handler * @irq: IRQ number, can be UIO_IRQ_CYCLIC for cyclic timer * @dev_id: Pointer to the devices uio_device structure */ static irqreturn_t uio_interrupt(int irq, void *dev_id) { struct uio_device *idev = (struct uio_device *)dev_id; irqreturn_t ret = idev->info->handler(irq, idev->info); if (ret == IRQ_HANDLED) uio_event_notify(idev->info); return ret; }
/* * Callback from vmbus_event when something is in inbound ring. */ static void hv_uio_channel_cb(void *context) { struct hv_uio_private_data *pdata = context; struct hv_device *dev = pdata->device; dev->channel->inbound.ring_buffer->interrupt_mask = 1; mb(); uio_event_notify(&pdata->info); }
/* * Callback from vmbus_event when something is in inbound ring. */ static void hv_uio_channel_cb(void *context) { struct vmbus_channel *chan = context; struct hv_device *hv_dev = chan->device_obj; struct hv_uio_private_data *pdata = hv_get_drvdata(hv_dev); chan->inbound.ring_buffer->interrupt_mask = 1; virt_mb(); uio_event_notify(&pdata->info); }
static irqreturn_t ivshmem_msix_handler(int irq, void *opaque) { struct uio_info * dev_info = (struct uio_info *) opaque; /* we have to do this explicitly when using MSI-X */ uio_event_notify(dev_info); /* debug printk("MSIX Interrupt received\n"); */ return IRQ_HANDLED; }
/* * Callback from vmbus_event when channel is rescinded. */ static void hv_uio_rescind(struct vmbus_channel *channel) { struct hv_device *hv_dev = channel->primary_channel->device_obj; struct hv_uio_private_data *pdata = hv_get_drvdata(hv_dev); /* * Turn off the interrupt file handle * Next read for event will return -EIO */ pdata->info.irq = 0; /* Wake up reader */ uio_event_notify(&pdata->info); }
/** * This is interrupt handler which will check if the interrupt is for the right device. * If yes, disable it here and will be enable later. */ static irqreturn_t igbuio_pci_irqhandler(int irq, void *dev_id) { struct rte_uio_pci_dev *udev = (struct rte_uio_pci_dev *)dev_id; struct uio_info *info = &udev->info; /* Legacy mode need to mask in hardware */ if (udev->mode == RTE_INTR_MODE_LEGACY && !pci_check_and_mask_intx(udev->pdev)) return IRQ_NONE; uio_event_notify(info); /* Message signal mode, no share IRQ and automasked */ return IRQ_HANDLED; }