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

Reply via email to