While debugging an issue on NT32, I ran into an issue where PEIMs executing 
after permanent memory is installed continue to access temporary memory. After 
some debugging, the root cause is the 
MdePkg/Library/PeiServicesTablePointerLib, which simply tries to store the PEI 
SERVICES table pointer in a global variable. But this global variable is not 
shared by all PEIMs. So when the PEI Core updates the PEI Services table 
pointer, after permanent memory is installed, the other drivers are not 
updated. Instead they still point to the old PEI Services table pointer.

As evidence of this, in NT32's SecMain.c, there is the following code commented 
out (which is supposed to simulate the invalidated Temp RAM). If enabled, the 
code will hang at the first attempt to call a PEI Service. In most cases, this 
is one of the DEBUG() macro calls that end up calling the ReportStatusCode 
dispatch, which tries to get the HOB list.

  //
  // Simulate to invalid temporary memory, terminate temporary memory
  //
  //ZeroMem ((VOID*)(UINTN)TemporaryMemoryBase, CopySize);


Obviously PeiServicestablePointerLib is designed to work when there is really 
RAM available (as with NT32 or a system with RAM from the start). But, because 
it does not use a true global storage location, it violates one of the key 
design constraints for PEI: it must be global for everyone. That is why the IDT 
was chosen on x86.

My initial thought was to try to signal on Permanent Memory Installed to update 
the PEI Services pointer, since the NOTIFY function is passed the PEI Services 
table pointer from the PEI Core. Thoughts?

Thanks,

Tim
------------------------------------------------------------------------------
Get 100% visibility into Java/.NET code with AppDynamics Lite!
It's a free troubleshooting tool designed for production.
Get down to code-level detail for bottlenecks, with <2% overhead. 
Download for free and get started troubleshooting in minutes. 
http://pubads.g.doubleclick.net/gampad/clk?id=48897031&iu=/4140/ostg.clktrk
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/edk2-devel

Reply via email to