|
@@ -2324,6 +2324,34 @@ static int kvm_ioctl_create_device(struct kvm *kvm,
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
+static long kvm_vm_ioctl_check_extension_generic(struct kvm *kvm, long arg)
|
|
|
+{
|
|
|
+ switch (arg) {
|
|
|
+ case KVM_CAP_USER_MEMORY:
|
|
|
+ case KVM_CAP_DESTROY_MEMORY_REGION_WORKS:
|
|
|
+ case KVM_CAP_JOIN_MEMORY_REGIONS_WORKS:
|
|
|
+#ifdef CONFIG_KVM_APIC_ARCHITECTURE
|
|
|
+ case KVM_CAP_SET_BOOT_CPU_ID:
|
|
|
+#endif
|
|
|
+ case KVM_CAP_INTERNAL_ERROR_DATA:
|
|
|
+#ifdef CONFIG_HAVE_KVM_MSI
|
|
|
+ case KVM_CAP_SIGNAL_MSI:
|
|
|
+#endif
|
|
|
+#ifdef CONFIG_HAVE_KVM_IRQ_ROUTING
|
|
|
+ case KVM_CAP_IRQFD_RESAMPLE:
|
|
|
+#endif
|
|
|
+ case KVM_CAP_CHECK_EXTENSION_VM:
|
|
|
+ return 1;
|
|
|
+#ifdef CONFIG_HAVE_KVM_IRQ_ROUTING
|
|
|
+ case KVM_CAP_IRQ_ROUTING:
|
|
|
+ return KVM_MAX_IRQ_ROUTES;
|
|
|
+#endif
|
|
|
+ default:
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ return kvm_vm_ioctl_check_extension(kvm, arg);
|
|
|
+}
|
|
|
+
|
|
|
static long kvm_vm_ioctl(struct file *filp,
|
|
|
unsigned int ioctl, unsigned long arg)
|
|
|
{
|
|
@@ -2487,6 +2515,9 @@ static long kvm_vm_ioctl(struct file *filp,
|
|
|
r = 0;
|
|
|
break;
|
|
|
}
|
|
|
+ case KVM_CHECK_EXTENSION:
|
|
|
+ r = kvm_vm_ioctl_check_extension_generic(kvm, arg);
|
|
|
+ break;
|
|
|
default:
|
|
|
r = kvm_arch_vm_ioctl(filp, ioctl, arg);
|
|
|
if (r == -ENOTTY)
|
|
@@ -2571,33 +2602,6 @@ static int kvm_dev_ioctl_create_vm(unsigned long type)
|
|
|
return r;
|
|
|
}
|
|
|
|
|
|
-static long kvm_vm_ioctl_check_extension_generic(struct kvm *kvm, long arg)
|
|
|
-{
|
|
|
- switch (arg) {
|
|
|
- case KVM_CAP_USER_MEMORY:
|
|
|
- case KVM_CAP_DESTROY_MEMORY_REGION_WORKS:
|
|
|
- case KVM_CAP_JOIN_MEMORY_REGIONS_WORKS:
|
|
|
-#ifdef CONFIG_KVM_APIC_ARCHITECTURE
|
|
|
- case KVM_CAP_SET_BOOT_CPU_ID:
|
|
|
-#endif
|
|
|
- case KVM_CAP_INTERNAL_ERROR_DATA:
|
|
|
-#ifdef CONFIG_HAVE_KVM_MSI
|
|
|
- case KVM_CAP_SIGNAL_MSI:
|
|
|
-#endif
|
|
|
-#ifdef CONFIG_HAVE_KVM_IRQ_ROUTING
|
|
|
- case KVM_CAP_IRQFD_RESAMPLE:
|
|
|
-#endif
|
|
|
- return 1;
|
|
|
-#ifdef CONFIG_HAVE_KVM_IRQ_ROUTING
|
|
|
- case KVM_CAP_IRQ_ROUTING:
|
|
|
- return KVM_MAX_IRQ_ROUTES;
|
|
|
-#endif
|
|
|
- default:
|
|
|
- break;
|
|
|
- }
|
|
|
- return kvm_vm_ioctl_check_extension(kvm, arg);
|
|
|
-}
|
|
|
-
|
|
|
static long kvm_dev_ioctl(struct file *filp,
|
|
|
unsigned int ioctl, unsigned long arg)
|
|
|
{
|