> On Jul 6, 2016, at 1:02 PM, Laszlo Ersek <[email protected]> wrote:
> 
> On 07/06/16 21:01, Kinney, Michael D wrote:
>> Laszlo,
>> 
>> Yes.  It is possible to use CPU MP PPI on S3 resume.
>> 
>> Jeff and I have been working on some proposed changes to the 
>> CPU DXE and CPU PEIM modules to share the MP source code in an 
>> MP library and eliminate the code duplication between the current
>> DXE driver and PEIM.
> 
> Sounds great!
> 
>> We will review the issue you are 
>> experiencing in the current implementation under OVMF and will 
>> make sure OVMF works for normal and S3 resume boot paths.
> 
> Thank you!
> 
>> In general, we prefer to not use permanent memory allocations
>> for the AP wake vectors.  If possible, we prefer to temporarily
>> "borrow" a page a memory below 1MB for the Startup IPI.
> 
> The backup buffer needs to be allocated in AcpiNVS memory though, does
> it not? (Wherever the borrowed page is stashed temporarily should be
> reserved from the OS.) So maybe the startup buffer could be placed in
> AcpiNVS immediately.
> 
> (Admittedly, these approaches might differ in how many pages need to be
> multiplied by NumProcessors -- I don't know.)
> 

Laszlo,

On S3 all the PEI memory is in AcpiNVS so a normal allocation should work? 
EFI_PEI_SERVICES.AllocatePages(), EFI_PEI_SERVICES.AllocatePool(), and not to 
mention the stack.

Thanks,

Andrew Fish

> I'll stay tuned. :)
> 
> Thanks!
> Laszlo
> 
> 
>> 
>> Best regards,
>> 
>> Mike
>> 
>>> -----Original Message-----
>>> From: Laszlo Ersek [mailto:[email protected]]
>>> Sent: Wednesday, July 6, 2016 11:52 AM
>>> To: Fan, Jeff <[email protected]>; Kinney, Michael D 
>>> <[email protected]>;
>>> Justen, Jordan L <[email protected]>
>>> Cc: Paolo Bonzini <[email protected]>; edk2-devel-01 
>>> <[email protected]>
>>> Subject: Re: [edk2] multiprocessing in PEI?
>>> 
>>> On 07/06/16 19:08, Laszlo Ersek wrote:
>>>> Hi Jeff,
>>>> 
>>>> On 07/05/16 15:50, Fan, Jeff wrote:
>>>>> When CPU MP PPI installed, CPU MP PPI Services will be fully usable.
>>>> 
>>>> I included CpuMpPei in OVMF, and it works fine on the normal boot path.
>>>> (I haven't done anything special with it thus far, just built it into
>>>> the firmware, and it starts up fine.)
>>>> 
>>>> However, on the S3 resume path, it runs into an assertion failure: the
>>>> GetWakeupBuffer() function fails. That is actually expected, because at
>>>> that point the runtime OS being resumed owns all memory under 1MB.
>>>> 
>>>> On the S3 resume path, OVMF does install a tiny bit of permanent PEI
>>>> RAM: 32 KB in size (PcdS3AcpiReservedMemorySize), starting at 8288 KB
>>>> (PcdS3AcpiReservedMemoryBase). On the normal boot path, we reserve this
>>>> area as AcpiNVS type memory, so that the runtime OS stays out of it.
>>>> 
>>>> Is CpuMpPei meant to be used on the S3 resume path in general?
>>> 
>>> It looks like CpuMpPei expects memory resource descriptor HOBs to exist
>>> on the S3 resume path as well. Then it seems to lay the wakeup buffer
>>> over OS-owned memory under 1MB. But, it saves the original memory
>>> contents into a backup buffer allocated from permanent PEI RAM. And, at
>>> end-of-PEI, the memory contents are restored.
>>> 
>>> OVMF does not produce memory / IO / MMIO resource descriptors on the S3
>>> resume path. The assumption is that no PEIM will directly look for any
>>> such HOBs on the S3 path, only use the permament PEI RAM for memory
>>> allocation. Does this conflict with the PI spec?
>>> 
>>> I wonder if GetWakeupBuffer()'s scanning of EFI_RESOURCE_SYSTEM_MEMORY
>>> descriptor HOBs is a good idea. When it finds a location that is
>>> suitable as a wakeup buffer, it "claims" that area by building a memory
>>> allocation HOB that covers the area. I think that's fine; however, the
>>> scanning itself does not consider any other memory allocation HOBs that
>>> may have been carved out of system memory by other PEIMs, earlier.
>>> 
>>> I wonder if platforms would be better served by a (base, size) pair of
>>> PCDs. The platform could set these PCDs, and make sure that both the OS
>>> and other firmware modules (PEIMs and DXE drivers) stay out of this
>>> area. (For example, if S3 is not supported or enabled on the platform,
>>> then the platform could allocate this area as Boot Services Data.
>>> Otherwise, it would be AcpiNVS.) CpuMpPei could then remove the resource
>>> HOB scanning, and it would only need to validate if (a) the size PCD was
>>> big enough to contain the wakeup buffer, and (b) the base PCD was low
>>> enough to keep the wakeup buffer under 1MB, (c) any necessary
>>> alignments. Basically, ask the platform to preallocate the wakeup
>>> buffer. (The minimal suitable size can be found statically, by trial and
>>> error.) The backup buffer (in permanent PEI RAM) could also be dropped,
>>> decreasing footprint.
>>> 
>>> What do you think?
>>> 
>>> Thanks
>>> Laszlo
> 
> _______________________________________________
> edk2-devel mailing list
> [email protected]
> https://lists.01.org/mailman/listinfo/edk2-devel

_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to