diff options
author | Jan Kiszka <jan.kiszka@siemens.com> | 2012-03-29 15:14:12 -0400 |
---|---|---|
committer | Avi Kivity <avi@redhat.com> | 2012-04-24 08:59:47 -0400 |
commit | 07975ad3b30579ca27d880491ad992326b930c63 (patch) | |
tree | fea166a02c387949a09a948a51781074bdc9ed68 /include/linux | |
parent | 1f15d10984c854e077da5aa1a23f901496b49773 (diff) |
KVM: Introduce direct MSI message injection for in-kernel irqchips
Currently, MSI messages can only be injected to in-kernel irqchips by
defining a corresponding IRQ route for each message. This is not only
unhandy if the MSI messages are generated "on the fly" by user space,
IRQ routes are a limited resource that user space has to manage
carefully.
By providing a direct injection path, we can both avoid using up limited
resources and simplify the necessary steps for user land.
Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
Signed-off-by: Avi Kivity <avi@redhat.com>
Diffstat (limited to 'include/linux')
-rw-r--r-- | include/linux/kvm.h | 11 | ||||
-rw-r--r-- | include/linux/kvm_host.h | 2 |
2 files changed, 13 insertions, 0 deletions
diff --git a/include/linux/kvm.h b/include/linux/kvm.h index 7a9dd4b3dede..225b452e1d1d 100644 --- a/include/linux/kvm.h +++ b/include/linux/kvm.h | |||
@@ -590,6 +590,7 @@ struct kvm_ppc_pvinfo { | |||
590 | #define KVM_CAP_SYNC_REGS 74 | 590 | #define KVM_CAP_SYNC_REGS 74 |
591 | #define KVM_CAP_PCI_2_3 75 | 591 | #define KVM_CAP_PCI_2_3 75 |
592 | #define KVM_CAP_KVMCLOCK_CTRL 76 | 592 | #define KVM_CAP_KVMCLOCK_CTRL 76 |
593 | #define KVM_CAP_SIGNAL_MSI 77 | ||
593 | 594 | ||
594 | #ifdef KVM_CAP_IRQ_ROUTING | 595 | #ifdef KVM_CAP_IRQ_ROUTING |
595 | 596 | ||
@@ -715,6 +716,14 @@ struct kvm_one_reg { | |||
715 | __u64 addr; | 716 | __u64 addr; |
716 | }; | 717 | }; |
717 | 718 | ||
719 | struct kvm_msi { | ||
720 | __u32 address_lo; | ||
721 | __u32 address_hi; | ||
722 | __u32 data; | ||
723 | __u32 flags; | ||
724 | __u8 pad[16]; | ||
725 | }; | ||
726 | |||
718 | /* | 727 | /* |
719 | * ioctls for VM fds | 728 | * ioctls for VM fds |
720 | */ | 729 | */ |
@@ -789,6 +798,8 @@ struct kvm_s390_ucas_mapping { | |||
789 | /* Available with KVM_CAP_PCI_2_3 */ | 798 | /* Available with KVM_CAP_PCI_2_3 */ |
790 | #define KVM_ASSIGN_SET_INTX_MASK _IOW(KVMIO, 0xa4, \ | 799 | #define KVM_ASSIGN_SET_INTX_MASK _IOW(KVMIO, 0xa4, \ |
791 | struct kvm_assigned_pci_dev) | 800 | struct kvm_assigned_pci_dev) |
801 | /* Available with KVM_CAP_SIGNAL_MSI */ | ||
802 | #define KVM_SIGNAL_MSI _IOW(KVMIO, 0xa5, struct kvm_msi) | ||
792 | 803 | ||
793 | /* | 804 | /* |
794 | * ioctls for vcpu fds | 805 | * ioctls for vcpu fds |
diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h index 186ffab0b9f0..6f343307d72b 100644 --- a/include/linux/kvm_host.h +++ b/include/linux/kvm_host.h | |||
@@ -802,6 +802,8 @@ int kvm_set_irq_routing(struct kvm *kvm, | |||
802 | unsigned flags); | 802 | unsigned flags); |
803 | void kvm_free_irq_routing(struct kvm *kvm); | 803 | void kvm_free_irq_routing(struct kvm *kvm); |
804 | 804 | ||
805 | int kvm_send_userspace_msi(struct kvm *kvm, struct kvm_msi *msi); | ||
806 | |||
805 | #else | 807 | #else |
806 | 808 | ||
807 | static inline void kvm_free_irq_routing(struct kvm *kvm) {} | 809 | static inline void kvm_free_irq_routing(struct kvm *kvm) {} |