diff options
author | Jens Freimann <jfrei@linux.vnet.ibm.com> | 2014-11-24 11:13:46 -0500 |
---|---|---|
committer | Christian Borntraeger <borntraeger@de.ibm.com> | 2015-03-31 15:07:31 -0400 |
commit | 816c7667ea97c61884e014cfeedaede5b67b0e58 (patch) | |
tree | 0be000b61900a44f9dabe81405b145cbb87b761d /include/uapi/linux/kvm.h | |
parent | 79e87a103de1eda0cb4d726cd8581798e2d38f3e (diff) |
KVM: s390: migrate vcpu interrupt state
This patch adds support to migrate vcpu interrupts. Two new vcpu ioctls
are added which get/set the complete status of pending interrupts in one
go. The ioctls are marked as available with the new capability
KVM_CAP_S390_IRQ_STATE.
We can not use a ONEREG, as the number of pending local interrupts is not
constant and depends on the number of CPUs.
To retrieve the interrupt state we add an ioctl KVM_S390_GET_IRQ_STATE.
Its input parameter is a pointer to a struct kvm_s390_irq_state which
has a buffer and length. For all currently pending interrupts, we copy
a struct kvm_s390_irq into the buffer and pass it to userspace.
To store interrupt state into a buffer provided by userspace, we add an
ioctl KVM_S390_SET_IRQ_STATE. It passes a struct kvm_s390_irq_state into
the kernel and injects all interrupts contained in the buffer.
Signed-off-by: Jens Freimann <jfrei@linux.vnet.ibm.com>
Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
Acked-by: Cornelia Huck <cornelia.huck@de.ibm.com>
Diffstat (limited to 'include/uapi/linux/kvm.h')
-rw-r--r-- | include/uapi/linux/kvm.h | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/include/uapi/linux/kvm.h b/include/uapi/linux/kvm.h index c0632e87a00f..c045c725e521 100644 --- a/include/uapi/linux/kvm.h +++ b/include/uapi/linux/kvm.h | |||
@@ -558,6 +558,13 @@ struct kvm_s390_irq { | |||
558 | } u; | 558 | } u; |
559 | }; | 559 | }; |
560 | 560 | ||
561 | struct kvm_s390_irq_state { | ||
562 | __u64 buf; | ||
563 | __u32 flags; | ||
564 | __u32 len; | ||
565 | __u32 reserved[4]; | ||
566 | }; | ||
567 | |||
561 | /* for KVM_SET_GUEST_DEBUG */ | 568 | /* for KVM_SET_GUEST_DEBUG */ |
562 | 569 | ||
563 | #define KVM_GUESTDBG_ENABLE 0x00000001 | 570 | #define KVM_GUESTDBG_ENABLE 0x00000001 |
@@ -803,6 +810,7 @@ struct kvm_ppc_smmu_info { | |||
803 | #define KVM_CAP_S390_USER_STSI 109 | 810 | #define KVM_CAP_S390_USER_STSI 109 |
804 | #define KVM_CAP_S390_SKEYS 110 | 811 | #define KVM_CAP_S390_SKEYS 110 |
805 | #define KVM_CAP_S390_INJECT_IRQ 113 | 812 | #define KVM_CAP_S390_INJECT_IRQ 113 |
813 | #define KVM_CAP_S390_IRQ_STATE 114 | ||
806 | 814 | ||
807 | #ifdef KVM_CAP_IRQ_ROUTING | 815 | #ifdef KVM_CAP_IRQ_ROUTING |
808 | 816 | ||
@@ -1185,6 +1193,9 @@ struct kvm_s390_ucas_mapping { | |||
1185 | #define KVM_S390_SET_SKEYS _IOW(KVMIO, 0xb3, struct kvm_s390_skeys) | 1193 | #define KVM_S390_SET_SKEYS _IOW(KVMIO, 0xb3, struct kvm_s390_skeys) |
1186 | /* Available with KVM_CAP_S390_INJECT_IRQ */ | 1194 | /* Available with KVM_CAP_S390_INJECT_IRQ */ |
1187 | #define KVM_S390_IRQ _IOW(KVMIO, 0xb4, struct kvm_s390_irq) | 1195 | #define KVM_S390_IRQ _IOW(KVMIO, 0xb4, struct kvm_s390_irq) |
1196 | /* Available with KVM_CAP_S390_IRQ_STATE */ | ||
1197 | #define KVM_S390_SET_IRQ_STATE _IOW(KVMIO, 0xb5, struct kvm_s390_irq_state) | ||
1198 | #define KVM_S390_GET_IRQ_STATE _IOW(KVMIO, 0xb6, struct kvm_s390_irq_state) | ||
1188 | 1199 | ||
1189 | #define KVM_DEV_ASSIGN_ENABLE_IOMMU (1 << 0) | 1200 | #define KVM_DEV_ASSIGN_ENABLE_IOMMU (1 << 0) |
1190 | #define KVM_DEV_ASSIGN_PCI_2_3 (1 << 1) | 1201 | #define KVM_DEV_ASSIGN_PCI_2_3 (1 << 1) |