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>
(cherry picked from commit bafa76ef5b
)
This commit is contained in:
@@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user