UefiCpuPkg/MpInitLib: Make sure AP uses correct StartupApSignal

Every processor's StartupApSignal is initialized in
MpInitLibInitialize() before calling CollectProcessorCount().
When SortApicId() is called from CollectProcessorCount(), AP Index
is re-assigned by APIC ID. But SortApicId() forgets to set the
correct StartupApSignal when sorting the AP.

The patch fixes this issue.

Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Star Zeng <star.zeng@intel.com>
Signed-off-by: Ruiyu Ni <ruiyu.ni@intel.com>
Reviewed-by: Star Zeng <star.zeng@intel.com>
Cc: Chasel Chiu <chasel.chiu@intel.com>
This commit is contained in:
Star Zeng 2017-12-28 10:24:29 +08:00 committed by Ruiyu Ni
parent 7230212a43
commit bafa76ef5b
1 changed files with 9 additions and 0 deletions

View File

@ -330,6 +330,7 @@ SortApicId (
CPU_INFO_IN_HOB CpuInfo; CPU_INFO_IN_HOB CpuInfo;
UINT32 ApCount; UINT32 ApCount;
CPU_INFO_IN_HOB *CpuInfoInHob; CPU_INFO_IN_HOB *CpuInfoInHob;
volatile UINT32 *StartupApSignal;
ApCount = CpuMpData->CpuCount - 1; ApCount = CpuMpData->CpuCount - 1;
CpuInfoInHob = (CPU_INFO_IN_HOB *) (UINTN) CpuMpData->CpuInfoInHob; CpuInfoInHob = (CPU_INFO_IN_HOB *) (UINTN) CpuMpData->CpuInfoInHob;
@ -354,6 +355,14 @@ SortApicId (
sizeof (CPU_INFO_IN_HOB) sizeof (CPU_INFO_IN_HOB)
); );
CopyMem (&CpuInfoInHob[Index1], &CpuInfo, sizeof (CPU_INFO_IN_HOB)); CopyMem (&CpuInfoInHob[Index1], &CpuInfo, sizeof (CPU_INFO_IN_HOB));
//
// Also exchange the StartupApSignal.
//
StartupApSignal = CpuMpData->CpuData[Index3].StartupApSignal;
CpuMpData->CpuData[Index3].StartupApSignal =
CpuMpData->CpuData[Index1].StartupApSignal;
CpuMpData->CpuData[Index1].StartupApSignal = StartupApSignal;
} }
} }