On 04/30/20 23:12, Tom Lendacky wrote:
> On 4/30/20 1:58 PM, Laszlo Ersek wrote:
>> Hi Tom,
> 
> Hi Laszlo,
> 
>>
>> On 04/22/20 19:41, Lendacky, Thomas wrote:
>>> BZ:
>>> https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Fbugzilla.tianocore.org%2Fshow_bug.cgi%3Fid%3D2198&data=02%7C01%7Cthomas.lendacky%40amd.com%7Cce256f35aa2e4748e8e008d7ed3874ae%7C3dd8961fe4884e608e11a82d994e183d%7C0%7C0%7C637238699042461059&sdata=tXX8nkBo3fB4OVTs2avevW8pwL6AcqJHvFhvlshKySI%3D&reserved=0
>>>
>>>
>>> Reserve a fixed area of memory for SEV-ES use and set a fixed PCD,
>>> PcdSevEsWorkAreaBase, to this value.
>>>
>>> This area will be used by SEV-ES support for two purposes:
>>>    1. Communicating the SEV-ES status during BSP boot to SEC:
>>>       Using a byte of memory from the page, the BSP reset vector code
>>> can
>>>       communicate the SEV-ES status to SEC for use before exception
>>>       handling can be enabled in SEC. After SEC, this field is no longer
>>>       valid and the standard way of determine if SEV-ES is active should
>>>       be used.
>>>
>>>    2. Establishing an area of memory for AP boot support:
>>>       A hypervisor is not allowed to update an SEV-ES guest's register
>>>       state, so when booting an SEV-ES guest AP, the hypervisor is not
>>>       allowed to set the RIP to the guest requested value. Instead an
>>>       SEV-ES AP must be re-directed from within the guest to the actual
>>>       requested staring location as specified in the INIT-SIPI-SIPI
>>>       sequence.
>>>
>>>       Use this memory for reset vector code that can be programmed to
>>> have
>>>       the AP jump to the desired RIP location after starting the AP.
>>> This
>>>       is required for only the very first AP reset.
>>>
>>> Cc: Jordan Justen <jordan.l.jus...@intel.com>
>>> Cc: Laszlo Ersek <ler...@redhat.com>
>>> Cc: Ard Biesheuvel <ard.biesheu...@linaro.org>
>>> Reviewed-by: Laszlo Ersek <ler...@redhat.com>
>>> Signed-off-by: Tom Lendacky <thomas.lenda...@amd.com>
>>> ---
>>>   OvmfPkg/OvmfPkgX64.fdf | 3 +++
>>>   1 file changed, 3 insertions(+)
>>>
>>> diff --git a/OvmfPkg/OvmfPkgX64.fdf b/OvmfPkg/OvmfPkgX64.fdf
>>> index 36414c1f8b49..a0bea86f9875 100644
>>> --- a/OvmfPkg/OvmfPkgX64.fdf
>>> +++ b/OvmfPkg/OvmfPkgX64.fdf
>>> @@ -82,6 +82,9 @@ [FD.MEMFD]
>>>   0x009000|0x002000
>>>  
>>> gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecGhcbBase|gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecGhcbSize
>>>
>>>   +0x00B000|0x001000
>>> +gUefiCpuPkgTokenSpaceGuid.PcdSevEsWorkAreaBase|gUefiCpuPkgTokenSpaceGuid.PcdSevEsWorkAreaSize
>>>
>>> +
>>>   0x010000|0x010000
>>>  
>>> gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecPeiTempRamBase|gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecPeiTempRamSize
>>>
>>>  
>>
>> in patch #28 ("OvmfPkg: Create a GHCB page for use during Sec phase"),
>> we carve out two ranges in FD.MEMFD, and introduce a matching set of 4
>> PCDs.
>>
>> Then in patch #29 ("OvmfPkg/PlatformPei: Reserve GHCB-related areas if
>> S3 is supported"), we reserve those ranges from the OS, as AcpiNVS, if
>> S3 is supported. The reason we only reserve those ranges if S3 is
>> enabled because the ranges are only needed in SEC. (See the details in
>> the commit mesage of patch #29.)
>>
>> In this patch (patch #33), we carve out a third region in FD.MEMFD. We
>> don't seem to ever reserve it. I think that's minimally a problem for
>> S3; the same argument should apply as to the other two areas. Do you
>> agree?
> 
> Nice catch! Yes, I missed this one.
> 
>>
>>
>> Furthermore, I wonder if we should reserve this "work area" from the OS,
>> and even from the DXE phase (!), *regardless* of S3. I can't immediately
>> tell when it's the last time (with S3 disabled) when this area is used.
>>
>> As I understand it, it is only used the first time the APs are booted
>> up. And that should happen still in the PEI phase, because CpuMpPei
>> boots up all the APs and counts them. Afterwards (still in the PEI
>> phase), the APs should be sleeping in ApWakeupFunction(), namely in the
>> code added by patch #40 ("UefiCpuPkg: Allow AP booting under SEV-ES").
>> If the AP is woken again, it is actually only "released" by the
>> hypervisor, and it goes through the special 64bit->16bit transition,
>> again implemented in patch#40.
>>
>> So ultimately it shouldn't be necessary to reserve this third region (at
>> PcdSevEsWorkAreaBase), if S3 is disabled, because it is never used past
>> the very first AP boot (which happens when CpuMpPei counts the APs).
>>
>> Do I understand right?
> 
> Yes, that is correct. So I just need to do the same thing for this area
> that I did in patch #29.
> 
> I can probably shift patch #29 after #33 and have one patch for the S3
> reservation instead of having two separate patches doing S3 reservation.

Sounds good, thanks!
Laszlo


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.

View/Reply Online (#58636): https://edk2.groups.io/g/devel/message/58636
Mute This Topic: https://groups.io/mt/73201943/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub  [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to