Hi Ard, can you please ACK this patch?
I'm not (necessarily) aiming at the upcoming stable tag, but Igor has resumed work on the QEMU-side patches [*], so this is again relevant for edk2. [*] http://mid.mail-archive.com/20200818122208.1243901-1-imammedo@redhat.com https://lists.gnu.org/archive/html/qemu-devel/2020-08/msg03892.html (Top-posting because I want to keep the full context intact for you.) Thanks! Laszlo On 07/14/20 20:43, Laszlo Ersek wrote: > The ICH9_LPC_SMI_F_BROADCAST and ICH9_LPC_SMI_F_CPU_HOTPLUG feature flags > cause QEMU to behave as follows: > > BROADCAST CPU_HOTPLUG use case / behavior > --------- ----------- ------------------------------------------------ > clear clear OVMF built without SMM_REQUIRE; or very old OVMF > (from before commit a316d7ac91d3 / 2017-02-07). > QEMU permits CPU hotplug operations, and does > not cause the OS to inject an SMI upon hotplug. > Firmware is not expected to be aware of hotplug > events. > > clear set Invalid feature set; QEMU rejects the feature > negotiation. > > set clear OVMF after a316d7ac91d3 / 2017-02-07, built with > SMM_REQUIRE, but no support for CPU hotplug. > QEMU gracefully refuses hotplug operations. > > set set OVMF after a316d7ac91d3 / 2017-02-07, built with > SMM_REQUIRE, and supporting CPU hotplug. QEMU > permits CPU hotplug operations, and causes the > OS to inject an SMI upon hotplug. Firmware is > expected to deal with hotplug events. > > Negotiate ICH9_LPC_SMI_F_CPU_HOTPLUG -- but only if SEV is disabled, as > OvmfPkg/CpuHotplugSmm can't deal with SEV yet. > > Cc: Ard Biesheuvel <ard.biesheu...@arm.com> > Cc: Boris Ostrovsky <boris.ostrov...@oracle.com> > Cc: Igor Mammedov <imamm...@redhat.com> > Cc: Jordan Justen <jordan.l.jus...@intel.com> > Cc: Liran Alon <liran.a...@oracle.com> > Cc: Philippe Mathieu-Daudé <phi...@redhat.com> > Signed-off-by: Laszlo Ersek <ler...@redhat.com> > --- > > Notes: > This is the OVMF counterpart to Igor's QEMU series: > > - [RFC 0/3] x86: fix cpu hotplug with secure boot > https://lists.gnu.org/archive/html/qemu-devel/2020-07/msg03746.html > message-id: <20200710161704.309824-1-imamm...@redhat.com> > > Repo: https://pagure.io/lersek/edk2.git > Branch: negotiate_cpuhp_with_smi_rhbz1849177 > > OvmfPkg/SmmControl2Dxe/SmmControl2Dxe.inf | 1 + > OvmfPkg/SmmControl2Dxe/SmiFeatures.c | 26 ++++++++++++++++++-- > 2 files changed, 25 insertions(+), 2 deletions(-) > > diff --git a/OvmfPkg/SmmControl2Dxe/SmmControl2Dxe.inf > b/OvmfPkg/SmmControl2Dxe/SmmControl2Dxe.inf > index 3abed141e644..b8fdea8deb84 100644 > --- a/OvmfPkg/SmmControl2Dxe/SmmControl2Dxe.inf > +++ b/OvmfPkg/SmmControl2Dxe/SmmControl2Dxe.inf > @@ -46,6 +46,7 @@ [LibraryClasses] > BaseLib > DebugLib > IoLib > + MemEncryptSevLib > MemoryAllocationLib > PcdLib > PciLib > diff --git a/OvmfPkg/SmmControl2Dxe/SmiFeatures.c > b/OvmfPkg/SmmControl2Dxe/SmiFeatures.c > index 6210b7515e3e..c9d875543205 100644 > --- a/OvmfPkg/SmmControl2Dxe/SmiFeatures.c > +++ b/OvmfPkg/SmmControl2Dxe/SmiFeatures.c > @@ -9,6 +9,7 @@ > > #include <Library/BaseLib.h> > #include <Library/DebugLib.h> > +#include <Library/MemEncryptSevLib.h> > #include <Library/MemoryAllocationLib.h> > #include <Library/PcdLib.h> > #include <Library/QemuFwCfgLib.h> > @@ -21,6 +22,12 @@ > // "etc/smi/supported-features" and "etc/smi/requested-features" fw_cfg > files. > // > #define ICH9_LPC_SMI_F_BROADCAST BIT0 > +// > +// The following bit value stands for "enable CPU hotplug, and inject an SMI > +// with control value ICH9_APM_CNT_CPU_HOTPLUG upon hotplug", in the > +// "etc/smi/supported-features" and "etc/smi/requested-features" fw_cfg > files. > +// > +#define ICH9_LPC_SMI_F_CPU_HOTPLUG BIT1 > > // > // Provides a scratch buffer (allocated in EfiReservedMemoryType type memory) > @@ -67,6 +74,7 @@ NegotiateSmiFeatures ( > UINTN SupportedFeaturesSize; > UINTN RequestedFeaturesSize; > UINTN FeaturesOkSize; > + UINT64 RequestedFeaturesMask; > > // > // Look up the fw_cfg files used for feature negotiation. The selector keys > @@ -104,9 +112,16 @@ NegotiateSmiFeatures ( > QemuFwCfgReadBytes (sizeof mSmiFeatures, &mSmiFeatures); > > // > - // We want broadcast SMI and nothing else. > + // We want broadcast SMI, SMI on CPU hotplug, and nothing else. > // > - mSmiFeatures &= ICH9_LPC_SMI_F_BROADCAST; > + RequestedFeaturesMask = ICH9_LPC_SMI_F_BROADCAST; > + if (!MemEncryptSevIsEnabled ()) { > + // > + // For now, we only support hotplug with SEV disabled. > + // > + RequestedFeaturesMask |= ICH9_LPC_SMI_F_CPU_HOTPLUG; > + } > + mSmiFeatures &= RequestedFeaturesMask; > QemuFwCfgSelectItem (mRequestedFeaturesItem); > QemuFwCfgWriteBytes (sizeof mSmiFeatures, &mSmiFeatures); > > @@ -144,6 +159,13 @@ NegotiateSmiFeatures ( > DEBUG ((DEBUG_INFO, "%a: using SMI broadcast\n", __FUNCTION__)); > } > > + if ((mSmiFeatures & ICH9_LPC_SMI_F_CPU_HOTPLUG) == 0) { > + DEBUG ((DEBUG_INFO, "%a: CPU hotplug not negotiated\n", __FUNCTION__)); > + } else { > + DEBUG ((DEBUG_INFO, "%a: CPU hotplug with SMI negotiated\n", > + __FUNCTION__)); > + } > + > // > // Negotiation successful (although we may not have gotten the optimal > // feature set). > -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#64536): https://edk2.groups.io/g/devel/message/64536 Mute This Topic: https://groups.io/mt/75505395/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-