> On Jul 6, 2016, at 1:27 PM, Laszlo Ersek <[email protected]> wrote:
> 
> On 07/06/16 22:07, Andrew Fish wrote:
>> 
>>> 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.
> 
> Yes, that is right. This is precisely the argument that we make in
> OVMF's PlatformPei, when we install the permanent PEI RAM -- which on
> the normal boot path was reserved as AcpiNVS -- and don't produce any
> resource descriptor HOBs.
> 
> However, for the purposes of CpuMpPei, PEI's pool and page allocation
> services, and the stack, are not appropriate. CpuMpPei needs a memory
> allocation strictly below 1MB (so that the APs can be started up in real
> mode). The PEI page allocation service (unlike the similar UEFI boot
> service) doesn't seem to offer an "allocate under maximum address"
> allocation mode. (Even if it did, the permanent PEI RAM that we install
> in OVMF on the S3 resume path is entirely over 1MB.)
> 
> So what CpuMpPei does at the moment is: it scans the memory resource
> descriptor HOBs for system memory, and when it finds a suitable one (one
> that has enough size under 1MB), it places the buffer there. It stashes
> the data that is originally there into a backup buffer that *is* in
> permanent PEI RAM (allocated with the PEI serives), and then uses the
> low buffer for starting up the APs.
> 
> The immediate problem is that OVMF's Platform PEIM does not produce any
> resource descriptor HOBs at S3 resume, so the scanning / filtering comes
> up empty in CpuMpPei. The above method could work nicely, if:
> 
> - OVMF could somehow tell CpuMpPei to forego the scan, and use a fixed
> low address instead, for the "borrow page", and
> - we could ensure that the permanent PEI RAM that OVMF installs at S3
> resume is big enough for CpuMpPei's needs (= the backup buffer, and
> everything else I don't know about yet).
> 
> In a nutshell -- and I'm sorry about the wall of text -- the PEI
> allocation services are not used because they can't guarantee memory
> under 1MB, which is needed for AP startup on x86.
> 

Laszlo,

Sorry to confuse you I was talking about the temp buffer that is used to 
restore the contents of memory under 1 MB. 

Thanks,

Andrew Fish

> Thanks
> Laszlo

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

Reply via email to