On Sun, 2014-11-16 at 20:11 -0800, Jordan Justen wrote: > On 2014-11-16 20:04:37, Jordan Justen wrote: > > Reviewed-by: Jordan Justen <[email protected]> > > Oh, I did have one feedback, that probably can be fixed when > committed. For the subject, how about: > > UefiCpuPkg/CpuDxe: Put APs in wait for SIPI state at ExitBootServices Looks good to me.
Thanks, Chen > > -Jordan > > > On 2014-11-16 18:18:39, Chen Fan wrote: > > > when gBS->ExitBootServices() is called, the APs should avoid > > > to access the unsafed buff datas which were allocated by boot services. > > > > > > Contributed-under: TianoCore Contribution Agreement 1.0 > > > Signed-off-by: Chen Fan <[email protected]> > > > Tested-by: Gabriel Somlo <[email protected]> > > > --- > > > UefiCpuPkg/CpuDxe/CpuDxe.c | 33 +++++++++++++++++++++++++++++++++ > > > 1 file changed, 33 insertions(+) > > > > > > diff --git a/UefiCpuPkg/CpuDxe/CpuDxe.c b/UefiCpuPkg/CpuDxe/CpuDxe.c > > > index c9df4e1..7303e85 100644 > > > --- a/UefiCpuPkg/CpuDxe/CpuDxe.c > > > +++ b/UefiCpuPkg/CpuDxe/CpuDxe.c > > > @@ -24,6 +24,8 @@ BOOLEAN mIsFlushingGCD; > > > UINT64 mValidMtrrAddressMask = > > > MTRR_LIB_CACHE_VALID_ADDRESS; > > > UINT64 mValidMtrrBitsMask = > > > MTRR_LIB_MSR_VALID_MASK; > > > > > > +EFI_EVENT mExitBootServicesEvent = (EFI_EVENT)NULL; > > > + > > > FIXED_MTRR mFixedMtrrTable[] = { > > > { > > > MTRR_LIB_IA32_MTRR_FIX64K_00000, > > > @@ -826,6 +828,28 @@ IdleLoopEventCallback ( > > > CpuSleep (); > > > } > > > > > > +/** > > > + Callback function for ExitBootServices. > > > + > > > + @param Event Event whose notification function is > > > being invoked. > > > + @param Context The pointer to the notification > > > function's context, > > > + which is implementation-dependent. > > > + > > > +**/ > > > +VOID > > > +EFIAPI > > > +ExitBootServicesCallback ( > > > + IN EFI_EVENT Event, > > > + IN VOID *Context > > > + ) > > > +{ > > > + // > > > + // Avoid APs access invalid buff datas which allocated by Boot > > > Services, > > > + // so we send INIT IPI to APs to let them wait for SIPI state. > > > + // > > > + SendInitIpiAllExcludingSelf (); > > > +} > > > + > > > > > > /** > > > Initialize the state information for the CPU Architectural Protocol. > > > @@ -900,6 +924,15 @@ InitializeCpu ( > > > > > > InitializeMpSupport (); > > > > > > + Status = gBS->CreateEvent ( > > > + EVT_SIGNAL_EXIT_BOOT_SERVICES, > > > + TPL_CALLBACK, > > > + ExitBootServicesCallback, > > > + NULL, > > > + &mExitBootServicesEvent > > > + ); > > > + ASSERT_EFI_ERROR (Status); > > > + > > > return Status; > > > } > > > > > > -- > > > 1.9.3 > > > ------------------------------------------------------------------------------ Download BIRT iHub F-Type - The Free Enterprise-Grade BIRT Server from Actuate! Instantly Supercharge Your Business Reports and Dashboards with Interactivity, Sharing, Native Excel Exports, App Integration & more Get technology previously reserved for billion-dollar corporations, FREE http://pubads.g.doubleclick.net/gampad/clk?id=157005751&iu=/4140/ostg.clktrk _______________________________________________ edk2-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/edk2-devel
