diff options
author | Paolo Bonzini <pbonzini@redhat.com> | 2017-02-16 04:40:56 -0500 |
---|---|---|
committer | Paolo Bonzini <pbonzini@redhat.com> | 2018-12-14 06:34:18 -0500 |
commit | e5d83c74a5800c2a1fa3ba982c1c4b2b39ae6db2 (patch) | |
tree | a948fe650674db8496d364d2f5d9561403cbe11c /virt | |
parent | bb22dc14a2c29f6efef40ee72344c5d283a92987 (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.c | 25 |
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 | ||
2975 | int __attribute__((weak)) kvm_vm_ioctl_enable_cap(struct kvm *kvm, | ||
2976 | struct kvm_enable_cap *cap) | ||
2977 | { | ||
2978 | return -EINVAL; | ||
2979 | } | ||
2980 | |||
2981 | static 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 | |||
2974 | static long kvm_vm_ioctl(struct file *filp, | 2990 | static 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 | ||