summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYunhong Jiang <yunhong.jiang@intel.com>2015-08-18 11:27:04 -0700
committerYunhong Jiang <yunhong.jiang@linux.intel.com>2015-11-24 16:17:35 -0800
commita233b3fef0ef0048071145eb233becffbdf96d0f (patch)
tree22469d010e89674d1ac4ec9df0eebe1e1b28de8c
parent6744cd0d1d2faad4e7b345563b91888d32db221e (diff)
Make vfio MSI interrupt be non-threaded.
Currently the vfio msi interrupt is kept as IRQ thread, this is not good for NFV scenerio because in NFV scenerio, we want to inject the interrupt to the guest asap. A threaded IRQ introduces schedule latency. However, this change is like a quick and dirty and may bring potential deadlock, because the spinlock_irqsave() from eventfd_signal() is preemptible in RT kernel, which should not be held on IRQ context. But changing it to be raw_spinlock is bad because it will increase the latency a lot if the eventfd is accessed by user space. The deadlock should be ok since for vfio MSI handler is purely kernel story and the lock is a per-eventfd lock and seems no one else is using it for the vfio msi scenario. Upstream status: discussion https://lkml.org/lkml/2015/10/26/764 Change-Id: Ie4405a5b568aa75ca8c3481eeeea228a486b9794
-rw-r--r--kernel/drivers/vfio/pci/vfio_pci_intrs.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/kernel/drivers/vfio/pci/vfio_pci_intrs.c b/kernel/drivers/vfio/pci/vfio_pci_intrs.c
index 1f577b4ac..a21d8e1e3 100644
--- a/kernel/drivers/vfio/pci/vfio_pci_intrs.c
+++ b/kernel/drivers/vfio/pci/vfio_pci_intrs.c
@@ -352,7 +352,7 @@ static int vfio_msi_set_vector_signal(struct vfio_pci_device *vdev,
pci_write_msi_msg(irq, &msg);
}
- ret = request_irq(irq, vfio_msihandler, 0,
+ ret = request_irq(irq, vfio_msihandler, IRQF_NO_THREAD,
vdev->ctx[vector].name, trigger);
if (ret) {
kfree(vdev->ctx[vector].name);