mirror of https://github.com/acidanthera/audk.git
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:
parent
7230212a43
commit
bafa76ef5b
|
@ -330,6 +330,7 @@ SortApicId (
|
|||
CPU_INFO_IN_HOB CpuInfo;
|
||||
UINT32 ApCount;
|
||||
CPU_INFO_IN_HOB *CpuInfoInHob;
|
||||
volatile UINT32 *StartupApSignal;
|
||||
|
||||
ApCount = CpuMpData->CpuCount - 1;
|
||||
CpuInfoInHob = (CPU_INFO_IN_HOB *) (UINTN) CpuMpData->CpuInfoInHob;
|
||||
|
@ -354,6 +355,14 @@ SortApicId (
|
|||
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;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue