qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [5960] Disable KVM support if the kernel modules have broke


From: Anthony Liguori
Subject: [Qemu-devel] [5960] Disable KVM support if the kernel modules have broken memory slot handling
Date: Tue, 09 Dec 2008 19:59:09 +0000

Revision: 5960
          http://svn.sv.gnu.org/viewvc/?view=rev&root=qemu&revision=5960
Author:   aliguori
Date:     2008-12-09 19:59:09 +0000 (Tue, 09 Dec 2008)

Log Message:
-----------
Disable KVM support if the kernel modules have broken memory slot handling

Prior to kvm-80, memory slot deletion was broken in the KVM kernel 
modules.  In kvm-81, a new capability is introduced to signify that this
problem has been fixed.

Since we rely on being able to delete memory slots, refuse to work with 
any kernel module that does not have this capability present.

Signed-off-by: Anthony Liguori <address@hidden>

Modified Paths:
--------------
    trunk/configure
    trunk/kvm-all.c

Modified: trunk/configure
===================================================================
--- trunk/configure     2008-12-08 18:12:40 UTC (rev 5959)
+++ trunk/configure     2008-12-09 19:59:09 UTC (rev 5960)
@@ -933,7 +933,8 @@
     KVM_API_VERSION < 12 || \
     KVM_API_VERSION > 12 || \
     !defined(KVM_CAP_USER_MEMORY) || \
-    !defined(KVM_CAP_SET_TSS_ADDR)
+    !defined(KVM_CAP_SET_TSS_ADDR) || \
+    !defined(KVM_CAP_DESTROY_MEMORY_REGION_WORKS)
 #error Invalid KVM version
 #endif
 int main(void) { return 0; }

Modified: trunk/kvm-all.c
===================================================================
--- trunk/kvm-all.c     2008-12-08 18:12:40 UTC (rev 5959)
+++ trunk/kvm-all.c     2008-12-09 19:59:09 UTC (rev 5960)
@@ -283,6 +283,21 @@
         goto err;
     }
 
+    /* There was a nasty bug in < kvm-80 that prevents memory slots from being
+     * destroyed properly.  Since we rely on this capability, refuse to work
+     * with any kernel without this capability. */
+    ret = kvm_ioctl(s, KVM_CHECK_EXTENSION,
+                    KVM_CAP_DESTROY_MEMORY_REGION_WORKS);
+    if (ret <= 0) {
+        if (ret == 0)
+            ret = -EINVAL;
+
+        fprintf(stderr,
+                "KVM kernel module broken (DESTROY_MEMORY_REGION)\n"
+                "Please upgrade to at least kvm-81.\n");
+        goto err;
+    }
+
     ret = kvm_arch_init(s, smp_cpus);
     if (ret < 0)
         goto err;






reply via email to

[Prev in Thread] Current Thread [Next in Thread]