aboutsummaryrefslogtreecommitdiffstats
path: root/virt
diff options
context:
space:
mode:
Diffstat (limited to 'virt')
-rw-r--r--virt/kvm/eventfd.c11
1 files changed, 4 insertions, 7 deletions
diff --git a/virt/kvm/eventfd.c b/virt/kvm/eventfd.c
index e29fd2640709..46dbc0a7dfc1 100644
--- a/virt/kvm/eventfd.c
+++ b/virt/kvm/eventfd.c
@@ -171,7 +171,7 @@ irqfd_deactivate(struct kvm_kernel_irqfd *irqfd)
171 queue_work(irqfd_cleanup_wq, &irqfd->shutdown); 171 queue_work(irqfd_cleanup_wq, &irqfd->shutdown);
172} 172}
173 173
174int __attribute__((weak)) kvm_arch_set_irq( 174int __attribute__((weak)) kvm_arch_set_irq_inatomic(
175 struct kvm_kernel_irq_routing_entry *irq, 175 struct kvm_kernel_irq_routing_entry *irq,
176 struct kvm *kvm, int irq_source_id, 176 struct kvm *kvm, int irq_source_id,
177 int level, 177 int level,
@@ -201,12 +201,9 @@ irqfd_wakeup(wait_queue_t *wait, unsigned mode, int sync, void *key)
201 irq = irqfd->irq_entry; 201 irq = irqfd->irq_entry;
202 } while (read_seqcount_retry(&irqfd->irq_entry_sc, seq)); 202 } while (read_seqcount_retry(&irqfd->irq_entry_sc, seq));
203 /* An event has been signaled, inject an interrupt */ 203 /* An event has been signaled, inject an interrupt */
204 if (irq.type == KVM_IRQ_ROUTING_MSI) 204 if (kvm_arch_set_irq_inatomic(&irq, kvm,
205 kvm_set_msi(&irq, kvm, KVM_USERSPACE_IRQ_SOURCE_ID, 1, 205 KVM_USERSPACE_IRQ_SOURCE_ID, 1,
206 false); 206 false) == -EWOULDBLOCK)
207 else if (kvm_arch_set_irq(&irq, kvm,
208 KVM_USERSPACE_IRQ_SOURCE_ID, 1,
209 false) == -EWOULDBLOCK)
210 schedule_work(&irqfd->inject); 207 schedule_work(&irqfd->inject);
211 srcu_read_unlock(&kvm->irq_srcu, idx); 208 srcu_read_unlock(&kvm->irq_srcu, idx);
212 } 209 }