On 10/2/19 7:30 AM, Laszlo Ersek via Groups.Io wrote:
> On 10/02/19 14:24, Laszlo Ersek wrote:
>> On 09/19/19 21:52, Lendacky, Thomas wrote:
>>> From: Tom Lendacky <thomas.lenda...@amd.com>
>>>
>>> BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=2198
>>>
>>> The SEC phase of OVMF will need access to the MemEncryptSevLib library,
>>> so make the library available during SEC.
>>>
>>> Cc: Jordan Justen <jordan.l.jus...@intel.com>
>>> Cc: Laszlo Ersek <ler...@redhat.com>
>>> Cc: Ard Biesheuvel <ard.biesheu...@linaro.org>
>>> Signed-off-by: Tom Lendacky <thomas.lenda...@amd.com>
>>> ---
>>>  OvmfPkg/Library/BaseMemEncryptSevLib/BaseMemEncryptSevLib.inf | 2 +-
>>>  1 file changed, 1 insertion(+), 1 deletion(-)
>>>
>>> diff --git a/OvmfPkg/Library/BaseMemEncryptSevLib/BaseMemEncryptSevLib.inf 
>>> b/OvmfPkg/Library/BaseMemEncryptSevLib/BaseMemEncryptSevLib.inf
>>> index 7c44d0952815..755d49cc22dc 100644
>>> --- a/OvmfPkg/Library/BaseMemEncryptSevLib/BaseMemEncryptSevLib.inf
>>> +++ b/OvmfPkg/Library/BaseMemEncryptSevLib/BaseMemEncryptSevLib.inf
>>> @@ -14,7 +14,7 @@ [Defines]
>>>    FILE_GUID                      = c1594631-3888-4be4-949f-9c630dbc842b
>>>    MODULE_TYPE                    = BASE
>>>    VERSION_STRING                 = 1.0
>>> -  LIBRARY_CLASS                  = MemEncryptSevLib|PEIM DXE_DRIVER 
>>> DXE_RUNTIME_DRIVER DXE_SMM_DRIVER UEFI_DRIVER
>>> +  LIBRARY_CLASS                  = MemEncryptSevLib|SEC PEIM DXE_DRIVER 
>>> DXE_RUNTIME_DRIVER DXE_SMM_DRIVER UEFI_DRIVER
>>>  
>>>  #
>>>  # The following information is for reference only and not required by the 
>>> build
>>>
>>
>> This is not a good idea, at least in this form.
>>
>> This library instance uses multiple variables with static storage
>> duration, such as:
>> - mSevStatus
>> - mSevEsStatus
>> - mSevStatusChecked
>> - mAddressEncMaskChecked [X64]
>> - mAddressEncMask [X64]
>> - mPageTablePool [X64]
>>
>> SEC runs from pflash, so such variables are read-only (writes to them
>> won't trap, but will have no effect).
>>
>> What are the functions from "OvmfPkg/Include/Library/MemEncryptSevLib.h"
>> that you need in the SEC phase?
>>
>> Because, maybe we should split the library class in two classes. One lib
>> class would declare (for example):
>> - MemEncryptSevEsIsEnabled
>> - MemEncryptSevIsEnabled
>>
>> The other lib class would declare:
>> - MemEncryptSevClearPageEncMask
>> - MemEncryptSevSetPageEncMask
>> - MemEncryptSevLocateInitialSmramSaveStateMapPages
>>
>> The first lib class could have two instances, one for SEC (using no
>> global variables for caching / speeding up the checks), and another
>> instance for PEI and later (with the global variables used for caching
>> the detection results).
>>
>> The second lib class would have only one instance (the current one), and
>> it would not be usable in the SEC phase. (The main issue is that, for
>> manipulating PTEs, MemEncryptSevSetPageEncMask and
>> MemEncryptSevClearPageEncMask sometimes need to split page tables, and
>> for that, they need to allocate pages dynamically. We can't do that in SEC.)
>>
>> The [LibraryClasses] sections of some INF files that currently list
>> "MemEncryptSevLib" may have to be updated, corresponding to the split.
>>
>> Again, all of this depends on the exact subset of APIs you need in SEC.
>> If it's just one API, e.g. MemEncryptSevEsIsEnabled(), needed in just
>> one place in SEC, then it might not necessarily be tragic to simply
>> open-code (duplicate) the CPUID logic in SEC.
> 
> Ah right, so if it's just for patch#18 ("OvmfPkg/Sec: Enable cache early
> to speed up booting"), then I'd definitely opt for open-coding the two
> AsmCpuid(), plus one AsmReadMsr32(), calls, in SecCoreStartupWithStack().

Yup, it was just for the cache checking.  I'll do the open-coding.

Thanks,
Tom

> 
> Later on, *if* we decide to call AsmEnableCache() in
> SecCoreStartupWithStack() unconditionally -- and that's a big "if" --,
> then it's going to be easier to remove those CPUID+MSR checks, than to
> undo the MemEncryptSevLib class split as well.
> 
> Thanks
> Laszlo
> 
> 
> 

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

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

Reply via email to