SwitchApContext() can cache the first instance of MpHandOffHob so that the second enumeration can avoid searching for the MpHandOffHob from the top of HOB list.
> VOID > SwitchApContext ( > - IN MP_HAND_OFF *MpHandOff > + VOID > ) > { > - UINTN Index; > - UINT32 BspNumber; > + UINTN Index; > + UINT32 BspNumber; > + MP_HAND_OFF *MpHandOff; > > BspNumber = GetBspNumber (); > > - for (Index = 0; Index < MpHandOff->CpuCount; Index++) { > - if (Index != BspNumber) { > - *(UINTN > *)(UINTN)MpHandOff->Info[Index].StartupProcedureAddress = > (UINTN)SwitchContextPerAp; > - *(UINT32 *)(UINTN)MpHandOff->Info[Index].StartupSignalAddress > = MpHandOff->StartupSignalValue; > + for (MpHandOff = GetMpHandOffHob (0); > + MpHandOff != NULL; > + MpHandOff = GetMpHandOffHob (MpHandOff->ProcessorIndex + > MpHandOff->CpuCount)) > + { > + for (Index = 0; Index < MpHandOff->CpuCount; Index++) { > + if (MpHandOff->ProcessorIndex + Index != BspNumber) { > + *(UINTN > *)(UINTN)MpHandOff->Info[Index].StartupProcedureAddress = > (UINTN)SwitchContextPerAp; > + *(UINT32 > *)(UINTN)MpHandOff->Info[Index].StartupSignalAddress = > MpHandOff->StartupSignalValue; > + } > } > } > > // > // Wait all APs waken up if this is not the 1st broadcast of SIPI > // > - for (Index = 0; Index < MpHandOff->CpuCount; Index++) { > - if (Index != BspNumber) { > - WaitApWakeup ((UINT32 > *)(UINTN)(MpHandOff->Info[Index].StartupSignalAddress)); > + for (MpHandOff = GetMpHandOffHob (0); > + MpHandOff != NULL; > + MpHandOff = GetMpHandOffHob (MpHandOff->ProcessorIndex + > MpHandOff->CpuCount)) > + { > + for (Index = 0; Index < MpHandOff->CpuCount; Index++) { > + if (MpHandOff->ProcessorIndex + Index != BspNumber) { > + WaitApWakeup ((UINT32 > *)(UINTN)(MpHandOff->Info[Index].StartupSignalAddress)); > + } > } > } > } > @@ -2226,7 +2235,7 @@ MpInitLibInitialize ( > // enables the APs to switch to a different memory section and > continue their > // looping process there. > // > - SwitchApContext (MpHandOff); > + SwitchApContext (); > // > // Wait for all APs finished initialization > // > -- > 2.43.1 -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#115578): https://edk2.groups.io/g/devel/message/115578 Mute This Topic: https://groups.io/mt/104369847/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-