|
@@ -451,9 +451,18 @@ bool kvm_irq_has_notifier(struct kvm *kvm, unsigned irqchip, unsigned pin)
|
|
|
}
|
|
|
EXPORT_SYMBOL_GPL(kvm_irq_has_notifier);
|
|
|
|
|
|
-void kvm_notify_acked_irq(struct kvm *kvm, unsigned irqchip, unsigned pin)
|
|
|
+void kvm_notify_acked_gsi(struct kvm *kvm, int gsi)
|
|
|
{
|
|
|
struct kvm_irq_ack_notifier *kian;
|
|
|
+
|
|
|
+ hlist_for_each_entry_rcu(kian, &kvm->irq_ack_notifier_list,
|
|
|
+ link)
|
|
|
+ if (kian->gsi == gsi)
|
|
|
+ kian->irq_acked(kian);
|
|
|
+}
|
|
|
+
|
|
|
+void kvm_notify_acked_irq(struct kvm *kvm, unsigned irqchip, unsigned pin)
|
|
|
+{
|
|
|
int gsi, idx;
|
|
|
|
|
|
trace_kvm_ack_irq(irqchip, pin);
|
|
@@ -461,10 +470,7 @@ void kvm_notify_acked_irq(struct kvm *kvm, unsigned irqchip, unsigned pin)
|
|
|
idx = srcu_read_lock(&kvm->irq_srcu);
|
|
|
gsi = kvm_irq_map_chip_pin(kvm, irqchip, pin);
|
|
|
if (gsi != -1)
|
|
|
- hlist_for_each_entry_rcu(kian, &kvm->irq_ack_notifier_list,
|
|
|
- link)
|
|
|
- if (kian->gsi == gsi)
|
|
|
- kian->irq_acked(kian);
|
|
|
+ kvm_notify_acked_gsi(kvm, gsi);
|
|
|
srcu_read_unlock(&kvm->irq_srcu, idx);
|
|
|
}
|
|
|
|