|
@@ -334,6 +334,11 @@ static int assigned_device_enable_host_intx(struct kvm *kvm,
|
|
|
}
|
|
|
|
|
|
#ifdef __KVM_HAVE_MSI
|
|
|
+static irqreturn_t kvm_assigned_dev_msi(int irq, void *dev_id)
|
|
|
+{
|
|
|
+ return IRQ_WAKE_THREAD;
|
|
|
+}
|
|
|
+
|
|
|
static int assigned_device_enable_host_msi(struct kvm *kvm,
|
|
|
struct kvm_assigned_dev_kernel *dev)
|
|
|
{
|
|
@@ -346,7 +351,7 @@ static int assigned_device_enable_host_msi(struct kvm *kvm,
|
|
|
}
|
|
|
|
|
|
dev->host_irq = dev->dev->irq;
|
|
|
- if (request_threaded_irq(dev->host_irq, NULL,
|
|
|
+ if (request_threaded_irq(dev->host_irq, kvm_assigned_dev_msi,
|
|
|
kvm_assigned_dev_thread_msi, 0,
|
|
|
dev->irq_name, dev)) {
|
|
|
pci_disable_msi(dev->dev);
|
|
@@ -358,6 +363,11 @@ static int assigned_device_enable_host_msi(struct kvm *kvm,
|
|
|
#endif
|
|
|
|
|
|
#ifdef __KVM_HAVE_MSIX
|
|
|
+static irqreturn_t kvm_assigned_dev_msix(int irq, void *dev_id)
|
|
|
+{
|
|
|
+ return IRQ_WAKE_THREAD;
|
|
|
+}
|
|
|
+
|
|
|
static int assigned_device_enable_host_msix(struct kvm *kvm,
|
|
|
struct kvm_assigned_dev_kernel *dev)
|
|
|
{
|
|
@@ -374,7 +384,8 @@ static int assigned_device_enable_host_msix(struct kvm *kvm,
|
|
|
|
|
|
for (i = 0; i < dev->entries_nr; i++) {
|
|
|
r = request_threaded_irq(dev->host_msix_entries[i].vector,
|
|
|
- NULL, kvm_assigned_dev_thread_msix,
|
|
|
+ kvm_assigned_dev_msix,
|
|
|
+ kvm_assigned_dev_thread_msix,
|
|
|
0, dev->irq_name, dev);
|
|
|
if (r)
|
|
|
goto err;
|