* [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
* 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
* [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: [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