aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEduardo Habkost <ehabkost@redhat.com>2014-12-19 00:59:47 -0200
committerPaolo Bonzini <pbonzini@redhat.com>2015-01-09 23:41:12 +0100
commitec2cbbdd80463efd4bc81a9d1362a2acb3097a21 (patch)
tree488383d84f01135bce6e472d88bb729f856942d6
parentc00cd99527d0d1b47a387239a7e3a8cf8ff82764 (diff)
vl: Don't silently change topology when all -smp options were set
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>
-rw-r--r--vl.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/vl.c b/vl.c
index 95451b6af8..f6b24c4070 100644
--- 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);