Since MpHandOff HOBs are created by the PEI instance of MpInitLib, I am ok that the consumer (DXE instance) assumes the HOB instances are created in the order of ProcessorIndex.
Please update the patch accordingly with the change of GetMpHandOffHob() I commented to patch #1. Thanks, Ray > -----Original Message----- > From: Gerd Hoffmann <kra...@redhat.com> > Sent: Thursday, February 15, 2024 5:32 PM > To: devel@edk2.groups.io > Cc: Oliver Steffen <ostef...@redhat.com>; Ni, Ray <ray...@intel.com>; Laszlo > Ersek <ler...@redhat.com>; Kumar, Rahul R <rahul.r.ku...@intel.com>; > Gerd Hoffmann <kra...@redhat.com> > Subject: [PATCH 2/5] UefiCpuPkg/MpInitLib: Add support for multiple HOBs to > GetBspNumber() > > Remove the MpHandOff parameter. This is not useful in case multiple > HOBs are present in the system. The function will use GetMpHandOffHob() > to loop over all HOBs instead. > > Signed-off-by: Gerd Hoffmann <kra...@redhat.com> > --- > UefiCpuPkg/Library/MpInitLib/MpLib.c | 26 ++++++++++++++++---------- > 1 file changed, 16 insertions(+), 10 deletions(-) > > diff --git a/UefiCpuPkg/Library/MpInitLib/MpLib.c > b/UefiCpuPkg/Library/MpInitLib/MpLib.c > index e0a2366073a7..8e6cf50ed171 100644 > --- a/UefiCpuPkg/Library/MpInitLib/MpLib.c > +++ b/UefiCpuPkg/Library/MpInitLib/MpLib.c > @@ -1894,26 +1894,32 @@ CheckAllAPs ( > /** > This function Get BspNumber. > > - @param[in] MpHandOff Pointer to MpHandOff > @return BspNumber > **/ > UINT32 > GetBspNumber ( > - IN CONST MP_HAND_OFF *MpHandOff > + VOID > ) > { > - UINT32 ApicId; > - UINT32 BspNumber; > - UINT32 Index; > + UINT32 ApicId; > + UINT32 BspNumber; > + UINT32 Index; > + 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 = GetMpHandOffHob (0); > + MpHandOff != NULL; > + MpHandOff = GetMpHandOffHob (MpHandOff->ProcessorIndex + > MpHandOff->CpuCount)) > + { > + for (Index = 0; Index < MpHandOff->CpuCount; Index++) { > + if (MpHandOff->Info[Index].ApicId == ApicId) { > + BspNumber = MpHandOff->ProcessorIndex + Index; > + } > } > } > > @@ -1941,7 +1947,7 @@ SwitchApContext ( > UINTN Index; > UINT32 BspNumber; > > - BspNumber = GetBspNumber (MpHandOff); > + BspNumber = GetBspNumber (); > > for (Index = 0; Index < MpHandOff->CpuCount; Index++) { > if (Index != BspNumber) { > @@ -2191,7 +2197,7 @@ MpInitLibInitialize ( > } > > CpuMpData->CpuCount = MpHandOff->CpuCount; > - CpuMpData->BspNumber = GetBspNumber (MpHandOff); > + CpuMpData->BspNumber = GetBspNumber (); > CpuInfoInHob = (CPU_INFO_IN_HOB > *)(UINTN)CpuMpData->CpuInfoInHob; > for (Index = 0; Index < CpuMpData->CpuCount; Index++) { > InitializeSpinLock (&CpuMpData->CpuData[Index].ApLock); > -- > 2.43.1 -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#115577): https://edk2.groups.io/g/devel/message/115577 Mute This Topic: https://groups.io/mt/104369845/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-