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 | |
| 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')
| -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) |
