On Tue, Sep 04, 2018 at 03:22:35PM +0200, Igor Mammedov wrote: > -smp [cpus],sockets/cores/threads[,maxcpus] should describe topology > so that total number of logical CPUs [sockets * cores * threads] > would be equal to [maxcpus], however historically we didn't have > such check in QEMU and it is possible to start VM with an invalid > topology. > Deprecate invalid options combination so we can make sure that > the topology VM started with is always correct in the future. > Users with an invalid sockets/cores/threads/maxcpus values should > fix their CLI to make sure that > [sockets * cores * threads] == [maxcpus] > > Signed-off-by: Igor Mammedov <imamm...@redhat.com> > --- > v5: > - extend deprecation doc, adding that maxcpus should be multiple of > present on CLI [sockets/cores/threads] options > (Eduardo Habkost <ehabk...@redhat.com>) > v4: > - missed dot comment, fix it with s/./,/ (Andrew Jones <drjo...@redhat.com>) > v3: > - more spelling fixes (Andrew Jones <drjo...@redhat.com>) > - place deprecation check after (sockets * cores * threads > max_cpus) check > (Eduardo Habkost <ehabk...@redhat.com>) > v2: > - spelling&&co fixes (Andrew Jones <drjo...@redhat.com>) > --- > qemu-deprecated.texi | 19 +++++++++++++++++++ > vl.c | 7 +++++++ > 2 files changed, 26 insertions(+) > > diff --git a/qemu-deprecated.texi b/qemu-deprecated.texi > index 87212b6..827c3ce 100644 > --- a/qemu-deprecated.texi > +++ b/qemu-deprecated.texi > @@ -159,6 +159,25 @@ The 'file' driver for drives is no longer appropriate > for character or host > devices and will only accept regular files (S_IFREG). The correct driver > for these file types is 'host_cdrom' or 'host_device' as appropriate. > > +@subsection -smp X,[socket=a,core=b,thread=c],maxcpus=Y (since 3.1)
sockets,cores,threads -- they should all be plural > + > +CPU topology properties should describe whole machine topology including > +possible CPUs, but historically it was possible to start QEMU with > +an incorrect topology where > + sockets * cores * threads >= X && X < maxcpus > +which could lead to an incorrect topology enumeration by the guest. > +Support for invalid topologies will be removed, the user must ensure > +topologies described with -smp include all possible cpus, i.e. > + sockets * cores * threads == maxcpus > +Note: it's assumed that maxcpus value must be multiple of the topology > +options present on command line to avoid creating an invalid topology. > +If maxcpus isn't be multiple of present topology options then the condition > +(sockets * cores * threads == maxcpus) can't be satisfied and it will > +trigger deprecation warning which later will be converted to a error. > +If you get deprecation warning it's recommended to explicitly specify > +a correct topology to make warning go away and ensure that it will > +continue working in the future. > + > @section QEMU Machine Protocol (QMP) commands > > @subsection block-dirty-bitmap-add "autoload" parameter (since 2.12.0) > diff --git a/vl.c b/vl.c > index 5ba06ad..7fd700e 100644 > --- a/vl.c > +++ b/vl.c > @@ -1246,6 +1246,13 @@ static void smp_parse(QemuOpts *opts) > exit(1); > } > > + if (sockets * cores * threads != max_cpus) { > + warn_report("Invalid CPU topology deprecated: " > + "sockets (%u) * cores (%u) * threads (%u) " > + "!= maxcpus (%u)", > + sockets, cores, threads, max_cpus); > + } > + > smp_cpus = cpus; > smp_cores = cores; > smp_threads = threads; > -- > 2.7.4 > > Otherwise Reviewed-by: Andrew Jones <drjo...@redhat.com>