On 23/08/2018 16:51, Igor Mammedov wrote: > Topology (threads*cores*sockets) must match maxcpus to be valid, > otherwise we could start QEMU with invalid topology that throws > a error on migration destination side, that should not be reachable: > Source: > -smp 8,maxcpus=64,cores=1,threads=8,sockets=1 > // hotplug cpus upto maxcpus > Destination: > -smp 64,maxcpus=64,cores=1,threads=8,sockets=1 > qemu: cpu topology: sockets (1) * cores (1) * threads (8) < smp_cpus (64)
The destination should have sockets=8, shouldn't it? It seems to me that, at startup, you should have cpus = s*t*c and cpus <= maxcpus. Currently we check cpus <= s*t*c <= maxcpus, which doesn't make much sense. Paolo > Signed-off-by: Igor Mammedov <imamm...@redhat.com> > --- > vl.c | 6 +++--- > 1 file changed, 3 insertions(+), 3 deletions(-) > > diff --git a/vl.c b/vl.c > index 16b913f..2b35e0c 100644 > --- a/vl.c > +++ b/vl.c > @@ -1238,10 +1238,10 @@ static void smp_parse(QemuOpts *opts) > exit(1); > } > > - if (sockets * cores * threads > max_cpus) { > + if (sockets * cores * threads != max_cpus) { > error_report("cpu topology: " > - "sockets (%u) * cores (%u) * threads (%u) > " > - "maxcpus (%u)", > + "sockets (%u) * cores (%u) * threads (%u) not equal > to" > + " maxcpus (%u)", > sockets, cores, threads, max_cpus); > exit(1); > } >