summaryrefslogtreecommitdiffstats
path: root/virt
diff options
context:
space:
mode:
authorPaolo Bonzini <pbonzini@redhat.com>2017-02-16 04:40:56 -0500
committerPaolo Bonzini <pbonzini@redhat.com>2018-12-14 06:34:18 -0500
commite5d83c74a5800c2a1fa3ba982c1c4b2b39ae6db2 (patch)
treea948fe650674db8496d364d2f5d9561403cbe11c /virt
parentbb22dc14a2c29f6efef40ee72344c5d283a92987 (diff)
kvm: make KVM_CAP_ENABLE_CAP_VM architecture agnostic
The first such capability to be handled in virt/kvm/ will be manual dirty page reprotection. Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Diffstat (limited to 'virt')
-rw-r--r--virt/kvm/kvm_main.c25
1 files changed, 25 insertions, 0 deletions
diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c
index 2679e476b6c3..1d6b77162d7c 100644
--- a/virt/kvm/kvm_main.c
+++ b/virt/kvm/kvm_main.c
@@ -2948,6 +2948,7 @@ static long kvm_vm_ioctl_check_extension_generic(struct kvm *kvm, long arg)
2948#endif 2948#endif
2949 case KVM_CAP_IOEVENTFD_ANY_LENGTH: 2949 case KVM_CAP_IOEVENTFD_ANY_LENGTH:
2950 case KVM_CAP_CHECK_EXTENSION_VM: 2950 case KVM_CAP_CHECK_EXTENSION_VM:
2951 case KVM_CAP_ENABLE_CAP_VM:
2951 return 1; 2952 return 1;
2952#ifdef CONFIG_KVM_MMIO 2953#ifdef CONFIG_KVM_MMIO
2953 case KVM_CAP_COALESCED_MMIO: 2954 case KVM_CAP_COALESCED_MMIO:
@@ -2971,6 +2972,21 @@ static long kvm_vm_ioctl_check_extension_generic(struct kvm *kvm, long arg)
2971 return kvm_vm_ioctl_check_extension(kvm, arg); 2972 return kvm_vm_ioctl_check_extension(kvm, arg);
2972} 2973}
2973 2974
2975int __attribute__((weak)) kvm_vm_ioctl_enable_cap(struct kvm *kvm,
2976 struct kvm_enable_cap *cap)
2977{
2978 return -EINVAL;
2979}
2980
2981static int kvm_vm_ioctl_enable_cap_generic(struct kvm *kvm,
2982 struct kvm_enable_cap *cap)
2983{
2984 switch (cap->cap) {
2985 default:
2986 return kvm_vm_ioctl_enable_cap(kvm, cap);
2987 }
2988}
2989
2974static long kvm_vm_ioctl(struct file *filp, 2990static long kvm_vm_ioctl(struct file *filp,
2975 unsigned int ioctl, unsigned long arg) 2991 unsigned int ioctl, unsigned long arg)
2976{ 2992{
@@ -2984,6 +3000,15 @@ static long kvm_vm_ioctl(struct file *filp,
2984 case KVM_CREATE_VCPU: 3000 case KVM_CREATE_VCPU:
2985 r = kvm_vm_ioctl_create_vcpu(kvm, arg); 3001 r = kvm_vm_ioctl_create_vcpu(kvm, arg);
2986 break; 3002 break;
3003 case KVM_ENABLE_CAP: {
3004 struct kvm_enable_cap cap;
3005
3006 r = -EFAULT;
3007 if (copy_from_user(&cap, argp, sizeof(cap)))
3008 goto out;
3009 r = kvm_vm_ioctl_enable_cap_generic(kvm, &cap);
3010 break;
3011 }
2987 case KVM_SET_USER_MEMORY_REGION: { 3012 case KVM_SET_USER_MEMORY_REGION: {
2988 struct kvm_userspace_memory_region kvm_userspace_mem; 3013 struct kvm_userspace_memory_region kvm_userspace_mem;
2989 3014