qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH] kvm: warn if num cpus is greater than num recommended
@ 2013-08-22 15:39 Andrew Jones
  2013-08-22 16:12 ` Eduardo Habkost
  2013-08-22 16:38 ` Paolo Bonzini
  0 siblings, 2 replies; 8+ messages in thread
From: Andrew Jones @ 2013-08-22 15:39 UTC (permalink / raw)
  To: qemu-devel; +Cc: pbonzini, mtosatti, gleb, kvm, ehabkost

The comment in kvm_max_vcpus() states that it's using the recommended
procedure from the kernel API documentation to get the max number
of vcpus that kvm supports. It is, but by always returning the
maximum number supported. The maximum number should only be used
for development purposes. qemu should check KVM_CAP_NR_VCPUS for
the recommended number of vcpus. This patch adds a warning if a user
specifies a number of cpus between the recommended and max.

Signed-off-by: Andrew Jones <drjones@redhat.com>
---
 kvm-all.c | 45 +++++++++++++++++++++++++++------------------
 1 file changed, 27 insertions(+), 18 deletions(-)

diff --git a/kvm-all.c b/kvm-all.c
index 716860f617455..9092e13ae60ea 100644
--- a/kvm-all.c
+++ b/kvm-all.c
@@ -1313,24 +1313,24 @@ static int kvm_irqchip_create(KVMState *s)
     return 0;
 }
 
-static int kvm_max_vcpus(KVMState *s)
+/* Find number of supported CPUs using the recommended
+ * procedure from the kernel API documentation to cope with
+ * older kernels that may be missing capabilities.
+ */
+static int kvm_recommended_vcpus(KVMState *s)
 {
     int ret;
 
-    /* Find number of supported CPUs using the recommended
-     * procedure from the kernel API documentation to cope with
-     * older kernels that may be missing capabilities.
-     */
-    ret = kvm_check_extension(s, KVM_CAP_MAX_VCPUS);
-    if (ret) {
-        return ret;
-    }
     ret = kvm_check_extension(s, KVM_CAP_NR_VCPUS);
-    if (ret) {
-        return ret;
-    }
+    return (ret) ? ret : 4;
+}
 
-    return 4;
+static int kvm_max_vcpus(KVMState *s)
+{
+    int ret;
+
+    ret = kvm_check_extension(s, KVM_CAP_MAX_VCPUS);
+    return (ret) ? ret : kvm_recommended_vcpus(s);
 }
 
 int kvm_init(void)
@@ -1383,12 +1383,21 @@ int kvm_init(void)
         goto err;
     }
 
-    max_vcpus = kvm_max_vcpus(s);
+    max_vcpus = kvm_recommended_vcpus(s);
     if (smp_cpus > max_vcpus) {
-        ret = -EINVAL;
-        fprintf(stderr, "Number of SMP cpus requested (%d) exceeds max cpus "
-                "supported by KVM (%d)\n", smp_cpus, max_vcpus);
-        goto err;
+        fprintf(stderr,
+                "Warning: Number of SMP cpus requested (%d) exceeds "
+                "recommended cpus supported by KVM (%d)\n",
+                smp_cpus, max_vcpus);
+
+        max_vcpus = kvm_max_vcpus(s);
+        if (smp_cpus > max_vcpus) {
+            ret = -EINVAL;
+            fprintf(stderr, "Number of SMP cpus requested (%d) exceeds "
+                    "max cpus supported by KVM (%d)\n",
+                    smp_cpus, max_vcpus);
+            goto err;
+        }
     }
 
     s->vmfd = kvm_ioctl(s, KVM_CREATE_VM, 0);
-- 
1.8.1.4

^ permalink raw reply related	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2013-08-26  8:00 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-08-22 15:39 [Qemu-devel] [PATCH] kvm: warn if num cpus is greater than num recommended Andrew Jones
2013-08-22 16:12 ` Eduardo Habkost
2013-08-22 16:21   ` Andreas Färber
2013-08-23 11:33     ` Andrew Jones
2013-08-26  7:43       ` Paolo Bonzini
2013-08-26  8:00         ` Andrew Jones
2013-08-22 16:38 ` Paolo Bonzini
2013-08-23 11:35   ` Andrew Jones

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).