|
 |
2fc9c1 |
From a5efebddb858c739d4a67865a4f8d836ba989d30 Mon Sep 17 00:00:00 2001
|
|
 |
2fc9c1 |
From: Laszlo Ersek <lersek@redhat.com>
|
|
 |
2fc9c1 |
Date: Tue, 14 Jul 2020 20:43:05 +0200
|
|
 |
2fc9c1 |
Subject: [PATCH 1/5] OvmfPkg/SmmControl2Dxe: negotiate
|
|
 |
2fc9c1 |
ICH9_LPC_SMI_F_CPU_HOTPLUG
|
|
 |
2fc9c1 |
MIME-Version: 1.0
|
|
 |
2fc9c1 |
Content-Type: text/plain; charset=UTF-8
|
|
 |
2fc9c1 |
Content-Transfer-Encoding: 8bit
|
|
 |
2fc9c1 |
|
|
 |
2fc9c1 |
RH-Author: Laszlo Ersek (lersek)
|
|
 |
2fc9c1 |
RH-MergeRequest: 1: [RHEL-8.4.0] complete the "VCPU hotplug with SMI" OVMF feature
|
|
 |
2fc9c1 |
RH-Commit: [1/3] 33d820d43a1be2ece09044b0cf105275f3fcc9ce (lersek/edk2)
|
|
 |
2fc9c1 |
RH-Bugzilla: 1849177
|
|
 |
2fc9c1 |
|
|
 |
2fc9c1 |
The ICH9_LPC_SMI_F_BROADCAST and ICH9_LPC_SMI_F_CPU_HOTPLUG feature flags
|
|
 |
2fc9c1 |
cause QEMU to behave as follows:
|
|
 |
2fc9c1 |
|
|
 |
2fc9c1 |
BROADCAST CPU_HOTPLUG use case / behavior
|
|
 |
2fc9c1 |
--------- ----------- ------------------------------------------------
|
|
 |
2fc9c1 |
clear clear OVMF built without SMM_REQUIRE; or very old OVMF
|
|
 |
2fc9c1 |
(from before commit a316d7ac91d3 / 2017-02-07).
|
|
 |
2fc9c1 |
QEMU permits CPU hotplug operations, and does
|
|
 |
2fc9c1 |
not cause the OS to inject an SMI upon hotplug.
|
|
 |
2fc9c1 |
Firmware is not expected to be aware of hotplug
|
|
 |
2fc9c1 |
events.
|
|
 |
2fc9c1 |
|
|
 |
2fc9c1 |
clear set Invalid feature set; QEMU rejects the feature
|
|
 |
2fc9c1 |
negotiation.
|
|
 |
2fc9c1 |
|
|
 |
2fc9c1 |
set clear OVMF after a316d7ac91d3 / 2017-02-07, built with
|
|
 |
2fc9c1 |
SMM_REQUIRE, but no support for CPU hotplug.
|
|
 |
2fc9c1 |
QEMU gracefully refuses hotplug operations.
|
|
 |
2fc9c1 |
|
|
 |
2fc9c1 |
set set OVMF after a316d7ac91d3 / 2017-02-07, built with
|
|
 |
2fc9c1 |
SMM_REQUIRE, and supporting CPU hotplug. QEMU
|
|
 |
2fc9c1 |
permits CPU hotplug operations, and causes the
|
|
 |
2fc9c1 |
OS to inject an SMI upon hotplug. Firmware is
|
|
 |
2fc9c1 |
expected to deal with hotplug events.
|
|
 |
2fc9c1 |
|
|
 |
2fc9c1 |
Negotiate ICH9_LPC_SMI_F_CPU_HOTPLUG -- but only if SEV is disabled, as
|
|
 |
2fc9c1 |
OvmfPkg/CpuHotplugSmm can't deal with SEV yet.
|
|
 |
2fc9c1 |
|
|
 |
2fc9c1 |
Cc: Ard Biesheuvel <ard.biesheuvel@arm.com>
|
|
 |
2fc9c1 |
Cc: Boris Ostrovsky <boris.ostrovsky@oracle.com>
|
|
 |
2fc9c1 |
Cc: Igor Mammedov <imammedo@redhat.com>
|
|
 |
2fc9c1 |
Cc: Jordan Justen <jordan.l.justen@intel.com>
|
|
 |
