]> git.proxmox.com Git - mirror_qemu.git/commitdiff
vl: Don't silently change topology when all -smp options were set
authorEduardo Habkost <ehabkost@redhat.com>
Fri, 19 Dec 2014 02:59:47 +0000 (00:59 -0200)
committerPaolo Bonzini <pbonzini@redhat.com>
Fri, 9 Jan 2015 22:41:12 +0000 (23:41 +0100)
QEMU tries to change the "threads" option even if it was explicitly set
in the command-line, and it shouldn't do that.

The right thing to do when all options (cpus, sockets, cores, threds)
are explicitly set is to sanity check them and abort in case they don't
make sense (i.e. when sockets*cores*threads < cpus).

Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
Reviewed-by: Andrew Jones <drjones@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
vl.c

diff --git a/vl.c b/vl.c
index 95451b6af809f64517d28434dfb8ee372c97702d..f6b24c4070376bc8d1fe14d8d5d3e140a2f035d8 100644 (file)
--- a/vl.c
+++ b/vl.c
@@ -1173,8 +1173,14 @@ static void smp_parse(QemuOpts *opts)
         } else if (cores == 0) {
             threads = threads > 0 ? threads : 1;
             cores = cpus / (sockets * threads);
-        } else {
+        } else if (threads == 0) {
             threads = cpus / (cores * sockets);
+        } else if (sockets * cores * threads < cpus) {
+            fprintf(stderr, "cpu topology: error: "
+                    "sockets (%u) * cores (%u) * threads (%u) < "
+                    "smp_cpus (%u)\n",
+                    sockets, cores, threads, cpus);
+            exit(1);
         }
 
         max_cpus = qemu_opt_get_number(opts, "maxcpus", 0);