All APs use the same common stack to initialization. after initialization, APs should switch to the stack of its own.
Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Chen Fan <chen.fan.f...@cn.fujitsu.com> --- UefiCpuPkg/CpuDxe/CpuMp.c | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/UefiCpuPkg/CpuDxe/CpuMp.c b/UefiCpuPkg/CpuDxe/CpuMp.c index bfd0d8d..a87d67f 100644 --- a/UefiCpuPkg/CpuDxe/CpuMp.c +++ b/UefiCpuPkg/CpuDxe/CpuMp.c @@ -25,6 +25,28 @@ VOID *mApStackStart = 0; volatile UINTN mNumberOfProcessors; /** + Application Processors do loop routine + after switch to its own stack. + + @param Context1 A pointer to the context to pass into the function. + @param Context2 A pointer to the context to pass into the function. + +**/ +VOID +ProcessorToIdleState ( + IN VOID *Context1, OPTIONAL + IN VOID *Context2 OPTIONAL + ) +{ + DEBUG ((DEBUG_INFO, "Ap apicid is %d\n", GetApicId ())); + + AsmApDoneWithCommonStack (); + + CpuSleep (); + CpuDeadLoop (); +} + +/** Application Processor C code entry point. **/ @@ -35,6 +57,13 @@ ApEntryPointInC ( ) { mNumberOfProcessors++; + mApStackStart = (UINT8*)mApStackStart + gApStackSize; + + SwitchStack ( + (SWITCH_STACK_ENTRY_POINT)(UINTN)ProcessorToIdleState, + NULL, + NULL, + mApStackStart); } -- 1.9.3 ------------------------------------------------------------------------------ _______________________________________________ edk2-devel mailing list edk2-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/edk2-devel