summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Documentation/virtual/kvm/api.txt13
-rw-r--r--arch/powerpc/kvm/powerpc.c14
-rw-r--r--arch/s390/kvm/kvm-s390.c11
-rw-r--r--arch/x86/kvm/x86.c14
-rw-r--r--include/linux/kvm_host.h2
-rw-r--r--virt/kvm/kvm_main.c25
6 files changed, 41 insertions, 38 deletions
diff --git a/Documentation/virtual/kvm/api.txt b/Documentation/virtual/kvm/api.txt
index cd209f7730af..1071c10cf1c7 100644
--- a/Documentation/virtual/kvm/api.txt
+++ b/Documentation/virtual/kvm/api.txt
@@ -1129,10 +1129,15 @@ documentation when it pops into existence).
1129 1129
11304.37 KVM_ENABLE_CAP 11304.37 KVM_ENABLE_CAP
1131 1131
1132Capability: KVM_CAP_ENABLE_CAP, KVM_CAP_ENABLE_CAP_VM 1132Capability: KVM_CAP_ENABLE_CAP
1133Architectures: x86 (only KVM_CAP_ENABLE_CAP_VM), 1133Architectures: mips, ppc, s390
1134 mips (only KVM_CAP_ENABLE_CAP), ppc, s390 1134Type: vcpu ioctl
1135Type: vcpu ioctl, vm ioctl (with KVM_CAP_ENABLE_CAP_VM) 1135Parameters: struct kvm_enable_cap (in)
1136Returns: 0 on success; -1 on error
1137
1138Capability: KVM_CAP_ENABLE_CAP_VM
1139Architectures: all
1140Type: vcpu ioctl
1136Parameters: struct kvm_enable_cap (in) 1141Parameters: struct kvm_enable_cap (in)
1137Returns: 0 on success; -1 on error 1142Returns: 0 on success; -1 on error
1138 1143
diff --git a/arch/powerpc/kvm/powerpc.c b/arch/powerpc/kvm/powerpc.c
index 2869a299c4ed..b1ed31a17a8c 100644
--- a/arch/powerpc/kvm/powerpc.c
+++ b/arch/powerpc/kvm/powerpc.c
@@ -518,7 +518,6 @@ int kvm_vm_ioctl_check_extension(struct kvm *kvm, long ext)
518 case KVM_CAP_PPC_UNSET_IRQ: 518 case KVM_CAP_PPC_UNSET_IRQ:
519 case KVM_CAP_PPC_IRQ_LEVEL: 519 case KVM_CAP_PPC_IRQ_LEVEL:
520 case KVM_CAP_ENABLE_CAP: 520 case KVM_CAP_ENABLE_CAP:
521 case KVM_CAP_ENABLE_CAP_VM:
522 case KVM_CAP_ONE_REG: 521 case KVM_CAP_ONE_REG:
523 case KVM_CAP_IOEVENTFD: 522 case KVM_CAP_IOEVENTFD:
524 case KVM_CAP_DEVICE_CTRL: 523 case KVM_CAP_DEVICE_CTRL:
@@ -2084,8 +2083,8 @@ int kvm_vm_ioctl_irq_line(struct kvm *kvm, struct kvm_irq_level *irq_event,
2084} 2083}
2085 2084
2086 2085
2087static int kvm_vm_ioctl_enable_cap(struct kvm *kvm, 2086int kvm_vm_ioctl_enable_cap(struct kvm *kvm,
2088 struct kvm_enable_cap *cap) 2087 struct kvm_enable_cap *cap)
2089{ 2088{
2090 int r; 2089 int r;
2091 2090
@@ -2273,15 +2272,6 @@ long kvm_arch_vm_ioctl(struct file *filp,
2273 2272
2274 break; 2273 break;
2275 } 2274 }
2276 case KVM_ENABLE_CAP:
2277 {
2278 struct kvm_enable_cap cap;
2279 r = -EFAULT;
2280 if (copy_from_user(&cap, argp, sizeof(cap)))
2281 goto out;
2282 r = kvm_vm_ioctl_enable_cap(kvm, &cap);
2283 break;
2284 }
2285#ifdef CONFIG_SPAPR_TCE_IOMMU 2275#ifdef CONFIG_SPAPR_TCE_IOMMU
2286 case KVM_CREATE_SPAPR_TCE_64: { 2276 case KVM_CREATE_SPAPR_TCE_64: {
2287 struct kvm_create_spapr_tce_64 create_tce_64; 2277 struct kvm_create_spapr_tce_64 create_tce_64;
diff --git a/arch/s390/kvm/kvm-s390.c b/arch/s390/kvm/kvm-s390.c
index fe24150ff666..16c300bdf2c8 100644
--- a/arch/s390/kvm/kvm-s390.c
+++ b/arch/s390/kvm/kvm-s390.c
@@ -464,7 +464,6 @@ int kvm_vm_ioctl_check_extension(struct kvm *kvm, long ext)
464 case KVM_CAP_S390_CSS_SUPPORT: 464 case KVM_CAP_S390_CSS_SUPPORT:
465 case KVM_CAP_IOEVENTFD: 465 case KVM_CAP_IOEVENTFD:
466 case KVM_CAP_DEVICE_CTRL: 466 case KVM_CAP_DEVICE_CTRL:
467 case KVM_CAP_ENABLE_CAP_VM:
468 case KVM_CAP_S390_IRQCHIP: 467 case KVM_CAP_S390_IRQCHIP:
469 case KVM_CAP_VM_ATTRIBUTES: 468 case KVM_CAP_VM_ATTRIBUTES:
470 case KVM_CAP_MP_STATE: 469 case KVM_CAP_MP_STATE:
@@ -607,7 +606,7 @@ static void icpt_operexc_on_all_vcpus(struct kvm *kvm)
607 } 606 }
608} 607}
609 608
610static int kvm_vm_ioctl_enable_cap(struct kvm *kvm, struct kvm_enable_cap *cap) 609int kvm_vm_ioctl_enable_cap(struct kvm *kvm, struct kvm_enable_cap *cap)
611{ 610{
612 int r; 611 int r;
613 612
@@ -1933,14 +1932,6 @@ long kvm_arch_vm_ioctl(struct file *filp,
1933 r = kvm_s390_inject_vm(kvm, &s390int); 1932 r = kvm_s390_inject_vm(kvm, &s390int);
1934 break; 1933 break;
1935 } 1934 }
1936 case KVM_ENABLE_CAP: {
1937 struct kvm_enable_cap cap;
1938 r = -EFAULT;
1939 if (copy_from_user(&cap, argp, sizeof(cap)))
1940 break;
1941 r = kvm_vm_ioctl_enable_cap(kvm, &cap);
1942 break;
1943 }
1944 case KVM_CREATE_IRQCHIP: { 1935 case KVM_CREATE_IRQCHIP: {
1945 struct kvm_irq_routing_entry routing; 1936 struct kvm_irq_routing_entry routing;
1946 1937
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
index d02937760c3b..714c5eb0c3bd 100644
--- a/arch/x86/kvm/x86.c
+++ b/arch/x86/kvm/x86.c
@@ -3008,7 +3008,6 @@ int kvm_vm_ioctl_check_extension(struct kvm *kvm, long ext)
3008 case KVM_CAP_HYPERV_TIME: 3008 case KVM_CAP_HYPERV_TIME:
3009 case KVM_CAP_IOAPIC_POLARITY_IGNORED: 3009 case KVM_CAP_IOAPIC_POLARITY_IGNORED:
3010 case KVM_CAP_TSC_DEADLINE_TIMER: 3010 case KVM_CAP_TSC_DEADLINE_TIMER:
3011 case KVM_CAP_ENABLE_CAP_VM:
3012 case KVM_CAP_DISABLE_QUIRKS: 3011 case KVM_CAP_DISABLE_QUIRKS:
3013 case KVM_CAP_SET_BOOT_CPU_ID: 3012 case KVM_CAP_SET_BOOT_CPU_ID:
3014 case KVM_CAP_SPLIT_IRQCHIP: 3013 case KVM_CAP_SPLIT_IRQCHIP:
@@ -4431,8 +4430,8 @@ int kvm_vm_ioctl_irq_line(struct kvm *kvm, struct kvm_irq_level *irq_event,
4431 return 0; 4430 return 0;
4432} 4431}
4433 4432
4434static int kvm_vm_ioctl_enable_cap(struct kvm *kvm, 4433int kvm_vm_ioctl_enable_cap(struct kvm *kvm,
4435 struct kvm_enable_cap *cap) 4434 struct kvm_enable_cap *cap)
4436{ 4435{
4437 int r; 4436 int r;
4438 4437
@@ -4765,15 +4764,6 @@ set_identity_unlock:
4765 r = 0; 4764 r = 0;
4766 break; 4765 break;
4767 } 4766 }
4768 case KVM_ENABLE_CAP: {
4769 struct kvm_enable_cap cap;
4770
4771 r = -EFAULT;
4772 if (copy_from_user(&cap, argp, sizeof(cap)))
4773 goto out;
4774 r = kvm_vm_ioctl_enable_cap(kvm, &cap);
4775 break;
4776 }
4777 case KVM_MEMORY_ENCRYPT_OP: { 4767 case KVM_MEMORY_ENCRYPT_OP: {
4778 r = -ENOTTY; 4768 r = -ENOTTY;
4779 if (kvm_x86_ops->mem_enc_op) 4769 if (kvm_x86_ops->mem_enc_op)
diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h
index c926698040e0..54cc06dd7e6c 100644
--- a/include/linux/kvm_host.h
+++ b/include/linux/kvm_host.h
@@ -765,6 +765,8 @@ int kvm_vm_ioctl_get_dirty_log(struct kvm *kvm,
765 765
766int kvm_vm_ioctl_irq_line(struct kvm *kvm, struct kvm_irq_level *irq_level, 766int kvm_vm_ioctl_irq_line(struct kvm *kvm, struct kvm_irq_level *irq_level,
767 bool line_status); 767 bool line_status);
768int kvm_vm_ioctl_enable_cap(struct kvm *kvm,
769 struct kvm_enable_cap *cap);
768long kvm_arch_vm_ioctl(struct file *filp, 770long kvm_arch_vm_ioctl(struct file *filp,
769 unsigned int ioctl, unsigned long arg); 771 unsigned int ioctl, unsigned long arg);
770 772
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