Message ID | 20200923094650.1301166-1-imammedo@redhat.com |
---|---|
Headers | show |
Series | x86: fix cpu hotplug with secure boot | expand |
On Wed, 23 Sep 2020 05:46:50 -0400 Igor Mammedov <imammedo@redhat.com> wrote: > it's was deprecated since 3.1 > > Support for invalid topologies is removed, the user must ensure > that topologies described with -smp include all possible cpus, > i.e. (sockets * cores * threads) == maxcpus or QEMU will > exit with error. ignore this stowaway, it's not part of the series > Signed-off-by: Igor Mammedov <imammedo@redhat.com> > --- > docs/system/deprecated.rst | 26 +++++++++++++------------- > hw/core/machine.c | 16 ++++------------ > hw/i386/pc.c | 16 ++++------------ > 3 files changed, 21 insertions(+), 37 deletions(-) > > diff --git a/docs/system/deprecated.rst b/docs/system/deprecated.rst > index 808c334fe7..fb95d2ecc4 100644 > --- a/docs/system/deprecated.rst > +++ b/docs/system/deprecated.rst > @@ -47,19 +47,6 @@ 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. > > -``-smp`` (invalid topologies) (since 3.1) > -''''''''''''''''''''''''''''''''''''''''' > - > -CPU topology properties should describe whole machine topology including > -possible CPUs. > - > -However, historically it was possible to start QEMU with an incorrect topology > -where *n* <= *sockets* * *cores* * *threads* < *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*. > - > ``-vnc acl`` (since 4.0.0) > '''''''''''''''''''''''''' > > @@ -642,6 +629,19 @@ New machine versions (since 5.1) will not accept the option but it will still > work with old machine types. User can check the QAPI schema to see if the legacy > option is supported by looking at MachineInfo::numa-mem-supported property. > > +``-smp`` (invalid topologies) (removed 5.2) > +''''''''''''''''''''''''''''''''''''''''''' > + > +CPU topology properties should describe whole machine topology including > +possible CPUs. > + > +However, historically it was possible to start QEMU with an incorrect topology > +where *n* <= *sockets* * *cores* * *threads* < *maxcpus*, > +which could lead to an incorrect topology enumeration by the guest. > +Support for invalid topologies is removed, the user must ensure > +topologies described with -smp include all possible cpus, i.e. > +*sockets* * *cores* * *threads* = *maxcpus*. > + > Block devices > ------------- > > diff --git a/hw/core/machine.c b/hw/core/machine.c > index ea26d61237..09aee4ea52 100644 > --- a/hw/core/machine.c > +++ b/hw/core/machine.c > @@ -754,23 +754,15 @@ static void smp_parse(MachineState *ms, QemuOpts *opts) > exit(1); > } > > - if (sockets * cores * threads > ms->smp.max_cpus) { > - error_report("cpu topology: " > - "sockets (%u) * cores (%u) * threads (%u) > " > - "maxcpus (%u)", > + if (sockets * cores * threads != ms->smp.max_cpus) { > + error_report("Invalid CPU topology: " > + "sockets (%u) * cores (%u) * threads (%u) " > + "!= maxcpus (%u)", > sockets, cores, threads, > ms->smp.max_cpus); > exit(1); > } > > - if (sockets * cores * threads != ms->smp.max_cpus) { > - warn_report("Invalid CPU topology deprecated: " > - "sockets (%u) * cores (%u) * threads (%u) " > - "!= maxcpus (%u)", > - sockets, cores, threads, > - ms->smp.max_cpus); > - } > - > ms->smp.cpus = cpus; > ms->smp.cores = cores; > ms->smp.threads = threads; > diff --git a/hw/i386/pc.c b/hw/i386/pc.c > index 2af660c55e..53e21a186d 100644 > --- a/hw/i386/pc.c > +++ b/hw/i386/pc.c > @@ -748,23 +748,15 @@ void pc_smp_parse(MachineState *ms, QemuOpts *opts) > exit(1); > } > > - if (sockets * dies * cores * threads > ms->smp.max_cpus) { > - error_report("cpu topology: " > - "sockets (%u) * dies (%u) * cores (%u) * threads (%u) > " > - "maxcpus (%u)", > + if (sockets * dies * cores * threads != ms->smp.max_cpus) { > + error_report("Invalid CPU topology deprecated: " > + "sockets (%u) * dies (%u) * cores (%u) * threads (%u) " > + "!= maxcpus (%u)", > sockets, dies, cores, threads, > ms->smp.max_cpus); > exit(1); > } > > - if (sockets * dies * cores * threads != ms->smp.max_cpus) { > - warn_report("Invalid CPU topology deprecated: " > - "sockets (%u) * dies (%u) * cores (%u) * threads (%u) " > - "!= maxcpus (%u)", > - sockets, dies, cores, threads, > - ms->smp.max_cpus); > - } > - > ms->smp.cpus = cpus; > ms->smp.cores = cores; > ms->smp.threads = threads;
On 09/23/20 11:46, Igor Mammedov wrote: > v6: > - [9/10] Add comment explaining why while_ctx2 restarts from the last processed CPU. > - rebase on top of current master, due to non trivial conflict > caused by microvm series, which moved/renamed pc_cpu_pre_plug() So, I went back to my local branch where I had applied your v5, *plus* the comment fixup ("[PATCH v5 9/10] fixup! x68: acpi: trigger SMI before sending hotplug Notify event to OSPM") on top. I rebased that branch to its *same* base commit, only squashing the comment fixup into patch#9. Then I applied your v6 series on top of current master, using a different (new) local branch. Then I ran git-range-diff on these two local branches. In patches 6, 7, 8, and 9, you've picked up my feedback tags from the v5 review session; that's good, there was nothing else to do. There is a trivial difference in patch 2 -- trivial to review, that is; I'm not saying that it's so trivial that git-rebase should have coped with it automatically on your end. Here's the git-range-diff output: > 2: e606a75432a8 ! 2: 94702d2e3125 x86: cpuhp: prevent guest crash on CPU hotplug when broadcast SMI is in use > @@ -12,7 +12,7 @@ > Signed-off-by: Igor Mammedov <imammedo@redhat.com> > Reviewed-by: Laszlo Ersek <lersek@redhat.com> > Tested-by: Laszlo Ersek <lersek@redhat.com> > - Message-Id: <20200907112348.530921-3-imammedo@redhat.com> > + Message-Id: <20200923094650.1301166-3-imammedo@redhat.com> > > diff --git a/hw/acpi/ich9.c b/hw/acpi/ich9.c > --- a/hw/acpi/ich9.c > @@ -40,17 +40,17 @@ > > void ich9_pm_device_plug_cb(HotplugHandler *hotplug_dev, DeviceState *dev, > > -diff --git a/hw/i386/pc.c b/hw/i386/pc.c > ---- a/hw/i386/pc.c > -+++ b/hw/i386/pc.c > +diff --git a/hw/i386/x86.c b/hw/i386/x86.c > +--- a/hw/i386/x86.c > ++++ b/hw/i386/x86.c > @@ > return; > } > > -+ if (pcms->acpi_dev) { > ++ if (x86ms->acpi_dev) { > + Error *local_err = NULL; > + > -+ hotplug_handler_pre_plug(HOTPLUG_HANDLER(pcms->acpi_dev), dev, > ++ hotplug_handler_pre_plug(HOTPLUG_HANDLER(x86ms->acpi_dev), dev, > + &local_err); > + if (local_err) { > + error_propagate(errp, local_err); Meaning that, in v6, you had to refer to "x86ms", rather than to "pcms", and that the code had to be introduced in a different file / function. The need for that originates from 0cca1a918b85 ("x86: move cpu hotplug from pc to x86", 2020-09-17). It looks innocent enough, but I should still retest patch#2. I'll report back under that patch in this series. Thanks Laszlo
On Wed, 23 Sep 2020 18:44:50 +0200 Laszlo Ersek <lersek@redhat.com> wrote: > On 09/23/20 11:46, Igor Mammedov wrote: > > v6: > > - [9/10] Add comment explaining why while_ctx2 restarts from the last processed CPU. > > - rebase on top of current master, due to non trivial conflict > > caused by microvm series, which moved/renamed pc_cpu_pre_plug() > > So, I went back to my local branch where I had applied your v5, *plus* > the comment fixup ("[PATCH v5 9/10] fixup! x68: acpi: trigger SMI before > sending hotplug Notify event to OSPM") on top. I rebased that branch to > its *same* base commit, only squashing the comment fixup into patch#9. > > Then I applied your v6 series on top of current master, using a > different (new) local branch. > > Then I ran git-range-diff on these two local branches. > > In patches 6, 7, 8, and 9, you've picked up my feedback tags from the v5 > review session; that's good, there was nothing else to do. > > There is a trivial difference in patch 2 -- trivial to review, that is; > I'm not saying that it's so trivial that git-rebase should have coped > with it automatically on your end. Here's the git-range-diff output: > > > 2: e606a75432a8 ! 2: 94702d2e3125 x86: cpuhp: prevent guest crash on CPU hotplug when broadcast SMI is in use > > @@ -12,7 +12,7 @@ > > Signed-off-by: Igor Mammedov <imammedo@redhat.com> > > Reviewed-by: Laszlo Ersek <lersek@redhat.com> > > Tested-by: Laszlo Ersek <lersek@redhat.com> > > - Message-Id: <20200907112348.530921-3-imammedo@redhat.com> > > + Message-Id: <20200923094650.1301166-3-imammedo@redhat.com> > > > > diff --git a/hw/acpi/ich9.c b/hw/acpi/ich9.c > > --- a/hw/acpi/ich9.c > > @@ -40,17 +40,17 @@ > > > > void ich9_pm_device_plug_cb(HotplugHandler *hotplug_dev, DeviceState *dev, > > > > -diff --git a/hw/i386/pc.c b/hw/i386/pc.c > > ---- a/hw/i386/pc.c > > -+++ b/hw/i386/pc.c > > +diff --git a/hw/i386/x86.c b/hw/i386/x86.c > > +--- a/hw/i386/x86.c > > ++++ b/hw/i386/x86.c > > @@ > > return; > > } > > > > -+ if (pcms->acpi_dev) { > > ++ if (x86ms->acpi_dev) { > > + Error *local_err = NULL; > > + > > -+ hotplug_handler_pre_plug(HOTPLUG_HANDLER(pcms->acpi_dev), dev, > > ++ hotplug_handler_pre_plug(HOTPLUG_HANDLER(x86ms->acpi_dev), dev, > > + &local_err); > > + if (local_err) { > > + error_propagate(errp, local_err); > > Meaning that, in v6, you had to refer to "x86ms", rather than to "pcms", > and that the code had to be introduced in a different file / function. > > The need for that originates from 0cca1a918b85 ("x86: move cpu hotplug > from pc to x86", 2020-09-17). I should have added this commit to change log to spare you trouble figuring out what exactly has changed. > > It looks innocent enough, but I should still retest patch#2. I'll report > back under that patch in this series. > > Thanks > Laszlo