From b48523046283e8ef670b5d2b9f53de6855f7d3bf Mon Sep 17 00:00:00 2001 From: Gerd Hoffmann Date: Thu, 22 Feb 2024 17:01:02 +0100 Subject: UefiCpuPkg/MpInitLib: Add support for multiple HOBs to GetBspNumber() Rename the MpHandOff parameter to FirstMpHandOff. Add a loop so the function inspects all HOBs present in the system. Signed-off-by: Gerd Hoffmann Reviewed-by: Ray Ni Reviewed-by: Laszlo Ersek Message-Id: <20240222160106.686484-3-kraxel@redhat.com> --- UefiCpuPkg/Library/MpInitLib/MpLib.c | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/UefiCpuPkg/Library/MpInitLib/MpLib.c b/UefiCpuPkg/Library/MpInitLib/MpLib.c index 16fc7dc066..76449f73f4 100644 --- a/UefiCpuPkg/Library/MpInitLib/MpLib.c +++ b/UefiCpuPkg/Library/MpInitLib/MpLib.c @@ -1894,26 +1894,33 @@ CheckAllAPs ( /** This function Get BspNumber. - @param[in] MpHandOff Pointer to MpHandOff + @param[in] FirstMpHandOff Pointer to first MpHandOff HOB body. @return BspNumber **/ UINT32 GetBspNumber ( - IN CONST MP_HAND_OFF *MpHandOff + IN CONST MP_HAND_OFF *FirstMpHandOff ) { - UINT32 ApicId; - UINT32 BspNumber; - UINT32 Index; + UINT32 ApicId; + UINT32 BspNumber; + UINT32 Index; + CONST MP_HAND_OFF *MpHandOff; // // Get the processor number for the BSP // BspNumber = MAX_UINT32; ApicId = GetInitialApicId (); - for (Index = 0; Index < MpHandOff->CpuCount; Index++) { - if (MpHandOff->Info[Index].ApicId == ApicId) { - BspNumber = Index; + + for (MpHandOff = FirstMpHandOff; + MpHandOff != NULL; + MpHandOff = GetNextMpHandOffHob (MpHandOff)) + { + for (Index = 0; Index < MpHandOff->CpuCount; Index++) { + if (MpHandOff->Info[Index].ApicId == ApicId) { + BspNumber = MpHandOff->ProcessorIndex + Index; + } } } -- cgit v1.2.3