UefiCpuPkg/PiSmmCpuDxeSmm: TransferApToSafeState() use UINTN params
Update TransferApToSafeState() use UINTN params to reduce the number of type casts required in these calls. Also change the NumberToFinish parameter from UINT32* to UINTN NumberToFinishAddress to resolve issues with conversion from a volatile pointer to a non-volatile pointer. The assembly code that receives the NumberToFinishAddress value must treat that memory location as a volatile to track the number of APs. Cc: Liming Gao <liming.gao@intel.com> Cc: Laszlo Ersek <lersek@redhat.com> Cc: Andrew Fish <afish@apple.com> Cc: Jeff Fan <jeff.fan@intel.com> Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Michael Kinney <michael.d.kinney@intel.com> Reviewed-by: Laszlo Ersek <lersek@redhat.com> Reviewed-by: Jeff Fan <jeff.fan@intel.com>
This commit is contained in:
@@ -385,7 +385,7 @@ MPRendezvousProcedure (
|
||||
CPU_REGISTER_TABLE *RegisterTableList;
|
||||
UINT32 InitApicId;
|
||||
UINTN Index;
|
||||
UINT32 TopOfStack;
|
||||
UINTN TopOfStack;
|
||||
UINT8 Stack[128];
|
||||
|
||||
ProgramVirtualWireMode ();
|
||||
@@ -403,10 +403,10 @@ MPRendezvousProcedure (
|
||||
//
|
||||
// Place AP into the safe code, count down the number with lock mechanism in the safe code.
|
||||
//
|
||||
TopOfStack = (UINT32) (UINTN) Stack + sizeof (Stack);
|
||||
TopOfStack &= ~(UINT32) (CPU_STACK_ALIGNMENT - 1);
|
||||
TopOfStack = (UINTN) Stack + sizeof (Stack);
|
||||
TopOfStack &= ~(UINTN) (CPU_STACK_ALIGNMENT - 1);
|
||||
CopyMem ((VOID *) (UINTN) mApHltLoopCode, mApHltLoopCodeTemplate, sizeof (mApHltLoopCodeTemplate));
|
||||
TransferApToSafeState ((UINT32) (UINTN) mApHltLoopCode, TopOfStack, &mNumberToFinish);
|
||||
TransferApToSafeState ((UINTN)mApHltLoopCode, TopOfStack, (UINTN)&mNumberToFinish);
|
||||
}
|
||||
|
||||
/**
|
||||
|
Reference in New Issue
Block a user