diff options
author | Avi Kivity <avi@redhat.com> | 2009-01-04 17:10:50 +0200 |
---|---|---|
committer | Avi Kivity <avi@redhat.com> | 2009-03-24 11:03:03 +0200 |
commit | 75858a84a6207f5e60196f6bbd18fde4250e5759 (patch) | |
tree | ad8ab5d60a616270c61d88a9af08713cefbc9d35 /include/linux/kvm_host.h | |
parent | 5d9b8e30f543a9f21a968a4cda71e8f6d1c66a61 (diff) | |
download | kernel_goldelico_gta04-75858a84a6207f5e60196f6bbd18fde4250e5759.zip kernel_goldelico_gta04-75858a84a6207f5e60196f6bbd18fde4250e5759.tar.gz kernel_goldelico_gta04-75858a84a6207f5e60196f6bbd18fde4250e5759.tar.bz2 |
KVM: Interrupt mask notifiers for ioapic
Allow clients to request notifications when the guest masks or unmasks a
particular irq line. This complements irq ack notifications, as the guest
will not ack an irq line that is masked.
Currently implemented for the ioapic only.
Signed-off-by: Avi Kivity <avi@redhat.com>
Diffstat (limited to 'include/linux/kvm_host.h')
-rw-r--r-- | include/linux/kvm_host.h | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h index 3cf0ede..99963f3 100644 --- a/include/linux/kvm_host.h +++ b/include/linux/kvm_host.h @@ -127,6 +127,10 @@ struct kvm { struct kvm_coalesced_mmio_ring *coalesced_mmio_ring; #endif +#ifdef CONFIG_HAVE_KVM_IRQCHIP + struct hlist_head mask_notifier_list; +#endif + #ifdef KVM_ARCH_WANT_MMU_NOTIFIER struct mmu_notifier mmu_notifier; unsigned long mmu_notifier_seq; @@ -320,6 +324,19 @@ struct kvm_assigned_dev_kernel { struct pci_dev *dev; struct kvm *kvm; }; + +struct kvm_irq_mask_notifier { + void (*func)(struct kvm_irq_mask_notifier *kimn, bool masked); + int irq; + struct hlist_node link; +}; + +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_set_irq(struct kvm *kvm, int irq_source_id, int irq, int level); void kvm_notify_acked_irq(struct kvm *kvm, unsigned gsi); void kvm_register_irq_ack_notifier(struct kvm *kvm, |