2fc9c1 |
Cc: Liran Alon <liran.alon@oracle.com>
|
|
 |
2fc9c1 |
Cc: Philippe Mathieu-Daudé <philmd@redhat.com>
|
|
 |
2fc9c1 |
Signed-off-by: Laszlo Ersek <lersek@redhat.com>
|
|
 |
2fc9c1 |
Message-Id: <20200714184305.9814-1-lersek@redhat.com>
|
|
 |
2fc9c1 |
Acked-by: Ard Biesheuvel <ard.biesheuvel@arm.com>
|
|
 |
2fc9c1 |
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
|
|
 |
2fc9c1 |
(cherry picked from commit 5ba203b54e5953572e279e5505cd65e4cc360e34)
|
|
 |
2fc9c1 |
Signed-off-by: Laszlo Ersek <lersek@redhat.com>
|
|
 |
2fc9c1 |
---
|
|
 |
2fc9c1 |
OvmfPkg/SmmControl2Dxe/SmiFeatures.c | 26 +++++++++++++++++++++--
|
|
 |
2fc9c1 |
OvmfPkg/SmmControl2Dxe/SmmControl2Dxe.inf | 1 +
|
|
 |
2fc9c1 |
2 files changed, 25 insertions(+), 2 deletions(-)
|
|
 |
2fc9c1 |
|
|
 |
2fc9c1 |
diff --git a/OvmfPkg/SmmControl2Dxe/SmiFeatures.c b/OvmfPkg/SmmControl2Dxe/SmiFeatures.c
|
|
 |
2fc9c1 |
index 6210b7515e..c9d8755432 100644
|
|
 |
2fc9c1 |
--- a/OvmfPkg/SmmControl2Dxe/SmiFeatures.c
|
|
 |
2fc9c1 |
+++ b/OvmfPkg/SmmControl2Dxe/SmiFeatures.c
|
|
 |
2fc9c1 |
@@ -9,6 +9,7 @@
|
|
 |
2fc9c1 |
|
|
 |
2fc9c1 |
#include <Library/BaseLib.h>
|
|
 |
2fc9c1 |
#include <Library/DebugLib.h>
|
|
 |
2fc9c1 |
+#include <Library/MemEncryptSevLib.h>
|
|
 |
2fc9c1 |
#include <Library/MemoryAllocationLib.h>
|
|
 |
2fc9c1 |
#include <Library/PcdLib.h>
|
|
 |
2fc9c1 |
#include <Library/QemuFwCfgLib.h>
|
|
 |
2fc9c1 |
@@ -21,6 +22,12 @@
|
|
 |
2fc9c1 |
// "etc/smi/supported-features" and "etc/smi/requested-features" fw_cfg files.
|
|
 |
2fc9c1 |
//
|
|
 |
2fc9c1 |
#define ICH9_LPC_SMI_F_BROADCAST BIT0
|
|
 |
2fc9c1 |
+//
|
|
 |
2fc9c1 |
+// The following bit value stands for "enable CPU hotplug, and inject an SMI
|
|
 |
2fc9c1 |
+// with control value ICH9_APM_CNT_CPU_HOTPLUG upon hotplug", in the
|
|
 |
2fc9c1 |
+// "etc/smi/supported-features" and "etc/smi/requested-features" fw_cfg files.
|
|
 |
2fc9c1 |
+//
|
|
 |
2fc9c1 |
+#define ICH9_LPC_SMI_F_CPU_HOTPLUG BIT1
|
|
 |
2fc9c1 |
|
|
 |
2fc9c1 |
//
|
|
 |
2fc9c1 |
// Provides a scratch buffer (allocated in EfiReservedMemoryType type memory)
|
|
 |
