Convert mask notifiers to use irqchip/pin instead of gsi.
PATCH 1/1 Convert mask notifiers to use irqchip/pin instead of gsi.
Devices register mask notifier using gsi, but irqchip knows about irqchip/pin, so conversion from irqchip/pin to gsi should be done before looking for mask notifier to call.
Signed-off-by Gleb Natapov <[email protected]>
include/linux/kvm_host.h +2 -1
@@ -447,7 +447,8 @@ void kvm_register_irq_mask_notifier(struct kvm *kvm, int irq, struct kvm_irq_mask_notifier *kimn);void kvm_unregister_irq_mask_notifier (struct kvm *kvm,int irq,struct kvm_irq_mask_notifier *kimn); -void kvm_fire_mask_notifiers (struct kvm *kvm,int irq,bool mask); +void kvm_fire_mask_notifiers (struct kvm *kvm,unsigned irqchip,unsigned pin, +bool mask);#ifdef __KVM_HAVE_IOAPIC void kvm_get_intr_delivery_bitmask(struct kvm_ioapic *ioapic,
virt/kvm/ioapic.c +1 -1
@@ -152,7 +152,7 @@ static void ioapic_write_indirect(struct kvm_ioapic *ioapic, u32 val)update_handled_vectors (ioapic); mask_after = e->fields.mask;if (mask_before != mask_after) -kvm_fire_mask_notifiers (ioapic->kvm, index, mask_after); +kvm_fire_mask_notifiers (ioapic->kvm,KVM_IRQCHIP_IOAPIC , index, mask_after);if (e->fields.trig_mode ==IOAPIC_LEVEL_TRIG && ioapic->irr & (1 << index))ioapic_service (ioapic, index);
virt/kvm/irq_comm.c +8 -4
@@ -279,15 +279,19 @@ void kvm_unregister_irq_mask_notifier(struct kvm *kvm, int irq,synchronize_rcu (); } -void kvm_fire_mask_notifiers (struct kvm *kvm,int irq,bool mask) +void kvm_fire_mask_notifiers (struct kvm *kvm,unsigned irqchip,unsigned pin, +bool mask) {struct kvm_irq_mask_notifier *kimn;struct hlist_node *n; +int gsi;rcu_read_lock (); -hlist_for_each_entry_rcu (kimn, n, &kvm->mask_notifier_list, link) -if (kimn->irq == irq) - kimn->func (kimn, mask); + gsi =rcu_dereference (kvm->irq_routing)->chip[irqchip][pin]; +if (gsi !=-1 ) +hlist_for_each_entry_rcu (kimn, n, &kvm->mask_notifier_list, link) +if (kimn->irq == gsi) + kimn->func (kimn, mask);rcu_read_unlock (); }
--
Gleb.
Marcelo Tosatti
AppliedQuoted 5 lines · Gleb Natapov
Devices register mask notifier using gsi, but irqchip knows about irqchip/pin, so conversion from irqchip/pin to gsi should be done before looking for mask notifier to call.
Signed-off-by Gleb Natapov <[email protected]>
Applied, thanks.