mirror of https://github.com/acidanthera/audk.git
OvmfPkg/SmmControl2Dxe: negotiate CPU hot-unplug
Advertise OVMF support for CPU hot-unplug and negotiate it if QEMU requests the feature. Cc: Laszlo Ersek <lersek@redhat.com> Cc: Jordan Justen <jordan.l.justen@intel.com> Cc: Ard Biesheuvel <ard.biesheuvel@arm.com> Cc: Igor Mammedov <imammedo@redhat.com> Cc: Boris Ostrovsky <boris.ostrovsky@oracle.com> Cc: Aaron Young <aaron.young@oracle.com> Ref: https://bugzilla.tianocore.org/show_bug.cgi?id=3132 Signed-off-by: Ankur Arora <ankur.a.arora@oracle.com> Message-Id: <20210312062656.2477515-11-ankur.a.arora@oracle.com> [lersek@redhat.com: preserve the empty line between the ICH9_LPC_SMI_F_* group of macro definitions and the SCRATCH_BUFFER type definition] Reviewed-by: Laszlo Ersek <lersek@redhat.com>
This commit is contained in:
parent
f053288863
commit
f3bdfc4186
|
@ -28,6 +28,12 @@
|
||||||
// "etc/smi/supported-features" and "etc/smi/requested-features" fw_cfg files.
|
// "etc/smi/supported-features" and "etc/smi/requested-features" fw_cfg files.
|
||||||
//
|
//
|
||||||
#define ICH9_LPC_SMI_F_CPU_HOTPLUG BIT1
|
#define ICH9_LPC_SMI_F_CPU_HOTPLUG BIT1
|
||||||
|
//
|
||||||
|
// The following bit value stands for "enable CPU hot-unplug, and inject an SMI
|
||||||
|
// with control value ICH9_APM_CNT_CPU_HOTPLUG upon hot-unplug", in the
|
||||||
|
// "etc/smi/supported-features" and "etc/smi/requested-features" fw_cfg files.
|
||||||
|
//
|
||||||
|
#define ICH9_LPC_SMI_F_CPU_HOT_UNPLUG BIT2
|
||||||
|
|
||||||
//
|
//
|
||||||
// Provides a scratch buffer (allocated in EfiReservedMemoryType type memory)
|
// Provides a scratch buffer (allocated in EfiReservedMemoryType type memory)
|
||||||
|
@ -112,7 +118,8 @@ NegotiateSmiFeatures (
|
||||||
QemuFwCfgReadBytes (sizeof mSmiFeatures, &mSmiFeatures);
|
QemuFwCfgReadBytes (sizeof mSmiFeatures, &mSmiFeatures);
|
||||||
|
|
||||||
//
|
//
|
||||||
// We want broadcast SMI, SMI on CPU hotplug, and nothing else.
|
// We want broadcast SMI, SMI on CPU hotplug, SMI on CPU hot-unplug
|
||||||
|
// and nothing else.
|
||||||
//
|
//
|
||||||
RequestedFeaturesMask = ICH9_LPC_SMI_F_BROADCAST;
|
RequestedFeaturesMask = ICH9_LPC_SMI_F_BROADCAST;
|
||||||
if (!MemEncryptSevIsEnabled ()) {
|
if (!MemEncryptSevIsEnabled ()) {
|
||||||
|
@ -120,6 +127,7 @@ NegotiateSmiFeatures (
|
||||||
// For now, we only support hotplug with SEV disabled.
|
// For now, we only support hotplug with SEV disabled.
|
||||||
//
|
//
|
||||||
RequestedFeaturesMask |= ICH9_LPC_SMI_F_CPU_HOTPLUG;
|
RequestedFeaturesMask |= ICH9_LPC_SMI_F_CPU_HOTPLUG;
|
||||||
|
RequestedFeaturesMask |= ICH9_LPC_SMI_F_CPU_HOT_UNPLUG;
|
||||||
}
|
}
|
||||||
mSmiFeatures &= RequestedFeaturesMask;
|
mSmiFeatures &= RequestedFeaturesMask;
|
||||||
QemuFwCfgSelectItem (mRequestedFeaturesItem);
|
QemuFwCfgSelectItem (mRequestedFeaturesItem);
|
||||||
|
@ -166,6 +174,13 @@ NegotiateSmiFeatures (
|
||||||
__FUNCTION__));
|
__FUNCTION__));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ((mSmiFeatures & ICH9_LPC_SMI_F_CPU_HOT_UNPLUG) == 0) {
|
||||||
|
DEBUG ((DEBUG_INFO, "%a: CPU hot-unplug not negotiated\n", __FUNCTION__));
|
||||||
|
} else {
|
||||||
|
DEBUG ((DEBUG_INFO, "%a: CPU hot-unplug with SMI negotiated\n",
|
||||||
|
__FUNCTION__));
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Negotiation successful (although we may not have gotten the optimal
|
// Negotiation successful (although we may not have gotten the optimal
|
||||||
// feature set).
|
// feature set).
|
||||||
|
|
Loading…
Reference in New Issue