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;
|
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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue