From: Laszlo Ersek <lersek@redhat.com>
To: Igor Mammedov <imammedo@redhat.com>, qemu-devel@nongnu.org
Cc: boris.ostrovsky@oracle.com
Subject: Re: [PATCH v4 1/6] x86: lpc9: let firmware negotiate 'CPU hotplug with SMI' features
Date: Tue, 25 Aug 2020 14:28:49 +0200 [thread overview]
Message-ID: <8aa82754-cf0c-ae54-300d-aaa8b6118c10@redhat.com> (raw)
In-Reply-To: <20200824110038.1365178-1-imammedo@redhat.com>
On 08/24/20 13:00, Igor Mammedov wrote:
> It will allow firmware to notify QEMU that firmware requires SMI
> being triggered on CPU hot[un]plug, so that it would be able to account
> for hotplugged CPU and relocate it to new SMM base and/or safely remove
> CPU on unplug.
>
> Using negotiated features, follow up patches will insert SMI upcall
> into AML code, to make sure that firmware processes hotplug before
> guest OS would attempt to use new CPU.
>
> Signed-off-by: Igor Mammedov <imammedo@redhat.com>
> Reviewed-by: Laszlo Ersek <lersek@redhat.com>
> ---
> v4:
> - fix 5.2 machine types so they won't apply pc_compat_5_1
> (Laszlo Ersek <lersek@redhat.com>)
> v3:
> - rebase on top of "[PATCH v2] hw: add compat machines for 5.2"
> so apply that before this patch
> v2:
> - rebase on top of 5.1 (move compat values to 5.1 machine)
> - make "x-smi-cpu-hotunplug" false by default (Laszlo Ersek <lersek@redhat.com>)
>
> fixup
> ---
> include/hw/i386/ich9.h | 2 ++
> hw/i386/pc.c | 4 +++-
> hw/isa/lpc_ich9.c | 13 +++++++++++++
> 3 files changed, 18 insertions(+), 1 deletion(-)
>
> diff --git a/include/hw/i386/ich9.h b/include/hw/i386/ich9.h
> index a98d10b252..d1bb3f7bf0 100644
> --- a/include/hw/i386/ich9.h
> +++ b/include/hw/i386/ich9.h
> @@ -247,5 +247,7 @@ typedef struct ICH9LPCState {
>
> /* bit positions used in fw_cfg SMI feature negotiation */
> #define ICH9_LPC_SMI_F_BROADCAST_BIT 0
> +#define ICH9_LPC_SMI_F_CPU_HOTPLUG_BIT 1
> +#define ICH9_LPC_SMI_F_CPU_HOT_UNPLUG_BIT 2
>
> #endif /* HW_ICH9_H */
> diff --git a/hw/i386/pc.c b/hw/i386/pc.c
> index 9aa813949c..583db11d28 100644
> --- a/hw/i386/pc.c
> +++ b/hw/i386/pc.c
> @@ -97,7 +97,9 @@
> #include "fw_cfg.h"
> #include "trace.h"
>
> -GlobalProperty pc_compat_5_1[] = {};
> +GlobalProperty pc_compat_5_1[] = {
> + { "ICH9-LPC", "x-smi-cpu-hotplug", "off" },
> +};
> const size_t pc_compat_5_1_len = G_N_ELEMENTS(pc_compat_5_1);
>
> GlobalProperty pc_compat_5_0[] = {
> diff --git a/hw/isa/lpc_ich9.c b/hw/isa/lpc_ich9.c
> index cd6e169d47..19f32bed3e 100644
> --- a/hw/isa/lpc_ich9.c
> +++ b/hw/isa/lpc_ich9.c
> @@ -373,6 +373,15 @@ static void smi_features_ok_callback(void *opaque)
> /* guest requests invalid features, leave @features_ok at zero */
> return;
> }
> + if (!(guest_features & BIT_ULL(ICH9_LPC_SMI_F_BROADCAST_BIT)) &&
> + guest_features & (BIT_ULL(ICH9_LPC_SMI_F_CPU_HOTPLUG_BIT) |
> + BIT_ULL(ICH9_LPC_SMI_F_CPU_HOT_UNPLUG_BIT))) {
> + /*
> + * cpu hot-[un]plug with SMI requires SMI broadcast,
> + * leave @features_ok at zero
> + */
> + return;
> + }
>
> /* valid feature subset requested, lock it down, report success */
> lpc->smi_negotiated_features = guest_features;
> @@ -747,6 +756,10 @@ static Property ich9_lpc_properties[] = {
> DEFINE_PROP_BOOL("noreboot", ICH9LPCState, pin_strap.spkr_hi, true),
> DEFINE_PROP_BIT64("x-smi-broadcast", ICH9LPCState, smi_host_features,
> ICH9_LPC_SMI_F_BROADCAST_BIT, true),
> + DEFINE_PROP_BIT64("x-smi-cpu-hotplug", ICH9LPCState, smi_host_features,
> + ICH9_LPC_SMI_F_CPU_HOTPLUG_BIT, true),
> + DEFINE_PROP_BIT64("x-smi-cpu-hotunplug", ICH9LPCState, smi_host_features,
> + ICH9_LPC_SMI_F_CPU_HOT_UNPLUG_BIT, false),
> DEFINE_PROP_END_OF_LIST(),
> };
>
>
This patch doesn't apply with git-am, as of commit 44423107e7b5 ("Merge
remote-tracking branch 'remotes/xtensa/tags/20200821-xtensa' into
staging", 2020-08-24).
The reason is that commit 2becc36a3e53 ("meson: infrastructure for
building emulators", 2020-08-21) introduced
#include CONFIG_DEVICES
to "hw/i386/pc.c", just above the (then) "pc_compat_5_0" array.
Then Cornelia's commit 3ff3c5d31740 ("hw: add compat machines for 5.2",
2020-08-19), which introduced "pc_compat_5_1" independently of the Meson
conversion, needed explicit resolution against CONFIG_DEVICES for
merging into master. That was covered in merge commit ca489cd037e4
("Merge remote-tracking branch
'remotes/ehabkost/tags/machine-next-pull-request' into staging",
2020-08-22).
So the patch applies on top of 3ff3c5d31740, but not on the merge
(ca489cd037e4) that brought 3ff3c5d31740 into master.
Not a problem though: I can apply the patch on 3ff3c5d31740, and then
cleanly (automatically) rebase to current HEAD (44423107e7b5) from
there. This is the range-diff across the rebase:
> 1: 9066fa4ccb49 ! 1: 05188fffe6aa x86: lpc9: let firmware negotiate 'CPU hotplug with SMI' features
> @@ -31,8 +31,8 @@
> --- a/hw/i386/pc.c
> +++ b/hw/i386/pc.c
> @@
> - #include "fw_cfg.h"
> #include "trace.h"
> + #include CONFIG_DEVICES
>
> -GlobalProperty pc_compat_5_1[] = {};
> +GlobalProperty pc_compat_5_1[] = {
So it's indeed just a context update.
Having applied this series to QEMU, my test results are:
OVMF has 5ba203b54e59 machine type plug gate unplug gate gating result
--------------------- ------------ --------- ----------- -------------
no pc-q35-5.1 reject reject pass
no pc-q35-5.2 reject reject pass
yes pc-q35-5.1 reject reject pass
yes pc-q35-5.2 accept reject pass
The results are the same after S3 suspend/resume. (This is relevant
because the features are re-negotiated during S3 resume.)
Thus, for this one patch, so far:
- (just to confirm:)
Reviewed-by: Laszlo Ersek <lersek@redhat.com>
- also:
Tested-by: Laszlo Ersek <lersek@redhat.com>
Thanks!
Laszlo
next prev parent reply other threads:[~2020-08-25 12:29 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-08-18 12:22 [PATCH v2 0/7] x86: fix cpu hotplug with secure boot Igor Mammedov
2020-08-18 12:22 ` [PATCH v2 1/7] x86: lpc9: let firmware negotiate 'CPU hotplug with SMI' features Igor Mammedov
2020-08-19 8:39 ` Laszlo Ersek
2020-08-19 8:51 ` Laszlo Ersek
2020-08-19 8:58 ` Cornelia Huck
2020-08-19 9:14 ` Laszlo Ersek
2020-08-19 12:37 ` Igor Mammedov
2020-08-20 14:56 ` [PATCH v3 " Igor Mammedov
2020-08-21 13:46 ` Laszlo Ersek
2020-08-24 11:00 ` [PATCH v4 1/6] " Igor Mammedov
2020-08-25 12:28 ` Laszlo Ersek [this message]
2020-08-18 12:22 ` [PATCH v2 2/7] x86: cphp: prevent guest crash on CPU hotplug when broadcast SMI is in use Igor Mammedov
2020-08-18 12:22 ` [PATCH v2 3/7] x86: cpuhp: refuse cpu hot-unplug request earlier if not supported Igor Mammedov
2020-08-25 12:50 ` Laszlo Ersek
2020-08-18 12:22 ` [PATCH v2 4/7] acpi: add aml_land() and aml_break() primitives Igor Mammedov
2020-08-18 13:03 ` Philippe Mathieu-Daudé
2020-08-25 13:01 ` Laszlo Ersek
2020-08-18 12:22 ` [PATCH v2 5/7] tests: acpi: mark to be changed tables in bios-tables-test-allowed-diff Igor Mammedov
2020-08-18 12:22 ` [PATCH v2 6/7] x68: acpi: trigger SMI before sending hotplug Notify event to OSPM Igor Mammedov
2020-08-25 17:25 ` Laszlo Ersek
2020-08-26 9:23 ` Igor Mammedov
2020-08-26 9:24 ` Laszlo Ersek
2020-08-26 11:55 ` Igor Mammedov
2020-08-26 15:12 ` Laszlo Ersek
2020-08-26 13:32 ` Laszlo Ersek
2020-08-26 13:32 ` Laszlo Ersek
2020-08-26 14:10 ` Igor Mammedov
2020-08-18 12:22 ` [PATCH v2 7/7] tests: acpi: update acpi blobs with new AML Igor Mammedov
2020-08-18 12:56 ` [PATCH v2 0/7] x86: fix cpu hotplug with secure boot no-reply
2020-08-18 13:01 ` Philippe Mathieu-Daudé
2020-08-18 13:39 ` no-reply
2020-08-18 14:07 ` Philippe Mathieu-Daudé
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=8aa82754-cf0c-ae54-300d-aaa8b6118c10@redhat.com \
--to=lersek@redhat.com \
--cc=boris.ostrovsky@oracle.com \
--cc=imammedo@redhat.com \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).