diff options
-rw-r--r-- | Documentation/virtual/kvm/api.txt | 6 | ||||
-rw-r--r-- | arch/s390/kvm/kvm-s390.c | 24 | ||||
-rw-r--r-- | include/uapi/linux/kvm.h | 5 |
3 files changed, 33 insertions, 2 deletions
diff --git a/Documentation/virtual/kvm/api.txt b/Documentation/virtual/kvm/api.txt index 4714f282a43e..faf6fe9772c7 100644 --- a/Documentation/virtual/kvm/api.txt +++ b/Documentation/virtual/kvm/api.txt | |||
@@ -932,9 +932,9 @@ documentation when it pops into existence). | |||
932 | 932 | ||
933 | 4.37 KVM_ENABLE_CAP | 933 | 4.37 KVM_ENABLE_CAP |
934 | 934 | ||
935 | Capability: KVM_CAP_ENABLE_CAP | 935 | Capability: KVM_CAP_ENABLE_CAP, KVM_CAP_ENABLE_CAP_VM |
936 | Architectures: ppc, s390 | 936 | Architectures: ppc, s390 |
937 | Type: vcpu ioctl | 937 | Type: vcpu ioctl, vm ioctl (with KVM_CAP_ENABLE_CAP_VM) |
938 | Parameters: struct kvm_enable_cap (in) | 938 | Parameters: struct kvm_enable_cap (in) |
939 | Returns: 0 on success; -1 on error | 939 | Returns: 0 on success; -1 on error |
940 | 940 | ||
@@ -965,6 +965,8 @@ function properly, this is the place to put them. | |||
965 | __u8 pad[64]; | 965 | __u8 pad[64]; |
966 | }; | 966 | }; |
967 | 967 | ||
968 | The vcpu ioctl should be used for vcpu-specific capabilities, the vm ioctl | ||
969 | for vm-wide capabilities. | ||
968 | 970 | ||
969 | 4.38 KVM_GET_MP_STATE | 971 | 4.38 KVM_GET_MP_STATE |
970 | 972 | ||
diff --git a/arch/s390/kvm/kvm-s390.c b/arch/s390/kvm/kvm-s390.c index 7337c577e949..9f1e99f12d4f 100644 --- a/arch/s390/kvm/kvm-s390.c +++ b/arch/s390/kvm/kvm-s390.c | |||
@@ -159,6 +159,7 @@ int kvm_dev_ioctl_check_extension(long ext) | |||
159 | case KVM_CAP_S390_CSS_SUPPORT: | 159 | case KVM_CAP_S390_CSS_SUPPORT: |
160 | case KVM_CAP_IOEVENTFD: | 160 | case KVM_CAP_IOEVENTFD: |
161 | case KVM_CAP_DEVICE_CTRL: | 161 | case KVM_CAP_DEVICE_CTRL: |
162 | case KVM_CAP_ENABLE_CAP_VM: | ||
162 | r = 1; | 163 | r = 1; |
163 | break; | 164 | break; |
164 | case KVM_CAP_NR_VCPUS: | 165 | case KVM_CAP_NR_VCPUS: |
@@ -187,6 +188,21 @@ int kvm_vm_ioctl_get_dirty_log(struct kvm *kvm, | |||
187 | return 0; | 188 | return 0; |
188 | } | 189 | } |
189 | 190 | ||
191 | static int kvm_vm_ioctl_enable_cap(struct kvm *kvm, struct kvm_enable_cap *cap) | ||
192 | { | ||
193 | int r; | ||
194 | |||
195 | if (cap->flags) | ||
196 | return -EINVAL; | ||
197 | |||
198 | switch (cap->cap) { | ||
199 | default: | ||
200 | r = -EINVAL; | ||
201 | break; | ||
202 | } | ||
203 | return r; | ||
204 | } | ||
205 | |||
190 | long kvm_arch_vm_ioctl(struct file *filp, | 206 | long kvm_arch_vm_ioctl(struct file *filp, |
191 | unsigned int ioctl, unsigned long arg) | 207 | unsigned int ioctl, unsigned long arg) |
192 | { | 208 | { |
@@ -204,6 +220,14 @@ long kvm_arch_vm_ioctl(struct file *filp, | |||
204 | r = kvm_s390_inject_vm(kvm, &s390int); | 220 | r = kvm_s390_inject_vm(kvm, &s390int); |
205 | break; | 221 | break; |
206 | } | 222 | } |
223 | case KVM_ENABLE_CAP: { | ||
224 | struct kvm_enable_cap cap; | ||
225 | r = -EFAULT; | ||
226 | if (copy_from_user(&cap, argp, sizeof(cap))) | ||
227 | break; | ||
228 | r = kvm_vm_ioctl_enable_cap(kvm, &cap); | ||
229 | break; | ||
230 | } | ||
207 | default: | 231 | default: |
208 | r = -ENOTTY; | 232 | r = -ENOTTY; |
209 | } | 233 | } |
diff --git a/include/uapi/linux/kvm.h b/include/uapi/linux/kvm.h index a7518be31d53..46ea1b470c76 100644 --- a/include/uapi/linux/kvm.h +++ b/include/uapi/linux/kvm.h | |||
@@ -741,6 +741,7 @@ struct kvm_ppc_smmu_info { | |||
741 | #define KVM_CAP_EXT_EMUL_CPUID 95 | 741 | #define KVM_CAP_EXT_EMUL_CPUID 95 |
742 | #define KVM_CAP_HYPERV_TIME 96 | 742 | #define KVM_CAP_HYPERV_TIME 96 |
743 | #define KVM_CAP_IOAPIC_POLARITY_IGNORED 97 | 743 | #define KVM_CAP_IOAPIC_POLARITY_IGNORED 97 |
744 | #define KVM_CAP_ENABLE_CAP_VM 98 | ||
744 | 745 | ||
745 | #ifdef KVM_CAP_IRQ_ROUTING | 746 | #ifdef KVM_CAP_IRQ_ROUTING |
746 | 747 | ||
@@ -1076,6 +1077,10 @@ struct kvm_s390_ucas_mapping { | |||
1076 | /* Available with KVM_CAP_DEBUGREGS */ | 1077 | /* Available with KVM_CAP_DEBUGREGS */ |
1077 | #define KVM_GET_DEBUGREGS _IOR(KVMIO, 0xa1, struct kvm_debugregs) | 1078 | #define KVM_GET_DEBUGREGS _IOR(KVMIO, 0xa1, struct kvm_debugregs) |
1078 | #define KVM_SET_DEBUGREGS _IOW(KVMIO, 0xa2, struct kvm_debugregs) | 1079 | #define KVM_SET_DEBUGREGS _IOW(KVMIO, 0xa2, struct kvm_debugregs) |
1080 | /* | ||
1081 | * vcpu version available with KVM_ENABLE_CAP | ||
1082 | * vm version available with KVM_CAP_ENABLE_CAP_VM | ||
1083 | */ | ||
1079 | #define KVM_ENABLE_CAP _IOW(KVMIO, 0xa3, struct kvm_enable_cap) | 1084 | #define KVM_ENABLE_CAP _IOW(KVMIO, 0xa3, struct kvm_enable_cap) |
1080 | /* Available with KVM_CAP_XSAVE */ | 1085 | /* Available with KVM_CAP_XSAVE */ |
1081 | #define KVM_GET_XSAVE _IOR(KVMIO, 0xa4, struct kvm_xsave) | 1086 | #define KVM_GET_XSAVE _IOR(KVMIO, 0xa4, struct kvm_xsave) |