* [PATCH 0/4] Revert the series of the patches which put APs in
@ 2023-01-09 3:37 Yuanhao Xie
2023-01-09 3:37 ` [PATCH 1/4] Revert "UefiCpuPkg: Has APs in 64 bit long-mode before booting to OS." Yuanhao Xie
` (4 more replies)
0 siblings, 5 replies; 8+ messages in thread
From: Yuanhao Xie @ 2023-01-09 3:37 UTC (permalink / raw)
To: devel
This series of original patches requiring revert, redo and further cleanup.
4GB limitation of memory allocation will be kept for the case APs
still need to be transferred to 32-bit mode before handoff to the OS.
Stack offset for AsmRelocateApLoopStart in 32-bit mode needs to be
fixed up, as it is calculated taking into account the removed parameters.
The allocation size of the stack should be updated as the variant of
APs loop function is introduced.
Keep the logic that removes the XP attribute.
Since the commit 73ccde8f6d04 introduced CpuPageTableLib dependency which
resolved for OvmfPkg and UefiPayloadPkg, it follows the revert order shown
as below instead of the reverse order of original commits to ensure the tree
buildable at every stage of the revert:
73ccde8f6d04 UefiCpuPkg: Has APs in 64 bit long-mode before booting to OS.
3f378450dfaf UefiPayloadPkg: Add CpuPageTableLib required by MpInitLib.
4a8642422460 OvmfPkg: Add CpuPageTableLib required by MpInitLib.
7bda8c648192 UefiCpuPkg: Duplicated AsmRelocateApLoop as AsmRelocateApLoopAmd
Yuanhao Xie (4):
Revert "UefiCpuPkg: Has APs in 64 bit long-mode before booting to OS."
Revert "UefiPayloadPkg: Add CpuPageTableLib required by MpInitLib."
Revert "OvmfPkg: Add CpuPageTableLib required by MpInitLib."
Revert "UefiCpuPkg: Duplicated AsmRelocateApLoop as
AsmRelocateApLoopAmd"
OvmfPkg/AmdSev/AmdSevX64.dsc | 3 +-
OvmfPkg/CloudHv/CloudHvX64.dsc | 1 -
OvmfPkg/IntelTdx/IntelTdxX64.dsc | 4 +-
OvmfPkg/Microvm/MicrovmX64.dsc | 3 +-
OvmfPkg/OvmfPkgIa32X64.dsc | 1 -
OvmfPkg/OvmfPkgX64.dsc | 2 -
OvmfPkg/OvmfXen.dsc | 3 +-
UefiCpuPkg/Library/MpInitLib/DxeMpInitLib.inf | 7 +-
UefiCpuPkg/Library/MpInitLib/DxeMpLib.c | 128 +++++++------
.../Library/MpInitLib/Ia32/CreatePageTable.c | 27 ---
UefiCpuPkg/Library/MpInitLib/MpEqu.inc | 2 -
UefiCpuPkg/Library/MpInitLib/MpLib.h | 46 +----
UefiCpuPkg/Library/MpInitLib/X64/AmdSev.nasm | 169 -----------------
.../Library/MpInitLib/X64/CreatePageTable.c | 75 --------
UefiCpuPkg/Library/MpInitLib/X64/MpFuncs.nasm | 176 ++++++++++++++----
UefiCpuPkg/UefiCpuPkg.dsc | 1 -
UefiPayloadPkg/UefiPayloadPkg.dsc | 1 -
17 files changed, 220 insertions(+), 429 deletions(-)
delete mode 100644 UefiCpuPkg/Library/MpInitLib/Ia32/CreatePageTable.c
delete mode 100644 UefiCpuPkg/Library/MpInitLib/X64/CreatePageTable.c
--
2.36.1.windows.1
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 1/4] Revert "UefiCpuPkg: Has APs in 64 bit long-mode before booting to OS."
2023-01-09 3:37 [PATCH 0/4] Revert the series of the patches which put APs in Yuanhao Xie
@ 2023-01-09 3:37 ` Yuanhao Xie
2023-01-09 3:37 ` [PATCH 2/4] Revert "UefiPayloadPkg: Add CpuPageTableLib required by MpInitLib." Yuanhao Xie
` (3 subsequent siblings)
4 siblings, 0 replies; 8+ messages in thread
From: Yuanhao Xie @ 2023-01-09 3:37 UTC (permalink / raw)
To: devel; +Cc: Eric Dong, Ray Ni, Rahul Kumar, Gerd Hoffmann
This reverts commit 73ccde8f6d04a246377cabaed2875e69d4b6b719 since it
results in a hang of the IA32 processor and needs further clean-up.
Ref: https://bugzilla.tianocore.org/show_bug.cgi?id=4234
Cc: Eric Dong <eric.dong@intel.com>
Cc: Ray Ni <ray.ni@intel.com>
Cc: Rahul Kumar <rahul1.kumar@intel.com>
Cc: Gerd Hoffmann <kraxel@redhat.com>
Signed-off-by: Yuanhao Xie <yuanhao.xie@intel.com>
---
UefiCpuPkg/Library/MpInitLib/DxeMpInitLib.inf | 7 +-
UefiCpuPkg/Library/MpInitLib/DxeMpLib.c | 84 +++++----
.../Library/MpInitLib/Ia32/CreatePageTable.c | 27 ---
UefiCpuPkg/Library/MpInitLib/MpLib.h | 19 +-
.../Library/MpInitLib/X64/CreatePageTable.c | 75 --------
UefiCpuPkg/Library/MpInitLib/X64/MpFuncs.nasm | 171 +++++++++++++++---
UefiCpuPkg/UefiCpuPkg.dsc | 1 -
7 files changed, 200 insertions(+), 184 deletions(-)
delete mode 100644 UefiCpuPkg/Library/MpInitLib/Ia32/CreatePageTable.c
delete mode 100644 UefiCpuPkg/Library/MpInitLib/X64/CreatePageTable.c
diff --git a/UefiCpuPkg/Library/MpInitLib/DxeMpInitLib.inf b/UefiCpuPkg/Library/MpInitLib/DxeMpInitLib.inf
index 8c8b81d933..cd07de3a3c 100644
--- a/UefiCpuPkg/Library/MpInitLib/DxeMpInitLib.inf
+++ b/UefiCpuPkg/Library/MpInitLib/DxeMpInitLib.inf
@@ -1,7 +1,7 @@
## @file
# MP Initialize Library instance for DXE driver.
#
-# Copyright (c) 2016 - 2022, Intel Corporation. All rights reserved.<BR>
+# Copyright (c) 2016 - 2021, Intel Corporation. All rights reserved.<BR>
# SPDX-License-Identifier: BSD-2-Clause-Patent
#
##
@@ -24,11 +24,9 @@
[Sources.IA32]
Ia32/AmdSev.c
Ia32/MpFuncs.nasm
- Ia32/CreatePageTable.c
[Sources.X64]
X64/AmdSev.c
- X64/CreatePageTable.c
X64/MpFuncs.nasm
[Sources.common]
@@ -59,9 +57,6 @@
CcExitLib
MicrocodeLib
-[LibraryClasses.X64]
- CpuPageTableLib
-
[Protocols]
gEfiTimerArchProtocolGuid ## SOMETIMES_CONSUMES
diff --git a/UefiCpuPkg/Library/MpInitLib/DxeMpLib.c b/UefiCpuPkg/Library/MpInitLib/DxeMpLib.c
index beab06a5b1..445e0853d2 100644
--- a/UefiCpuPkg/Library/MpInitLib/DxeMpLib.c
+++ b/UefiCpuPkg/Library/MpInitLib/DxeMpLib.c
@@ -28,7 +28,6 @@ volatile BOOLEAN mStopCheckAllApsStatus = TRUE;
VOID *mReservedApLoopFunc = NULL;
UINTN mReservedTopOfApStack;
volatile UINT32 mNumberToFinish = 0;
-UINTN mApPageTable;
//
// Begin wakeup buffer allocation below 0x88000
@@ -408,9 +407,12 @@ RelocateApLoop (
AsmRelocateApLoopFunc (
MwaitSupport,
CpuMpData->ApTargetCState,
+ CpuMpData->PmCodeSegment,
StackStart - ProcessorNumber * AP_SAFE_STACK_SIZE,
(UINTN)&mNumberToFinish,
- mApPageTable
+ CpuMpData->Pm16CodeSegment,
+ CpuMpData->SevEsAPBuffer,
+ CpuMpData->WakeupBuffer
);
}
@@ -475,6 +477,7 @@ InitMpGlobalData (
)
{
EFI_STATUS Status;
+ EFI_PHYSICAL_ADDRESS Address;
UINTN ApSafeBufferSize;
UINTN Index;
EFI_GCD_MEMORY_SPACE_DESCRIPTOR MemDesc;
@@ -542,45 +545,60 @@ InitMpGlobalData (
// Allocating it in advance since memory services are not available in
// Exit Boot Services callback function.
//
- // +------------+
- // | Ap Loop |
- // +------------+
- // | Stack * N |
- // +------------+ (low address)
- //
ApSafeBufferSize = EFI_PAGES_TO_SIZE (
EFI_SIZE_TO_PAGES (
- CpuMpData->CpuCount * AP_SAFE_STACK_SIZE
- + CpuMpData->AddressMap.RelocateApLoopFuncSize
+ CpuMpData->AddressMap.RelocateApLoopFuncSize
)
);
+ Address = BASE_4GB - 1;
+ Status = gBS->AllocatePages (
+ AllocateMaxAddress,
+ EfiReservedMemoryType,
+ EFI_SIZE_TO_PAGES (ApSafeBufferSize),
+ &Address
+ );
+ ASSERT_EFI_ERROR (Status);
- mReservedTopOfApStack = (UINTN)AllocateReservedPages (EFI_SIZE_TO_PAGES (ApSafeBufferSize));
- ASSERT (mReservedTopOfApStack != 0);
- ASSERT ((mReservedTopOfApStack & (UINTN)(CPU_STACK_ALIGNMENT - 1)) == 0);
- ASSERT ((AP_SAFE_STACK_SIZE & (CPU_STACK_ALIGNMENT - 1)) == 0);
-
- mReservedApLoopFunc = (VOID *)(mReservedTopOfApStack + CpuMpData->CpuCount * AP_SAFE_STACK_SIZE);
- if (StandardSignatureIsAuthenticAMD ()) {
- CopyMem (
- mReservedApLoopFunc,
- CpuMpData->AddressMap.RelocateApLoopFuncAddressAmd,
- CpuMpData->AddressMap.RelocateApLoopFuncSizeAmd
- );
- } else {
- CopyMem (
- mReservedApLoopFunc,
- CpuMpData->AddressMap.RelocateApLoopFuncAddress,
- CpuMpData->AddressMap.RelocateApLoopFuncSize
- );
+ mReservedApLoopFunc = (VOID *)(UINTN)Address;
+ ASSERT (mReservedApLoopFunc != NULL);
- mApPageTable = CreatePageTable (
- mReservedTopOfApStack,
- ApSafeBufferSize
- );
+ //
+ // Make sure that the buffer memory is executable if NX protection is enabled
+ // for EfiReservedMemoryType.
+ //
+ // TODO: Check EFI_MEMORY_XP bit set or not once it's available in DXE GCD
+ // service.
+ //
+ Status = gDS->GetMemorySpaceDescriptor (Address, &MemDesc);
+ if (!EFI_ERROR (Status)) {
+ gDS->SetMemorySpaceAttributes (
+ Address,
+ ApSafeBufferSize,
+ MemDesc.Attributes & (~EFI_MEMORY_XP)
+ );
}
- mReservedTopOfApStack += CpuMpData->CpuCount * AP_SAFE_STACK_SIZE;
+ ApSafeBufferSize = EFI_PAGES_TO_SIZE (
+ EFI_SIZE_TO_PAGES (
+ CpuMpData->CpuCount * AP_SAFE_STACK_SIZE
+ )
+ );
+ Address = BASE_4GB - 1;
+ Status = gBS->AllocatePages (
+ AllocateMaxAddress,
+ EfiReservedMemoryType,
+ EFI_SIZE_TO_PAGES (ApSafeBufferSize),
+ &Address
+ );
+ ASSERT_EFI_ERROR (Status);
+
+ mReservedTopOfApStack = (UINTN)Address + ApSafeBufferSize;
+ ASSERT ((mReservedTopOfApStack & (UINTN)(CPU_STACK_ALIGNMENT - 1)) == 0);
+ CopyMem (
+ mReservedApLoopFunc,
+ CpuMpData->AddressMap.RelocateApLoopFuncAddress,
+ CpuMpData->AddressMap.RelocateApLoopFuncSize
+ );
Status = gBS->CreateEvent (
EVT_TIMER | EVT_NOTIFY_SIGNAL,
diff --git a/UefiCpuPkg/Library/MpInitLib/Ia32/CreatePageTable.c b/UefiCpuPkg/Library/MpInitLib/Ia32/CreatePageTable.c
deleted file mode 100644
index 525885b77d..0000000000
--- a/UefiCpuPkg/Library/MpInitLib/Ia32/CreatePageTable.c
+++ /dev/null
@@ -1,27 +0,0 @@
-/** @file
- Function to create page talbe.
- Only create page table for x64, and leave the CreatePageTable empty for Ia32.
-
- Copyright (c) 2022, Intel Corporation. All rights reserved.<BR>
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-**/
-
-#include <Base.h>
-
-/**
- Only create page table for x64, and leave the CreatePageTable empty for Ia32.
-
- @param[in] LinearAddress The start of the linear address range.
- @param[in] Length The length of the linear address range.
-
- @return The page table to be created.
-**/
-UINTN
-CreatePageTable (
- IN UINTN Address,
- IN UINTN Length
- )
-{
- return 0;
-}
diff --git a/UefiCpuPkg/Library/MpInitLib/MpLib.h b/UefiCpuPkg/Library/MpInitLib/MpLib.h
index 13d515c2df..1102003a93 100644
--- a/UefiCpuPkg/Library/MpInitLib/MpLib.h
+++ b/UefiCpuPkg/Library/MpInitLib/MpLib.h
@@ -392,9 +392,12 @@ typedef
(EFIAPI *ASM_RELOCATE_AP_LOOP)(
IN BOOLEAN MwaitSupport,
IN UINTN ApTargetCState,
+ IN UINTN PmCodeSegment,
IN UINTN TopOfApStack,
IN UINTN NumberToFinish,
- IN UINTN Cr3
+ IN UINTN Pm16CodeSegment,
+ IN UINTN SevEsAPJumpTable,
+ IN UINTN WakeupBuffer
);
/**
@@ -509,20 +512,6 @@ WakeUpAP (
IN BOOLEAN WakeUpDisabledAps
);
-/**
- Create 1:1 mapping page table in reserved memory to map the specified address range.
-
- @param[in] LinearAddress The start of the linear address range.
- @param[in] Length The length of the linear address range.
-
- @return The page table to be created.
-**/
-UINTN
-CreatePageTable (
- IN UINTN Address,
- IN UINTN Length
- );
-
/**
Initialize global data for MP support.
diff --git a/UefiCpuPkg/Library/MpInitLib/X64/CreatePageTable.c b/UefiCpuPkg/Library/MpInitLib/X64/CreatePageTable.c
deleted file mode 100644
index 548ef3f2c8..0000000000
--- a/UefiCpuPkg/Library/MpInitLib/X64/CreatePageTable.c
+++ /dev/null
@@ -1,75 +0,0 @@
-/** @file
- Function to create page talbe.
- Only create page table for x64, and leave the CreatePageTable empty for Ia32.
-
- Copyright (c) 2022, Intel Corporation. All rights reserved.<BR>
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-**/
-#include <Library/CpuPageTableLib.h>
-#include <Library/MemoryAllocationLib.h>
-#include <Base.h>
-#include <Library/BaseMemoryLib.h>
-#include <Library/DebugLib.h>
-
-/**
- Create 1:1 mapping page table in reserved memory to map the specified address range.
-
- @param[in] LinearAddress The start of the linear address range.
- @param[in] Length The length of the linear address range.
-
- @return The page table to be created.
-**/
-UINTN
-CreatePageTable (
- IN UINTN Address,
- IN UINTN Length
- )
-{
- EFI_STATUS Status;
- VOID *PageTableBuffer;
- UINTN PageTableBufferSize;
- UINTN PageTable;
-
- IA32_MAP_ATTRIBUTE MapAttribute;
- IA32_MAP_ATTRIBUTE MapMask;
-
- MapAttribute.Uint64 = Address;
- MapAttribute.Bits.Present = 1;
- MapAttribute.Bits.ReadWrite = 1;
-
- MapMask.Bits.PageTableBaseAddress = 1;
- MapMask.Bits.Present = 1;
- MapMask.Bits.ReadWrite = 1;
-
- PageTable = 0;
- PageTableBufferSize = 0;
-
- Status = PageTableMap (
- &PageTable,
- Paging4Level,
- NULL,
- &PageTableBufferSize,
- Address,
- Length,
- &MapAttribute,
- &MapMask
- );
- ASSERT (Status == EFI_BUFFER_TOO_SMALL);
- DEBUG ((DEBUG_INFO, "AP Page Table Buffer Size = %x\n", PageTableBufferSize));
-
- PageTableBuffer = AllocateReservedPages (EFI_SIZE_TO_PAGES (PageTableBufferSize));
- ASSERT (PageTableBuffer != NULL);
- Status = PageTableMap (
- &PageTable,
- Paging4Level,
- PageTableBuffer,
- &PageTableBufferSize,
- Address,
- Length,
- &MapAttribute,
- &MapMask
- );
- ASSERT_EFI_ERROR (Status);
- return PageTable;
-}
diff --git a/UefiCpuPkg/Library/MpInitLib/X64/MpFuncs.nasm b/UefiCpuPkg/Library/MpInitLib/X64/MpFuncs.nasm
index 8ae287dd8d..39c3e8606a 100644
--- a/UefiCpuPkg/Library/MpInitLib/X64/MpFuncs.nasm
+++ b/UefiCpuPkg/Library/MpInitLib/X64/MpFuncs.nasm
@@ -279,42 +279,120 @@ CProcedureInvoke:
RendezvousFunnelProcEnd:
;-------------------------------------------------------------------------------------
-; AsmRelocateApLoop (MwaitSupport, ApTargetCState, TopOfApStack, CountTofinish, Cr3);
-; This function is called during the finalizaiton of Mp initialization before booting
-; to OS, and aim to put Aps either in Mwait or HLT.
+; AsmRelocateApLoop (MwaitSupport, ApTargetCState, PmCodeSegment, TopOfApStack, CountTofinish, Pm16CodeSegment, SevEsAPJumpTable, WakeupBuffer);
;-------------------------------------------------------------------------------------
-; +----------------+
-; | Cr3 | rsp+40
-; +----------------+
-; | CountTofinish | r9
-; +----------------+
-; | TopOfApStack | r8
-; +----------------+
-; | ApTargetCState | rdx
-; +----------------+
-; | MwaitSupport | rcx
-; +----------------+
-; | the return |
-; +----------------+ low address
-
AsmRelocateApLoopStart:
- mov rax, r9 ; CountTofinish
+BITS 64
+ cmp qword [rsp + 56], 0 ; SevEsAPJumpTable
+ je NoSevEs
+
+ ;
+ ; Perform some SEV-ES related setup before leaving 64-bit mode
+ ;
+ push rcx
+ push rdx
+
+ ;
+ ; Get the RDX reset value using CPUID
+ ;
+ mov rax, 1
+ cpuid
+ mov rsi, rax ; Save off the reset value for RDX
+
+ ;
+ ; Prepare the GHCB for the AP_HLT_LOOP VMGEXIT call
+ ; - Must be done while in 64-bit long mode so that writes to
+ ; the GHCB memory will be unencrypted.
+ ; - No NAE events can be generated once this is set otherwise
+ ; the AP_RESET_HOLD SW_EXITCODE will be overwritten.
+ ;
+ mov rcx, 0xc0010130
+ rdmsr ; Retrieve current GHCB address
+ shl rdx, 32
+ or rdx, rax
+
+ mov rdi, rdx
+ xor rax, rax
+ mov rcx, 0x800
+ shr rcx, 3
+ rep stosq ; Clear the GHCB
+
+ mov rax, 0x80000004 ; VMGEXIT AP_RESET_HOLD
+ mov [rdx + 0x390], rax
+ mov rax, 114 ; Set SwExitCode valid bit
+ bts [rdx + 0x3f0], rax
+ inc rax ; Set SwExitInfo1 valid bit
+ bts [rdx + 0x3f0], rax
+ inc rax ; Set SwExitInfo2 valid bit
+ bts [rdx + 0x3f0], rax
+
+ pop rdx
+ pop rcx
+
+NoSevEs:
+ cli ; Disable interrupt before switching to 32-bit mode
+ mov rax, [rsp + 40] ; CountTofinish
lock dec dword [rax] ; (*CountTofinish)--
- mov rax, [rsp + 40] ; Cr3
- ; Do not push on old stack, since old stack is not mapped
- ; in the page table pointed by cr3
- mov cr3, rax
- mov rsp, r8 ; TopOfApStack
+ mov r10, [rsp + 48] ; Pm16CodeSegment
+ mov rax, [rsp + 56] ; SevEsAPJumpTable
+ mov rbx, [rsp + 64] ; WakeupBuffer
+ mov rsp, r9 ; TopOfApStack
+
+ push rax ; Save SevEsAPJumpTable
+ push rbx ; Save WakeupBuffer
+ push r10 ; Save Pm16CodeSegment
+ push rcx ; Save MwaitSupport
+ push rdx ; Save ApTargetCState
+
+ lea rax, [PmEntry] ; rax <- The start address of transition code
+
+ push r8
+ push rax
+
+ ;
+ ; Clear R8 - R15, for reset, before going into 32-bit mode
+ ;
+ xor r8, r8
+ xor r9, r9
+ xor r10, r10
+ xor r11, r11
+ xor r12, r12
+ xor r13, r13
+ xor r14, r14
+ xor r15, r15
+
+ ;
+ ; Far return into 32-bit mode
+ ;
+ retfq
+
+BITS 32
+PmEntry:
+ mov eax, cr0
+ btr eax, 31 ; Clear CR0.PG
+ mov cr0, eax ; Disable paging and caches
+
+ mov ecx, 0xc0000080
+ rdmsr
+ and ah, ~ 1 ; Clear LME
+ wrmsr
+ mov eax, cr4
+ and al, ~ (1 << 5) ; Clear PAE
+ mov cr4, eax
+
+ pop edx
+ add esp, 4
+ pop ecx,
+ add esp, 4
MwaitCheck:
cmp cl, 1 ; Check mwait-monitor support
jnz HltLoop
- mov rbx, rdx ; Save C-State to ebx
-
+ mov ebx, edx ; Save C-State to ebx
MwaitLoop:
cli
- mov rax, rsp ; Set Monitor Address
+ mov eax, esp ; Set Monitor Address
xor ecx, ecx ; ecx = 0
xor edx, edx ; edx = 0
monitor
@@ -324,10 +402,49 @@ MwaitLoop:
jmp MwaitLoop
HltLoop:
+ pop edx ; PM16CodeSegment
+ add esp, 4
+ pop ebx ; WakeupBuffer
+ add esp, 4
+ pop eax ; SevEsAPJumpTable
+ add esp, 4
+ cmp eax, 0 ; Check for SEV-ES
+ je DoHlt
+
+ cli
+ ;
+ ; SEV-ES is enabled, use VMGEXIT (GHCB information already
+ ; set by caller)
+ ;
+BITS 64
+ rep vmmcall
+BITS 32
+
+ ;
+ ; Back from VMGEXIT AP_HLT_LOOP
+ ; Push the FLAGS/CS/IP values to use
+ ;
+ push word 0x0002 ; EFLAGS
+ xor ecx, ecx
+ mov cx, [eax + 2] ; CS
+ push cx
+ mov cx, [eax] ; IP
+ push cx
+ push word 0x0000 ; For alignment, will be discarded
+
+ push edx
+ push ebx
+
+ mov edx, esi ; Restore RDX reset value
+
+ retf
+
+DoHlt:
cli
hlt
- jmp HltLoop
+ jmp DoHlt
+BITS 64
AsmRelocateApLoopEnd:
;-------------------------------------------------------------------------------------
diff --git a/UefiCpuPkg/UefiCpuPkg.dsc b/UefiCpuPkg/UefiCpuPkg.dsc
index 781acedfc5..f9a46089d2 100644
--- a/UefiCpuPkg/UefiCpuPkg.dsc
+++ b/UefiCpuPkg/UefiCpuPkg.dsc
@@ -94,7 +94,6 @@
MemoryAllocationLib|MdePkg/Library/UefiMemoryAllocationLib/UefiMemoryAllocationLib.inf
HobLib|MdePkg/Library/DxeHobLib/DxeHobLib.inf
CpuExceptionHandlerLib|UefiCpuPkg/Library/CpuExceptionHandlerLib/DxeCpuExceptionHandlerLib.inf
- CpuPageTableLib|UefiCpuPkg/Library/CpuPageTableLib/CpuPageTableLib.inf
MpInitLib|UefiCpuPkg/Library/MpInitLib/DxeMpInitLib.inf
RegisterCpuFeaturesLib|UefiCpuPkg/Library/RegisterCpuFeaturesLib/DxeRegisterCpuFeaturesLib.inf
CpuCacheInfoLib|UefiCpuPkg/Library/CpuCacheInfoLib/DxeCpuCacheInfoLib.inf
--
2.36.1.windows.1
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH 2/4] Revert "UefiPayloadPkg: Add CpuPageTableLib required by MpInitLib."
2023-01-09 3:37 [PATCH 0/4] Revert the series of the patches which put APs in Yuanhao Xie
2023-01-09 3:37 ` [PATCH 1/4] Revert "UefiCpuPkg: Has APs in 64 bit long-mode before booting to OS." Yuanhao Xie
@ 2023-01-09 3:37 ` Yuanhao Xie
2023-01-09 3:48 ` Guo, Gua
2023-01-09 3:37 ` [PATCH 3/4] Revert "OvmfPkg: " Yuanhao Xie
` (2 subsequent siblings)
4 siblings, 1 reply; 8+ messages in thread
From: Yuanhao Xie @ 2023-01-09 3:37 UTC (permalink / raw)
To: devel; +Cc: Guo Dong, Ray Ni, Sean Rhodes, James Lu, Gua Guo
This reverts commit 3f378450dfafc11754bfdb64af28060ec8466acb, since the
commit 73ccde8 introduced CpuPageTableLib dependency which resolved
for UefiPayloadPkg need to be reverted.
Ref: https://bugzilla.tianocore.org/show_bug.cgi?id=4234
Cc: Guo Dong <guo.dong@intel.com>
Cc: Ray Ni <ray.ni@intel.com>
Cc: Sean Rhodes <sean@starlabs.systems>
Cc: James Lu <james.lu@intel.com>
Cc: Gua Guo <gua.guo@intel.com>
Signed-off-by: Yuanhao Xie <yuanhao.xie@intel.com>
---
UefiPayloadPkg/UefiPayloadPkg.dsc | 1 -
1 file changed, 1 deletion(-)
diff --git a/UefiPayloadPkg/UefiPayloadPkg.dsc b/UefiPayloadPkg/UefiPayloadPkg.dsc
index a1a3c74290..2dbd875f37 100644
--- a/UefiPayloadPkg/UefiPayloadPkg.dsc
+++ b/UefiPayloadPkg/UefiPayloadPkg.dsc
@@ -340,7 +340,6 @@
DebugAgentLib|SourceLevelDebugPkg/Library/DebugAgent/DxeDebugAgentLib.inf
!endif
CpuExceptionHandlerLib|UefiCpuPkg/Library/CpuExceptionHandlerLib/DxeCpuExceptionHandlerLib.inf
- CpuPageTableLib|UefiCpuPkg/Library/CpuPageTableLib/CpuPageTableLib.inf
MpInitLib|UefiCpuPkg/Library/MpInitLib/DxeMpInitLib.inf
!if $(PERFORMANCE_MEASUREMENT_ENABLE)
PerformanceLib|MdeModulePkg/Library/DxePerformanceLib/DxePerformanceLib.inf
--
2.36.1.windows.1
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH 3/4] Revert "OvmfPkg: Add CpuPageTableLib required by MpInitLib."
2023-01-09 3:37 [PATCH 0/4] Revert the series of the patches which put APs in Yuanhao Xie
2023-01-09 3:37 ` [PATCH 1/4] Revert "UefiCpuPkg: Has APs in 64 bit long-mode before booting to OS." Yuanhao Xie
2023-01-09 3:37 ` [PATCH 2/4] Revert "UefiPayloadPkg: Add CpuPageTableLib required by MpInitLib." Yuanhao Xie
@ 2023-01-09 3:37 ` Yuanhao Xie
2023-01-09 3:37 ` [PATCH 4/4] Revert "UefiCpuPkg: Duplicated AsmRelocateApLoop as AsmRelocateApLoopAmd" Yuanhao Xie
2023-01-09 8:15 ` [edk2-devel] [PATCH 0/4] Revert the series of the patches which put APs in Laszlo Ersek
4 siblings, 0 replies; 8+ messages in thread
From: Yuanhao Xie @ 2023-01-09 3:37 UTC (permalink / raw)
To: devel; +Cc: Ard Biesheuvel, Jiewen Yao, Jordan Justen, Gerd Hoffmann
This reverts commit 4a8642422460635462d315defe4ca84bf6d33351 as the
commit 73ccde8 introduced CpuPageTableLib dependency which resolved
for OvmfPkg is to be reverted.
Ref: https://bugzilla.tianocore.org/show_bug.cgi?id=4234
Cc: Ard Biesheuvel <ardb+tianocore@kernel.org>
Cc: Jiewen Yao <jiewen.yao@intel.com>
Cc: Jordan Justen <jordan.l.justen@intel.com>
Cc: Gerd Hoffmann <kraxel@redhat.com>
Signed-off-by: Yuanhao Xie <yuanhao.xie@intel.com>
---
OvmfPkg/AmdSev/AmdSevX64.dsc | 3 +--
OvmfPkg/CloudHv/CloudHvX64.dsc | 1 -
OvmfPkg/IntelTdx/IntelTdxX64.dsc | 4 +---
OvmfPkg/Microvm/MicrovmX64.dsc | 3 +--
OvmfPkg/OvmfPkgIa32X64.dsc | 1 -
OvmfPkg/OvmfPkgX64.dsc | 2 --
OvmfPkg/OvmfXen.dsc | 3 +--
7 files changed, 4 insertions(+), 13 deletions(-)
diff --git a/OvmfPkg/AmdSev/AmdSevX64.dsc b/OvmfPkg/AmdSev/AmdSevX64.dsc
index 1cafe0d5b3..36100f5fdc 100644
--- a/OvmfPkg/AmdSev/AmdSevX64.dsc
+++ b/OvmfPkg/AmdSev/AmdSevX64.dsc
@@ -3,7 +3,7 @@
# virtual machine remote attestation and secret injection
#
# Copyright (c) 2020 James Bottomley, IBM Corporation.
-# Copyright (c) 2006 - 2022, Intel Corporation. All rights reserved.<BR>
+# Copyright (c) 2006 - 2021, Intel Corporation. All rights reserved.<BR>
# (C) Copyright 2016 Hewlett Packard Enterprise Development LP<BR>
#
# SPDX-License-Identifier: BSD-2-Clause-Patent
@@ -353,7 +353,6 @@
DebugAgentLib|SourceLevelDebugPkg/Library/DebugAgent/DxeDebugAgentLib.inf
!endif
PciLib|OvmfPkg/Library/DxePciLibI440FxQ35/DxePciLibI440FxQ35.inf
- CpuPageTableLib|UefiCpuPkg/Library/CpuPageTableLib/CpuPageTableLib.inf
MpInitLib|UefiCpuPkg/Library/MpInitLib/DxeMpInitLib.inf
NestedInterruptTplLib|OvmfPkg/Library/NestedInterruptTplLib/NestedInterruptTplLib.inf
QemuFwCfgS3Lib|OvmfPkg/Library/QemuFwCfgS3Lib/DxeQemuFwCfgS3LibFwCfg.inf
diff --git a/OvmfPkg/CloudHv/CloudHvX64.dsc b/OvmfPkg/CloudHv/CloudHvX64.dsc
index dc2509c39e..03b7a5cc6b 100644
--- a/OvmfPkg/CloudHv/CloudHvX64.dsc
+++ b/OvmfPkg/CloudHv/CloudHvX64.dsc
@@ -404,7 +404,6 @@
DebugAgentLib|SourceLevelDebugPkg/Library/DebugAgent/DxeDebugAgentLib.inf
!endif
PciLib|OvmfPkg/Library/DxePciLibI440FxQ35/DxePciLibI440FxQ35.inf
- CpuPageTableLib|UefiCpuPkg/Library/CpuPageTableLib/CpuPageTableLib.inf
MpInitLib|UefiCpuPkg/Library/MpInitLib/DxeMpInitLib.inf
NestedInterruptTplLib|OvmfPkg/Library/NestedInterruptTplLib/NestedInterruptTplLib.inf
QemuFwCfgS3Lib|OvmfPkg/Library/QemuFwCfgS3Lib/DxeQemuFwCfgS3LibFwCfg.inf
diff --git a/OvmfPkg/IntelTdx/IntelTdxX64.dsc b/OvmfPkg/IntelTdx/IntelTdxX64.dsc
index 5bd74639b4..81511e3556 100644
--- a/OvmfPkg/IntelTdx/IntelTdxX64.dsc
+++ b/OvmfPkg/IntelTdx/IntelTdxX64.dsc
@@ -1,7 +1,7 @@
## @file
# EFI/Framework Open Virtual Machine Firmware (OVMF) platform
#
-# Copyright (c) 2006 - 2022, Intel Corporation. All rights reserved.<BR>
+# Copyright (c) 2006 - 2021, Intel Corporation. All rights reserved.<BR>
# (C) Copyright 2016 Hewlett Packard Enterprise Development LP<BR>
# Copyright (c) Microsoft Corporation.
#
@@ -313,7 +313,6 @@
CpuExceptionHandlerLib|UefiCpuPkg/Library/CpuExceptionHandlerLib/DxeCpuExceptionHandlerLib.inf
LockBoxLib|OvmfPkg/Library/LockBoxLib/LockBoxDxeLib.inf
PciLib|OvmfPkg/Library/DxePciLibI440FxQ35/DxePciLibI440FxQ35.inf
- CpuPageTableLib|UefiCpuPkg/Library/CpuPageTableLib/CpuPageTableLib.inf
MpInitLib|UefiCpuPkg/Library/MpInitLib/DxeMpInitLib.inf
NestedInterruptTplLib|OvmfPkg/Library/NestedInterruptTplLib/NestedInterruptTplLib.inf
QemuFwCfgS3Lib|OvmfPkg/Library/QemuFwCfgS3Lib/DxeQemuFwCfgS3LibFwCfg.inf
@@ -579,7 +578,6 @@
UefiCpuPkg/CpuDxe/CpuDxe.inf {
<LibraryClasses>
- CpuPageTableLib|UefiCpuPkg/Library/CpuPageTableLib/CpuPageTableLib.inf
#
# Directly use DxeMpInitLib. It depends on DxeMpInitLibMpDepLib which
# checks the Protocol of gEfiMpInitLibMpDepProtocolGuid.
diff --git a/OvmfPkg/Microvm/MicrovmX64.dsc b/OvmfPkg/Microvm/MicrovmX64.dsc
index f92a321fc2..d5bdcbb983 100644
--- a/OvmfPkg/Microvm/MicrovmX64.dsc
+++ b/OvmfPkg/Microvm/MicrovmX64.dsc
@@ -1,7 +1,7 @@
## @file
# EFI/Framework Open Virtual Machine Firmware (OVMF) platform
#
-# Copyright (c) 2006 - 2022, Intel Corporation. All rights reserved.<BR>
+# Copyright (c) 2006 - 2021, Intel Corporation. All rights reserved.<BR>
# (C) Copyright 2016 Hewlett Packard Enterprise Development LP<BR>
# Copyright (c) Microsoft Corporation.
#
@@ -403,7 +403,6 @@
PciLib|MdePkg/Library/BasePciLibPciExpress/BasePciLibPciExpress.inf
PciPcdProducerLib|OvmfPkg/Fdt/FdtPciPcdProducerLib/FdtPciPcdProducerLib.inf
PciExpressLib|OvmfPkg/Library/BaseCachingPciExpressLib/BaseCachingPciExpressLib.inf
- CpuPageTableLib|UefiCpuPkg/Library/CpuPageTableLib/CpuPageTableLib.inf
MpInitLib|UefiCpuPkg/Library/MpInitLib/DxeMpInitLib.inf
NestedInterruptTplLib|OvmfPkg/Library/NestedInterruptTplLib/NestedInterruptTplLib.inf
QemuFwCfgS3Lib|OvmfPkg/Library/QemuFwCfgS3Lib/DxeQemuFwCfgS3LibFwCfg.inf
diff --git a/OvmfPkg/OvmfPkgIa32X64.dsc b/OvmfPkg/OvmfPkgIa32X64.dsc
index f21b78299f..a9d422bd91 100644
--- a/OvmfPkg/OvmfPkgIa32X64.dsc
+++ b/OvmfPkg/OvmfPkgIa32X64.dsc
@@ -414,7 +414,6 @@
DebugAgentLib|SourceLevelDebugPkg/Library/DebugAgent/DxeDebugAgentLib.inf
!endif
PciLib|OvmfPkg/Library/DxePciLibI440FxQ35/DxePciLibI440FxQ35.inf
- CpuPageTableLib|UefiCpuPkg/Library/CpuPageTableLib/CpuPageTableLib.inf
MpInitLib|UefiCpuPkg/Library/MpInitLib/DxeMpInitLib.inf
NestedInterruptTplLib|OvmfPkg/Library/NestedInterruptTplLib/NestedInterruptTplLib.inf
QemuFwCfgS3Lib|OvmfPkg/Library/QemuFwCfgS3Lib/DxeQemuFwCfgS3LibFwCfg.inf
diff --git a/OvmfPkg/OvmfPkgX64.dsc b/OvmfPkg/OvmfPkgX64.dsc
index e24bb442cb..8401d73900 100644
--- a/OvmfPkg/OvmfPkgX64.dsc
+++ b/OvmfPkg/OvmfPkgX64.dsc
@@ -434,7 +434,6 @@
DebugAgentLib|SourceLevelDebugPkg/Library/DebugAgent/DxeDebugAgentLib.inf
!endif
PciLib|OvmfPkg/Library/DxePciLibI440FxQ35/DxePciLibI440FxQ35.inf
- CpuPageTableLib|UefiCpuPkg/Library/CpuPageTableLib/CpuPageTableLib.inf
MpInitLib|UefiCpuPkg/Library/MpInitLib/DxeMpInitLib.inf
NestedInterruptTplLib|OvmfPkg/Library/NestedInterruptTplLib/NestedInterruptTplLib.inf
QemuFwCfgS3Lib|OvmfPkg/Library/QemuFwCfgS3Lib/DxeQemuFwCfgS3LibFwCfg.inf
@@ -815,7 +814,6 @@
UefiCpuPkg/CpuDxe/CpuDxe.inf {
<LibraryClasses>
- CpuPageTableLib|UefiCpuPkg/Library/CpuPageTableLib/CpuPageTableLib.inf
#
# Directly use DxeMpInitLib. It depends on DxeMpInitLibMpDepLib which
# checks the Protocol of gEfiMpInitLibMpDepProtocolGuid.
diff --git a/OvmfPkg/OvmfXen.dsc b/OvmfPkg/OvmfXen.dsc
index bfa08c08e3..c328987e84 100644
--- a/OvmfPkg/OvmfXen.dsc
+++ b/OvmfPkg/OvmfXen.dsc
@@ -1,7 +1,7 @@
## @file
# EFI/Framework Open Virtual Machine Firmware (OVMF) platform
#
-# Copyright (c) 2006 - 2022, Intel Corporation. All rights reserved.<BR>
+# Copyright (c) 2006 - 2021, Intel Corporation. All rights reserved.<BR>
# (C) Copyright 2016 Hewlett Packard Enterprise Development LP<BR>
# Copyright (c) 2019, Citrix Systems, Inc.
# Copyright (c) Microsoft Corporation.
@@ -339,7 +339,6 @@
DebugAgentLib|SourceLevelDebugPkg/Library/DebugAgent/DxeDebugAgentLib.inf
!endif
PciLib|OvmfPkg/Library/DxePciLibI440FxQ35/DxePciLibI440FxQ35.inf
- CpuPageTableLib|UefiCpuPkg/Library/CpuPageTableLib/CpuPageTableLib.inf
MpInitLib|UefiCpuPkg/Library/MpInitLib/DxeMpInitLib.inf
NestedInterruptTplLib|OvmfPkg/Library/NestedInterruptTplLib/NestedInterruptTplLib.inf
QemuFwCfgS3Lib|OvmfPkg/Library/QemuFwCfgS3Lib/DxeQemuFwCfgS3LibFwCfg.inf
--
2.36.1.windows.1
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH 4/4] Revert "UefiCpuPkg: Duplicated AsmRelocateApLoop as AsmRelocateApLoopAmd"
2023-01-09 3:37 [PATCH 0/4] Revert the series of the patches which put APs in Yuanhao Xie
` (2 preceding siblings ...)
2023-01-09 3:37 ` [PATCH 3/4] Revert "OvmfPkg: " Yuanhao Xie
@ 2023-01-09 3:37 ` Yuanhao Xie
2023-01-09 8:15 ` [edk2-devel] [PATCH 0/4] Revert the series of the patches which put APs in Laszlo Ersek
4 siblings, 0 replies; 8+ messages in thread
From: Yuanhao Xie @ 2023-01-09 3:37 UTC (permalink / raw)
To: devel; +Cc: Guo Dong, Ray Ni, Sean Rhodes, James Lu, Gua Guo
This reverts commit 7bda8c648192d76f7b3f7cee54bd7b1c86a6a84f.
Ref: https://bugzilla.tianocore.org/show_bug.cgi?id=4234
Cc: Guo Dong <guo.dong@intel.com>
Cc: Ray Ni <ray.ni@intel.com>
Cc: Sean Rhodes <sean@starlabs.systems>
Cc: James Lu <james.lu@intel.com>
Cc: Gua Guo <gua.guo@intel.com>
Signed-off-by: Yuanhao Xie <yuanhao.xie@intel.com>
---
UefiCpuPkg/Library/MpInitLib/DxeMpLib.c | 52 +++---
UefiCpuPkg/Library/MpInitLib/MpEqu.inc | 2 -
UefiCpuPkg/Library/MpInitLib/MpLib.h | 27 ---
UefiCpuPkg/Library/MpInitLib/X64/AmdSev.nasm | 169 ------------------
UefiCpuPkg/Library/MpInitLib/X64/MpFuncs.nasm | 5 -
5 files changed, 20 insertions(+), 235 deletions(-)
diff --git a/UefiCpuPkg/Library/MpInitLib/DxeMpLib.c b/UefiCpuPkg/Library/MpInitLib/DxeMpLib.c
index 445e0853d2..a84e9e33ba 100644
--- a/UefiCpuPkg/Library/MpInitLib/DxeMpLib.c
+++ b/UefiCpuPkg/Library/MpInitLib/DxeMpLib.c
@@ -1,7 +1,7 @@
/** @file
MP initialize support functions for DXE phase.
- Copyright (c) 2016 - 2022, Intel Corporation. All rights reserved.<BR>
+ Copyright (c) 2016 - 2020, Intel Corporation. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
@@ -378,44 +378,32 @@ RelocateApLoop (
IN OUT VOID *Buffer
)
{
- CPU_MP_DATA *CpuMpData;
- BOOLEAN MwaitSupport;
- ASM_RELOCATE_AP_LOOP AsmRelocateApLoopFunc;
- ASM_RELOCATE_AP_LOOP_AMD AsmRelocateApLoopFuncAmd;
- UINTN ProcessorNumber;
- UINTN StackStart;
+ CPU_MP_DATA *CpuMpData;
+ BOOLEAN MwaitSupport;
+ ASM_RELOCATE_AP_LOOP AsmRelocateApLoopFunc;
+ UINTN ProcessorNumber;
+ UINTN StackStart;
MpInitLibWhoAmI (&ProcessorNumber);
CpuMpData = GetCpuMpData ();
MwaitSupport = IsMwaitSupport ();
- if (StandardSignatureIsAuthenticAMD ()) {
- StackStart = CpuMpData->UseSevEsAPMethod ? CpuMpData->SevEsAPResetStackStart : mReservedTopOfApStack;
- AsmRelocateApLoopFuncAmd = (ASM_RELOCATE_AP_LOOP_AMD)(UINTN)mReservedApLoopFunc;
- AsmRelocateApLoopFuncAmd (
- MwaitSupport,
- CpuMpData->ApTargetCState,
- CpuMpData->PmCodeSegment,
- StackStart - ProcessorNumber * AP_SAFE_STACK_SIZE,
- (UINTN)&mNumberToFinish,
- CpuMpData->Pm16CodeSegment,
- CpuMpData->SevEsAPBuffer,
- CpuMpData->WakeupBuffer
- );
+ if (CpuMpData->UseSevEsAPMethod) {
+ StackStart = CpuMpData->SevEsAPResetStackStart;
} else {
- StackStart = mReservedTopOfApStack;
- AsmRelocateApLoopFunc = (ASM_RELOCATE_AP_LOOP)(UINTN)mReservedApLoopFunc;
- AsmRelocateApLoopFunc (
- MwaitSupport,
- CpuMpData->ApTargetCState,
- CpuMpData->PmCodeSegment,
- StackStart - ProcessorNumber * AP_SAFE_STACK_SIZE,
- (UINTN)&mNumberToFinish,
- CpuMpData->Pm16CodeSegment,
- CpuMpData->SevEsAPBuffer,
- CpuMpData->WakeupBuffer
- );
+ StackStart = mReservedTopOfApStack;
}
+ AsmRelocateApLoopFunc = (ASM_RELOCATE_AP_LOOP)(UINTN)mReservedApLoopFunc;
+ AsmRelocateApLoopFunc (
+ MwaitSupport,
+ CpuMpData->ApTargetCState,
+ CpuMpData->PmCodeSegment,
+ StackStart - ProcessorNumber * AP_SAFE_STACK_SIZE,
+ (UINTN)&mNumberToFinish,
+ CpuMpData->Pm16CodeSegment,
+ CpuMpData->SevEsAPBuffer,
+ CpuMpData->WakeupBuffer
+ );
//
// It should never reach here
//
diff --git a/UefiCpuPkg/Library/MpInitLib/MpEqu.inc b/UefiCpuPkg/Library/MpInitLib/MpEqu.inc
index ea202d4aef..ebadcc6fb3 100644
--- a/UefiCpuPkg/Library/MpInitLib/MpEqu.inc
+++ b/UefiCpuPkg/Library/MpInitLib/MpEqu.inc
@@ -26,8 +26,6 @@ struc MP_ASSEMBLY_ADDRESS_MAP
.RendezvousFunnelSize CTYPE_UINTN 1
.RelocateApLoopFuncAddress CTYPE_UINTN 1
.RelocateApLoopFuncSize CTYPE_UINTN 1
- .RelocateApLoopFuncAddressAmd CTYPE_UINTN 1
- .RelocateApLoopFuncSizeAmd CTYPE_UINTN 1
.ModeTransitionOffset CTYPE_UINTN 1
.SwitchToRealNoNxOffset CTYPE_UINTN 1
.SwitchToRealPM16ModeOffset CTYPE_UINTN 1
diff --git a/UefiCpuPkg/Library/MpInitLib/MpLib.h b/UefiCpuPkg/Library/MpInitLib/MpLib.h
index 1102003a93..f5086e497e 100644
--- a/UefiCpuPkg/Library/MpInitLib/MpLib.h
+++ b/UefiCpuPkg/Library/MpInitLib/MpLib.h
@@ -179,8 +179,6 @@ typedef struct {
UINTN RendezvousFunnelSize;
UINT8 *RelocateApLoopFuncAddress;
UINTN RelocateApLoopFuncSize;
- UINT8 *RelocateApLoopFuncAddressAmd;
- UINTN RelocateApLoopFuncSizeAmd;
UINTN ModeTransitionOffset;
UINTN SwitchToRealNoNxOffset;
UINTN SwitchToRealPM16ModeOffset;
@@ -348,31 +346,6 @@ typedef
extern EFI_GUID mCpuInitMpLibHobGuid;
-/**
- Assembly code to place AP into safe loop mode for Amd.
- Place AP into targeted C-State if MONITOR is supported, otherwise
- place AP into hlt state.
- Place AP in protected mode if the current is long mode. Due to AP maybe
- wakeup by some hardware event. It could avoid accessing page table that
- may not available during booting to OS.
- @param[in] MwaitSupport TRUE indicates MONITOR is supported.
- FALSE indicates MONITOR is not supported.
- @param[in] ApTargetCState Target C-State value.
- @param[in] PmCodeSegment Protected mode code segment value.
-**/
-typedef
- VOID
-(EFIAPI *ASM_RELOCATE_AP_LOOP_AMD)(
- IN BOOLEAN MwaitSupport,
- IN UINTN ApTargetCState,
- IN UINTN PmCodeSegment,
- IN UINTN TopOfApStack,
- IN UINTN NumberToFinish,
- IN UINTN Pm16CodeSegment,
- IN UINTN SevEsAPJumpTable,
- IN UINTN WakeupBuffer
- );
-
/**
Assembly code to place AP into safe loop mode.
diff --git a/UefiCpuPkg/Library/MpInitLib/X64/AmdSev.nasm b/UefiCpuPkg/Library/MpInitLib/X64/AmdSev.nasm
index b2d95adf6d..7c2469f9c5 100644
--- a/UefiCpuPkg/Library/MpInitLib/X64/AmdSev.nasm
+++ b/UefiCpuPkg/Library/MpInitLib/X64/AmdSev.nasm
@@ -346,172 +346,3 @@ PM16Mode:
iret
SwitchToRealProcEnd:
-;-------------------------------------------------------------------------------------
-; AsmRelocateApLoopAmd (MwaitSupport, ApTargetCState, PmCodeSegment, TopOfApStack, CountTofinish, Pm16CodeSegment, SevEsAPJumpTable, WakeupBuffer);
-;-------------------------------------------------------------------------------------
-
-AsmRelocateApLoopStartAmd:
-BITS 64
- cmp qword [rsp + 56], 0 ; SevEsAPJumpTable
- je NoSevEsAmd
-
- ;
- ; Perform some SEV-ES related setup before leaving 64-bit mode
- ;
- push rcx
- push rdx
-
- ;
- ; Get the RDX reset value using CPUID
- ;
- mov rax, 1
- cpuid
- mov rsi, rax ; Save off the reset value for RDX
-
- ;
- ; Prepare the GHCB for the AP_HLT_LOOP VMGEXIT call
- ; - Must be done while in 64-bit long mode so that writes to
- ; the GHCB memory will be unencrypted.
- ; - No NAE events can be generated once this is set otherwise
- ; the AP_RESET_HOLD SW_EXITCODE will be overwritten.
- ;
- mov rcx, 0xc0010130
- rdmsr ; Retrieve current GHCB address
- shl rdx, 32
- or rdx, rax
-
- mov rdi, rdx
- xor rax, rax
- mov rcx, 0x800
- shr rcx, 3
- rep stosq ; Clear the GHCB
-
- mov rax, 0x80000004 ; VMGEXIT AP_RESET_HOLD
- mov [rdx + 0x390], rax
- mov rax, 114 ; Set SwExitCode valid bit
- bts [rdx + 0x3f0], rax
- inc rax ; Set SwExitInfo1 valid bit
- bts [rdx + 0x3f0], rax
- inc rax ; Set SwExitInfo2 valid bit
- bts [rdx + 0x3f0], rax
-
- pop rdx
- pop rcx
-
-NoSevEsAmd:
- cli ; Disable interrupt before switching to 32-bit mode
- mov rax, [rsp + 40] ; CountTofinish
- lock dec dword [rax] ; (*CountTofinish)--
-
- mov r10, [rsp + 48] ; Pm16CodeSegment
- mov rax, [rsp + 56] ; SevEsAPJumpTable
- mov rbx, [rsp + 64] ; WakeupBuffer
- mov rsp, r9 ; TopOfApStack
-
- push rax ; Save SevEsAPJumpTable
- push rbx ; Save WakeupBuffer
- push r10 ; Save Pm16CodeSegment
- push rcx ; Save MwaitSupport
- push rdx ; Save ApTargetCState
-
- lea rax, [PmEntryAmd] ; rax <- The start address of transition code
-
- push r8
- push rax
-
- ;
- ; Clear R8 - R15, for reset, before going into 32-bit mode
- ;
- xor r8, r8
- xor r9, r9
- xor r10, r10
- xor r11, r11
- xor r12, r12
- xor r13, r13
- xor r14, r14
- xor r15, r15
-
- ;
- ; Far return into 32-bit mode
- ;
-o64 retf
-
-BITS 32
-PmEntryAmd:
- mov eax, cr0
- btr eax, 31 ; Clear CR0.PG
- mov cr0, eax ; Disable paging and caches
-
- mov ecx, 0xc0000080
- rdmsr
- and ah, ~ 1 ; Clear LME
- wrmsr
- mov eax, cr4
- and al, ~ (1 << 5) ; Clear PAE
- mov cr4, eax
-
- pop edx
- add esp, 4
- pop ecx,
- add esp, 4
-
-MwaitCheckAmd:
- cmp cl, 1 ; Check mwait-monitor support
- jnz HltLoopAmd
- mov ebx, edx ; Save C-State to ebx
-MwaitLoopAmd:
- cli
- mov eax, esp ; Set Monitor Address
- xor ecx, ecx ; ecx = 0
- xor edx, edx ; edx = 0
- monitor
- mov eax, ebx ; Mwait Cx, Target C-State per eax[7:4]
- shl eax, 4
- mwait
- jmp MwaitLoopAmd
-
-HltLoopAmd:
- pop edx ; PM16CodeSegment
- add esp, 4
- pop ebx ; WakeupBuffer
- add esp, 4
- pop eax ; SevEsAPJumpTable
- add esp, 4
- cmp eax, 0 ; Check for SEV-ES
- je DoHltAmd
-
- cli
- ;
- ; SEV-ES is enabled, use VMGEXIT (GHCB information already
- ; set by caller)
- ;
-BITS 64
- rep vmmcall
-BITS 32
-
- ;
- ; Back from VMGEXIT AP_HLT_LOOP
- ; Push the FLAGS/CS/IP values to use
- ;
- push word 0x0002 ; EFLAGS
- xor ecx, ecx
- mov cx, [eax + 2] ; CS
- push cx
- mov cx, [eax] ; IP
- push cx
- push word 0x0000 ; For alignment, will be discarded
-
- push edx
- push ebx
-
- mov edx, esi ; Restore RDX reset value
-
- retf
-
-DoHltAmd:
- cli
- hlt
- jmp DoHltAmd
-
-BITS 64
-AsmRelocateApLoopEndAmd:
diff --git a/UefiCpuPkg/Library/MpInitLib/X64/MpFuncs.nasm b/UefiCpuPkg/Library/MpInitLib/X64/MpFuncs.nasm
index 39c3e8606a..5d71995bf8 100644
--- a/UefiCpuPkg/Library/MpInitLib/X64/MpFuncs.nasm
+++ b/UefiCpuPkg/Library/MpInitLib/X64/MpFuncs.nasm
@@ -460,11 +460,6 @@ ASM_PFX(AsmGetAddressMap):
mov qword [rcx + MP_ASSEMBLY_ADDRESS_MAP.RelocateApLoopFuncAddress], rax
mov qword [rcx + MP_ASSEMBLY_ADDRESS_MAP.RelocateApLoopFuncSize], AsmRelocateApLoopEnd - AsmRelocateApLoopStart
mov qword [rcx + MP_ASSEMBLY_ADDRESS_MAP.ModeTransitionOffset], Flat32Start - RendezvousFunnelProcStart
-
- lea rax, [AsmRelocateApLoopStartAmd]
- mov qword [rcx + MP_ASSEMBLY_ADDRESS_MAP.RelocateApLoopFuncAddressAmd], rax
- mov qword [rcx + MP_ASSEMBLY_ADDRESS_MAP.RelocateApLoopFuncSizeAmd], AsmRelocateApLoopEndAmd - AsmRelocateApLoopStartAmd
-
mov qword [rcx + MP_ASSEMBLY_ADDRESS_MAP.SwitchToRealNoNxOffset], SwitchToRealProcStart - Flat32Start
mov qword [rcx + MP_ASSEMBLY_ADDRESS_MAP.SwitchToRealPM16ModeOffset], PM16Mode - RendezvousFunnelProcStart
mov qword [rcx + MP_ASSEMBLY_ADDRESS_MAP.SwitchToRealPM16ModeSize], SwitchToRealProcEnd - PM16Mode
--
2.36.1.windows.1
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH 2/4] Revert "UefiPayloadPkg: Add CpuPageTableLib required by MpInitLib."
2023-01-09 3:37 ` [PATCH 2/4] Revert "UefiPayloadPkg: Add CpuPageTableLib required by MpInitLib." Yuanhao Xie
@ 2023-01-09 3:48 ` Guo, Gua
0 siblings, 0 replies; 8+ messages in thread
From: Guo, Gua @ 2023-01-09 3:48 UTC (permalink / raw)
To: Xie, Yuanhao, devel@edk2.groups.io
Cc: Dong, Guo, Ni, Ray, Rhodes, Sean, Lu, James
Reviewed-by: Gua Guo <gua.guo@intel.com>
-----Original Message-----
From: Xie, Yuanhao <yuanhao.xie@intel.com>
Sent: Monday, January 9, 2023 11:37 AM
To: devel@edk2.groups.io
Cc: Dong, Guo <guo.dong@intel.com>; Ni, Ray <ray.ni@intel.com>; Rhodes, Sean <sean@starlabs.systems>; Lu, James <james.lu@intel.com>; Guo, Gua <gua.guo@intel.com>
Subject: [PATCH 2/4] Revert "UefiPayloadPkg: Add CpuPageTableLib required by MpInitLib."
This reverts commit 3f378450dfafc11754bfdb64af28060ec8466acb, since the commit 73ccde8 introduced CpuPageTableLib dependency which resolved for UefiPayloadPkg need to be reverted.
Ref: https://bugzilla.tianocore.org/show_bug.cgi?id=4234
Cc: Guo Dong <guo.dong@intel.com>
Cc: Ray Ni <ray.ni@intel.com>
Cc: Sean Rhodes <sean@starlabs.systems>
Cc: James Lu <james.lu@intel.com>
Cc: Gua Guo <gua.guo@intel.com>
Signed-off-by: Yuanhao Xie <yuanhao.xie@intel.com>
---
UefiPayloadPkg/UefiPayloadPkg.dsc | 1 -
1 file changed, 1 deletion(-)
diff --git a/UefiPayloadPkg/UefiPayloadPkg.dsc b/UefiPayloadPkg/UefiPayloadPkg.dsc
index a1a3c74290..2dbd875f37 100644
--- a/UefiPayloadPkg/UefiPayloadPkg.dsc
+++ b/UefiPayloadPkg/UefiPayloadPkg.dsc
@@ -340,7 +340,6 @@
DebugAgentLib|SourceLevelDebugPkg/Library/DebugAgent/DxeDebugAgentLib.inf
!endif
CpuExceptionHandlerLib|UefiCpuPkg/Library/CpuExceptionHandlerLib/DxeCpuExceptionHandlerLib.inf
- CpuPageTableLib|UefiCpuPkg/Library/CpuPageTableLib/CpuPageTableLib.inf
MpInitLib|UefiCpuPkg/Library/MpInitLib/DxeMpInitLib.inf
!if $(PERFORMANCE_MEASUREMENT_ENABLE)
PerformanceLib|MdeModulePkg/Library/DxePerformanceLib/DxePerformanceLib.inf
--
2.36.1.windows.1
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [edk2-devel] [PATCH 0/4] Revert the series of the patches which put APs in
2023-01-09 3:37 [PATCH 0/4] Revert the series of the patches which put APs in Yuanhao Xie
` (3 preceding siblings ...)
2023-01-09 3:37 ` [PATCH 4/4] Revert "UefiCpuPkg: Duplicated AsmRelocateApLoop as AsmRelocateApLoopAmd" Yuanhao Xie
@ 2023-01-09 8:15 ` Laszlo Ersek
2023-01-09 17:54 ` Ard Biesheuvel
4 siblings, 1 reply; 8+ messages in thread
From: Laszlo Ersek @ 2023-01-09 8:15 UTC (permalink / raw)
To: devel, yuanhao.xie
On 1/9/23 04:37, Yuanhao Xie wrote:
> This series of original patches requiring revert, redo and further cleanup.
>
> 4GB limitation of memory allocation will be kept for the case APs
> still need to be transferred to 32-bit mode before handoff to the OS.
>
> Stack offset for AsmRelocateApLoopStart in 32-bit mode needs to be
> fixed up, as it is calculated taking into account the removed parameters.
>
> The allocation size of the stack should be updated as the variant of
> APs loop function is introduced.
>
> Keep the logic that removes the XP attribute.
>
> Since the commit 73ccde8f6d04 introduced CpuPageTableLib dependency which
> resolved for OvmfPkg and UefiPayloadPkg, it follows the revert order shown
> as below instead of the reverse order of original commits to ensure the tree
> buildable at every stage of the revert:
>
> 73ccde8f6d04 UefiCpuPkg: Has APs in 64 bit long-mode before booting to OS.
> 3f378450dfaf UefiPayloadPkg: Add CpuPageTableLib required by MpInitLib.
> 4a8642422460 OvmfPkg: Add CpuPageTableLib required by MpInitLib.
> 7bda8c648192 UefiCpuPkg: Duplicated AsmRelocateApLoop as AsmRelocateApLoopAmd
>
> Yuanhao Xie (4):
> Revert "UefiCpuPkg: Has APs in 64 bit long-mode before booting to OS."
> Revert "UefiPayloadPkg: Add CpuPageTableLib required by MpInitLib."
> Revert "OvmfPkg: Add CpuPageTableLib required by MpInitLib."
> Revert "UefiCpuPkg: Duplicated AsmRelocateApLoop as
> AsmRelocateApLoopAmd"
>
> OvmfPkg/AmdSev/AmdSevX64.dsc | 3 +-
> OvmfPkg/CloudHv/CloudHvX64.dsc | 1 -
> OvmfPkg/IntelTdx/IntelTdxX64.dsc | 4 +-
> OvmfPkg/Microvm/MicrovmX64.dsc | 3 +-
> OvmfPkg/OvmfPkgIa32X64.dsc | 1 -
> OvmfPkg/OvmfPkgX64.dsc | 2 -
> OvmfPkg/OvmfXen.dsc | 3 +-
> UefiCpuPkg/Library/MpInitLib/DxeMpInitLib.inf | 7 +-
> UefiCpuPkg/Library/MpInitLib/DxeMpLib.c | 128 +++++++------
> .../Library/MpInitLib/Ia32/CreatePageTable.c | 27 ---
> UefiCpuPkg/Library/MpInitLib/MpEqu.inc | 2 -
> UefiCpuPkg/Library/MpInitLib/MpLib.h | 46 +----
> UefiCpuPkg/Library/MpInitLib/X64/AmdSev.nasm | 169 -----------------
> .../Library/MpInitLib/X64/CreatePageTable.c | 75 --------
> UefiCpuPkg/Library/MpInitLib/X64/MpFuncs.nasm | 176 ++++++++++++++----
> UefiCpuPkg/UefiCpuPkg.dsc | 1 -
> UefiPayloadPkg/UefiPayloadPkg.dsc | 1 -
> 17 files changed, 220 insertions(+), 429 deletions(-)
> delete mode 100644 UefiCpuPkg/Library/MpInitLib/Ia32/CreatePageTable.c
> delete mode 100644 UefiCpuPkg/Library/MpInitLib/X64/CreatePageTable.c
>
Reviewed-by: Laszlo Ersek <lersek@redhat.com>
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [edk2-devel] [PATCH 0/4] Revert the series of the patches which put APs in
2023-01-09 8:15 ` [edk2-devel] [PATCH 0/4] Revert the series of the patches which put APs in Laszlo Ersek
@ 2023-01-09 17:54 ` Ard Biesheuvel
0 siblings, 0 replies; 8+ messages in thread
From: Ard Biesheuvel @ 2023-01-09 17:54 UTC (permalink / raw)
To: devel, lersek; +Cc: yuanhao.xie
On Mon, 9 Jan 2023 at 09:15, Laszlo Ersek <lersek@redhat.com> wrote:
>
> On 1/9/23 04:37, Yuanhao Xie wrote:
> > This series of original patches requiring revert, redo and further cleanup.
> >
> > 4GB limitation of memory allocation will be kept for the case APs
> > still need to be transferred to 32-bit mode before handoff to the OS.
> >
> > Stack offset for AsmRelocateApLoopStart in 32-bit mode needs to be
> > fixed up, as it is calculated taking into account the removed parameters.
> >
> > The allocation size of the stack should be updated as the variant of
> > APs loop function is introduced.
> >
> > Keep the logic that removes the XP attribute.
> >
> > Since the commit 73ccde8f6d04 introduced CpuPageTableLib dependency which
> > resolved for OvmfPkg and UefiPayloadPkg, it follows the revert order shown
> > as below instead of the reverse order of original commits to ensure the tree
> > buildable at every stage of the revert:
> >
> > 73ccde8f6d04 UefiCpuPkg: Has APs in 64 bit long-mode before booting to OS.
> > 3f378450dfaf UefiPayloadPkg: Add CpuPageTableLib required by MpInitLib.
> > 4a8642422460 OvmfPkg: Add CpuPageTableLib required by MpInitLib.
> > 7bda8c648192 UefiCpuPkg: Duplicated AsmRelocateApLoop as AsmRelocateApLoopAmd
> >
> > Yuanhao Xie (4):
> > Revert "UefiCpuPkg: Has APs in 64 bit long-mode before booting to OS."
> > Revert "UefiPayloadPkg: Add CpuPageTableLib required by MpInitLib."
> > Revert "OvmfPkg: Add CpuPageTableLib required by MpInitLib."
> > Revert "UefiCpuPkg: Duplicated AsmRelocateApLoop as
> > AsmRelocateApLoopAmd"
> >
> > OvmfPkg/AmdSev/AmdSevX64.dsc | 3 +-
> > OvmfPkg/CloudHv/CloudHvX64.dsc | 1 -
> > OvmfPkg/IntelTdx/IntelTdxX64.dsc | 4 +-
> > OvmfPkg/Microvm/MicrovmX64.dsc | 3 +-
> > OvmfPkg/OvmfPkgIa32X64.dsc | 1 -
> > OvmfPkg/OvmfPkgX64.dsc | 2 -
> > OvmfPkg/OvmfXen.dsc | 3 +-
> > UefiCpuPkg/Library/MpInitLib/DxeMpInitLib.inf | 7 +-
> > UefiCpuPkg/Library/MpInitLib/DxeMpLib.c | 128 +++++++------
> > .../Library/MpInitLib/Ia32/CreatePageTable.c | 27 ---
> > UefiCpuPkg/Library/MpInitLib/MpEqu.inc | 2 -
> > UefiCpuPkg/Library/MpInitLib/MpLib.h | 46 +----
> > UefiCpuPkg/Library/MpInitLib/X64/AmdSev.nasm | 169 -----------------
> > .../Library/MpInitLib/X64/CreatePageTable.c | 75 --------
> > UefiCpuPkg/Library/MpInitLib/X64/MpFuncs.nasm | 176 ++++++++++++++----
> > UefiCpuPkg/UefiCpuPkg.dsc | 1 -
> > UefiPayloadPkg/UefiPayloadPkg.dsc | 1 -
> > 17 files changed, 220 insertions(+), 429 deletions(-)
> > delete mode 100644 UefiCpuPkg/Library/MpInitLib/Ia32/CreatePageTable.c
> > delete mode 100644 UefiCpuPkg/Library/MpInitLib/X64/CreatePageTable.c
> >
>
> Reviewed-by: Laszlo Ersek <lersek@redhat.com>
>
Series merged as #3873
Thanks all,
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2023-01-09 17:54 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-01-09 3:37 [PATCH 0/4] Revert the series of the patches which put APs in Yuanhao Xie
2023-01-09 3:37 ` [PATCH 1/4] Revert "UefiCpuPkg: Has APs in 64 bit long-mode before booting to OS." Yuanhao Xie
2023-01-09 3:37 ` [PATCH 2/4] Revert "UefiPayloadPkg: Add CpuPageTableLib required by MpInitLib." Yuanhao Xie
2023-01-09 3:48 ` Guo, Gua
2023-01-09 3:37 ` [PATCH 3/4] Revert "OvmfPkg: " Yuanhao Xie
2023-01-09 3:37 ` [PATCH 4/4] Revert "UefiCpuPkg: Duplicated AsmRelocateApLoop as AsmRelocateApLoopAmd" Yuanhao Xie
2023-01-09 8:15 ` [edk2-devel] [PATCH 0/4] Revert the series of the patches which put APs in Laszlo Ersek
2023-01-09 17:54 ` Ard Biesheuvel
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox