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

-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