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>
This commit is contained in:
Eduardo Habkost 2014-12-19 00:59:47 -02:00 committed by Paolo Bonzini
parent c00cd99527
commit ec2cbbdd80

8
vl.c
View file

@ -1173,8 +1173,14 @@ static void smp_parse(QemuOpts *opts)
} else if (cores == 0) { } else if (cores == 0) {
threads = threads > 0 ? threads : 1; threads = threads > 0 ? threads : 1;
cores = cpus / (sockets * threads); cores = cpus / (sockets * threads);
} else { } else if (threads == 0) {
threads = cpus / (cores * sockets); 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); max_cpus = qemu_opt_get_number(opts, "maxcpus", 0);