Jiewen,
You are right!:)

* In the Pentium 4, Intel Xeon, and P6 family processors, when a processor that 
is designated as an
* application processor during an MP initialization sequence is waiting for a 
startup IPI (SIPI), it is in
* a mode where SMIs are masked. However if a SMI is received while an 
application processor is in
* the wait for SIPI mode, the SMI will be pended. The processor then responds 
on receipt of a SIPI by
* immediately servicing the pended SMI and going into SMM before handling the 
SIPI.

> -----Original Message-----
> From: Yao, Jiewen <jiewen....@intel.com>
> Sent: Thursday, June 9, 2022 4:53 PM
> To: Ni, Ray <ray...@intel.com>; devel@edk2.groups.io
> Cc: Kinney, Michael D <michael.d.kin...@intel.com>; Tom Lendacky 
> <thomas.lenda...@amd.com>
> Subject: RE: Why need to put AP in HLT/MWAIT in ExitBootServices callback
> 
> I remember a wait-for-SIPI CPU cannot response to SMI.
> 
> We do want to let AP response SMI to perform some action, because some SMM 
> code will rely on all APs in SMM.
> 
> Thank you
> Yao Jiewen
> 
> 
> > -----Original Message-----
> > From: Ni, Ray <ray...@intel.com>
> > Sent: Thursday, June 9, 2022 4:46 PM
> > To: devel@edk2.groups.io
> > Cc: Ni, Ray <ray...@intel.com>; Kinney, Michael D
> > <michael.d.kin...@intel.com>; Tom Lendacky <thomas.lenda...@amd.com>;
> > Yao, Jiewen <jiewen....@intel.com>
> > Subject: Why need to put AP in HLT/MWAIT in ExitBootServices callback
> >
> > All,
> > When I am reviewing today's MpInitLib code, I don't understand why below
> > complex logic is there to put AP in HLT or MWAIT on a ExitBootServices event
> > callback.
> > https://github.com/tianocore/edk2/blob/ff36b2550f94dc5fac838cf298ae5a23c
> > fddf204/UefiCpuPkg/Library/MpInitLib/DxeMpLib.c#L423
> > https://github.com/tianocore/edk2/blob/ff36b2550f94dc5fac838cf298ae5a23c
> > fddf204/UefiCpuPkg/Library/MpInitLib/X64/MpFuncs.nasm#L424
> >
> > The above code is to put AP in a state that when it's woken up by 
> > interrupts or
> > SMIs, it's executing code and using stack in reserved memory.
> > (not in BootServices memory which might be overwritten by OS.)
> >
> > But according to the SDM content below, we can simply send a INIT IPI to 
> > all APs
> > to let AP enter a wait-for-SIPI state.
> > Then a simple SendInitIpiAllExcludingSelf() from BSP can replace all the
> > complicated code above.
> >
> > * The MP protocol will be executed only after a power-up or RESET. If the MP
> > protocol has been completed and a
> > * BSP has been chosen, subsequent INITs (either to a specific processor or
> > system wide) do not cause the MP
> > * protocol to be repeated. Instead, each processor examines its BSP flag 
> > (in the
> > APIC_BASE MSR) to determine
> > * whether it should execute the BIOS boot-strap code (if it is the BSP) or 
> > enter a
> > wait-for-SIPI state (if it is an
> > * AP).
> >
> > Did I miss something here?
> >
> > Thanks,
> > Ray


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#90386): https://edk2.groups.io/g/devel/message/90386
Mute This Topic: https://groups.io/mt/91641523/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-


Reply via email to