2fc9c1 |
@@ -67,6 +74,7 @@ NegotiateSmiFeatures (
|
|
 |
2fc9c1 |
UINTN SupportedFeaturesSize;
|
|
 |
2fc9c1 |
UINTN RequestedFeaturesSize;
|
|
 |
2fc9c1 |
UINTN FeaturesOkSize;
|
|
 |
2fc9c1 |
+ UINT64 RequestedFeaturesMask;
|
|
 |
2fc9c1 |
|
|
 |
2fc9c1 |
//
|
|
 |
2fc9c1 |
// Look up the fw_cfg files used for feature negotiation. The selector keys
|
|
 |
2fc9c1 |
@@ -104,9 +112,16 @@ NegotiateSmiFeatures (
|
|
 |
2fc9c1 |
QemuFwCfgReadBytes (sizeof mSmiFeatures, &mSmiFeatures);
|
|
 |
2fc9c1 |
|
|
 |
2fc9c1 |
//
|
|
 |
2fc9c1 |
- // We want broadcast SMI and nothing else.
|
|
 |
2fc9c1 |
+ // We want broadcast SMI, SMI on CPU hotplug, and nothing else.
|
|
 |
2fc9c1 |
//
|
|
 |
2fc9c1 |
- mSmiFeatures &= ICH9_LPC_SMI_F_BROADCAST;
|
|
 |
2fc9c1 |
+ RequestedFeaturesMask = ICH9_LPC_SMI_F_BROADCAST;
|
|
 |
2fc9c1 |
+ if (!MemEncryptSevIsEnabled ()) {
|
|
 |
2fc9c1 |
+ //
|
|
 |
2fc9c1 |
+ // For now, we only support hotplug with SEV disabled.
|
|
 |
2fc9c1 |
+ //
|
|
 |
2fc9c1 |
+ RequestedFeaturesMask |= ICH9_LPC_SMI_F_CPU_HOTPLUG;
|
|
 |
2fc9c1 |
+ }
|
|
 |
2fc9c1 |
+ mSmiFeatures &= RequestedFeaturesMask;
|
|
 |
2fc9c1 |
QemuFwCfgSelectItem (mRequestedFeaturesItem);
|
|
 |
2fc9c1 |
QemuFwCfgWriteBytes (sizeof mSmiFeatures, &mSmiFeatures);
|
|
 |
2fc9c1 |
|
|
 |
2fc9c1 |
@@ -144,6 +159,13 @@ NegotiateSmiFeatures (
|
|
 |
2fc9c1 |
DEBUG ((DEBUG_INFO, "%a: using SMI broadcast\n", __FUNCTION__));
|
|
 |
2fc9c1 |
}
|
|
 |
2fc9c1 |
|
|
 |
2fc9c1 |
+ if ((mSmiFeatures & ICH9_LPC_SMI_F_CPU_HOTPLUG) == 0) {
|
|
 |
2fc9c1 |
+ DEBUG ((DEBUG_INFO, "%a: CPU hotplug not negotiated\n", __FUNCTION__));
|
|
 |
2fc9c1 |
+ } else {
|
|
 |
2fc9c1 |
+ DEBUG ((DEBUG_INFO, "%a: CPU hotplug with SMI negotiated\n",
|
|
 |
2fc9c1 |
+ __FUNCTION__));
|
|
 |
2fc9c1 |
+ }
|
|
 |
2fc9c1 |
+
|
|
 |
2fc9c1 |
//
|
|
 |
2fc9c1 |
// Negotiation successful (although we may not have gotten the optimal
|
|
 |
2fc9c1 |
// feature set).
|
|
 |
2fc9c1 |
diff --git a/OvmfPkg/SmmControl2Dxe/SmmControl2Dxe.inf b/OvmfPkg/SmmControl2Dxe/SmmControl2Dxe.inf
|
|
 |
2fc9c1 |
index 3abed141e6..b8fdea8deb 100644
|
|
 |
2fc9c1 |
--- a/OvmfPkg/SmmControl2Dxe/SmmControl2Dxe.inf
|
|
 |
2fc9c1 |
+++ b/OvmfPkg/SmmControl2Dxe/SmmControl2Dxe.inf
|
|
 |
2fc9c1 |
@@ -46,6 +46,7 @@
|
|
 |
2fc9c1 |
BaseLib
|
|
 |
2fc9c1 |
DebugLib
|
|
 |
2fc9c1 |
IoLib
|
|
 |
2fc9c1 |
+ MemEncryptSevLib
|
|
 |
2fc9c1 |
MemoryAllocationLib
|
|
 |
2fc9c1 |
PcdLib
|
|
 |
2fc9c1 |
PciLib
|
|
 |
2fc9c1 |
--
|
|
 |
2fc9c1 |
2.27.0
|
|
 |
2fc9c1 |
|