aboutsummaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
authorCornelia Huck <cornelia.huck@de.ibm.com>2013-10-23 12:26:34 -0400
committerCornelia Huck <cornelia.huck@de.ibm.com>2014-03-21 08:42:39 -0400
commitd938dc55225a7212e7f31c5a8571da304cc3de16 (patch)
tree082b29c296ab2458d8365969bb85af23fe4a0dde /arch
parent36c95494609cd6d2541c08e806b4d6bc401bc53f (diff)
KVM: Add per-vm capability enablement.
Allow KVM_ENABLE_CAP to act on a vm as well as on a vcpu. This makes more sense when the caller wants to enable a vm-related capability. s390 will be the first user; wire it up. Reviewed-by: Thomas Huth <thuth@linux.vnet.ibm.com> Reviewed-by: Christian Borntraeger <borntraeger@de.ibm.com> Signed-off-by: Cornelia Huck <cornelia.huck@de.ibm.com>
Diffstat (limited to 'arch')
-rw-r--r--arch/s390/kvm/kvm-s390.c24
1 files changed, 24 insertions, 0 deletions
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
191static 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
190long kvm_arch_vm_ioctl(struct file *filp, 206long 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 }