On 06/16/20 20:59, Oleksiy Yakovlev wrote:
> Hi Laszlo.
> 
> There was separate patch for MdeModulePkg submitted with this one as well. I 
> did not include you into cc, because you are not in the maintainers list for 
> MdeModulePkg. Patch addresses EFI_MEMORY_(RO|RP|XP) macroses and all issues 
> you mentioned in your comment in same way as UefiCpuPkg patch (without 
> introducing single macros and using MEMORY_ATTRIBUTE_MASK instead of | ).

But MdeModulePkg and UefiCpuPkg still do not share a common macro or Fixed-PCD 
for the mask, correct?

I think they should. UefiCpuPkg is allowed to consume MdeModulePkg content. And 
both are allowed to consume MdePkg content.

--*--

*Even if* we're staying strictly within UefiCpuPkg, the following macros are 
duplicated:

- "UefiCpuPkg/CpuDxe/CpuDxe.h":

#define EFI_MEMORY_PAGETYPE_MASK      (EFI_MEMORY_RP  | \
                                       EFI_MEMORY_XP  | \
                                       EFI_MEMORY_RO    \
                                       )

- "UefiCpuPkg/CpuDxe/CpuDxe.c":

#define MEMORY_ATTRIBUTE_MASK  (EFI_MEMORY_RP | EFI_MEMORY_XP | EFI_MEMORY_RO)


They should be united, and the existent UefiCpuPkg code should adopt the new 
common macro ("CpuPageTable.c", "SmmCpuMemoryManagement.c").

Afterwards, the now-common macro should be extended with the new bits, in a 
separate patch.

Thanks
Laszlo



> 
> Regards, Oleksiy.
> 
> -----Original Message-----
> From: Laszlo Ersek [mailto:ler...@redhat.com] 
> Sent: Tuesday, June 16, 2020 2:12 PM
> To: Oleksiy Yakovlev; devel@edk2.groups.io
> Cc: eric.d...@intel.com; ray...@intel.com; rahul1.ku...@intel.com; Felix 
> Polyudov; Liming Gao; Michael Kinney; Jian J Wang; Hao A Wu; Dandan Bi
> Subject: Re: [PATCH] UefiCpuPkg: Add New Memory Attributes
> 
> Hi Oleksiy,
> 
> On 06/15/20 23:45, Oleksiy Yakovlev wrote:
>> Add usage of EFI_MEMORY_SP and EFI_MEMORY_CPU_CRYPTO
>> attributes introduced in UEFI 2.8
>> (UEFI 2.8, mantis 1919 and 1872)
>>
>> Signed-off-by: Oleksiy Yakovlev <oleks...@ami.com>
>> ---
>>  UefiCpuPkg/CpuDxe/CpuDxe.c                         | 2 +-
>>  UefiCpuPkg/CpuDxe/CpuDxe.h                         | 4 +++-
>>  UefiCpuPkg/CpuDxe/CpuPageTable.c                   | 2 +-
>>  UefiCpuPkg/PiSmmCpuDxeSmm/SmmCpuMemoryManagement.c | 2 +-
>>  4 files changed, 6 insertions(+), 4 deletions(-)
> 
> I suggest / request turning this patch into 5 patches:
> 
> 
> (a) The first patch should please correct a mistake in commit
> c18708d2f002 ("MdePkg-UefiSpec.h: Add UEFI 2.8 new memory attributes",
> 2019-11-04).
> 
> Namely, in commit c18708d2f002, the EFI_MEMORY_CPU_CRYPTO macro's
> documentation includes the string "CPU?s", twice, in place of "CPU's".
> 
> I don't understand how this happened. In the mailing list archive, I can
> only find Liming's confirmation that he pushed the patch:
> 
>   https://edk2.groups.io/g/devel/message/49893
> 
> but not the original patch posting.
> 
> Note that, in the context quoted in that message (that is, the patch),
> the string was "CPU’s". That string did not use ASCII character 0x27,
> but U+2019 (RIGHT SINGLE QUOTATION MARK). So indeed the patch was
> incorrect. But the solution should not have been to replace U+2019 with
> "?", but to request a repost using ASCII 0x27.
> 
> Either way, even though it is obviously not your mistake, can you please
> include a patch for replacing both "CPU?s" instances with "CPU's"? In
> file "MdePkg/Include/Uefi/UefiSpec.h".
> 
> 
> For the rest of the patches, please consider:
> 
> $ git grep -E 'EFI_MEMORY_(RO|RP|XP) \| EFI_MEMORY_(RO|RP|XP) \| 
> EFI_MEMORY_(RO|RP|XP)'
> 
> MdeModulePkg/Core/Dxe/Misc/MemoryProtection.c:#define MEMORY_ATTRIBUTE_MASK  
> (EFI_MEMORY_RP | EFI_MEMORY_XP | EFI_MEMORY_RO)
> MdeModulePkg/Core/PiSmmCore/PiSmmIpl.c:#define MEMORY_PAGE_ATTRIBUTES  
> (EFI_MEMORY_XP | EFI_MEMORY_RP | EFI_MEMORY_RO)
> UefiCpuPkg/CpuDxe/CpuDxe.c:#define MEMORY_ATTRIBUTE_MASK  (EFI_MEMORY_RP | 
> EFI_MEMORY_XP | EFI_MEMORY_RO)
> UefiCpuPkg/CpuDxe/CpuPageTable.c:  if ((Attributes & ~(EFI_MEMORY_RP | 
> EFI_MEMORY_RO | EFI_MEMORY_XP)) != 0) {
> UefiCpuPkg/CpuDxe/CpuPageTable.c:    Capabilities = EFI_MEMORY_RO | 
> EFI_MEMORY_RP | EFI_MEMORY_XP;
> UefiCpuPkg/PiSmmCpuDxeSmm/SmmCpuMemoryManagement.c:  ASSERT ((Attributes & 
> ~(EFI_MEMORY_RP | EFI_MEMORY_RO | EFI_MEMORY_XP)) == 0);
> 
> This output tells us the following:
> 
> - the bitmask (RP|XP|RO) is *triplicated* between the macro
>   definitions in:
> 
>   - MdeModulePkg/Core/Dxe/Misc/MemoryProtection.c
>   - MdeModulePkg/Core/PiSmmCore/PiSmmIpl.c
>   - UefiCpuPkg/CpuDxe/CpuDxe.c
> 
> - "UefiCpuPkg/CpuDxe/CpuPageTable.c" open-codes the bitmask in two
>   separate spots (rather than using MEMORY_ATTRIBUTE_MASK)
> 
> - "UefiCpuPkg/PiSmmCpuDxeSmm/SmmCpuMemoryManagement.c" open codes the
>   bitmask also (rather than using any macro).
> 
> (b) Therefore, the second patch should introduce a central macro for
> (RP|XP|RO) somewhere under MdePkg or MdeModulePkg. Perhaps it can even
> be a fixed-only PCD.
> 
> (c) The third patch should replace all of the open coded bitmasks in
> MdeModulePkg (see the list above) with references to the new central
> macro (or PCD).
> 
> (d) The fourth patch should do the same in UefiCpuPkg.
> 
> (e) The final patch should modify the central macro to include
> EFI_MEMORY_SP and EFI_MEMORY_CPU_CRYPTO.
> 
> This is just my opinion of course, please discuss it further with the
> MdePkg / MdeModulePkg / UefiCpuPkg maintainers (I've CC'd them).
> 
> Thanks,
> Laszlo
> 
> 
>>
>> diff --git a/UefiCpuPkg/CpuDxe/CpuDxe.c b/UefiCpuPkg/CpuDxe/CpuDxe.c
>> index a571fc3..55ca764 100644
>> --- a/UefiCpuPkg/CpuDxe/CpuDxe.c
>> +++ b/UefiCpuPkg/CpuDxe/CpuDxe.c
>> @@ -11,7 +11,7 @@
>>  #include "CpuPageTable.h"
>>
>>  #define CACHE_ATTRIBUTE_MASK   (EFI_MEMORY_UC | EFI_MEMORY_WC | 
>> EFI_MEMORY_WT | EFI_MEMORY_WB | EFI_MEMORY_UCE | EFI_MEMORY_WP)
>> -#define MEMORY_ATTRIBUTE_MASK  (EFI_MEMORY_RP | EFI_MEMORY_XP | 
>> EFI_MEMORY_RO)
>> +#define MEMORY_ATTRIBUTE_MASK  (EFI_MEMORY_RP | EFI_MEMORY_XP | 
>> EFI_MEMORY_RO | EFI_MEMORY_SP | EFI_MEMORY_CPU_CRYPTO)
>>
>>  //
>>  // Global Variables
>> diff --git a/UefiCpuPkg/CpuDxe/CpuDxe.h b/UefiCpuPkg/CpuDxe/CpuDxe.h
>> index 9299eaa..37fb38e 100644
>> --- a/UefiCpuPkg/CpuDxe/CpuDxe.h
>> +++ b/UefiCpuPkg/CpuDxe/CpuDxe.h
>> @@ -48,7 +48,9 @@
>>
>>  #define EFI_MEMORY_PAGETYPE_MASK      (EFI_MEMORY_RP  | \
>>                                         EFI_MEMORY_XP  | \
>> -                                       EFI_MEMORY_RO    \
>> +                                       EFI_MEMORY_RO  | \
>> +                                       EFI_MEMORY_SP  | \
>> +                                       EFI_MEMORY_CPU_CRYPTO \
>>                                         )
>>
>>  #define HEAP_GUARD_NONSTOP_MODE       \
>> diff --git a/UefiCpuPkg/CpuDxe/CpuPageTable.c 
>> b/UefiCpuPkg/CpuDxe/CpuPageTable.c
>> index 0a02cb3..d769e4a 100644
>> --- a/UefiCpuPkg/CpuDxe/CpuPageTable.c
>> +++ b/UefiCpuPkg/CpuDxe/CpuPageTable.c
>> @@ -717,7 +717,7 @@ ConvertMemoryPageAttributes (
>>      return RETURN_INVALID_PARAMETER;
>>    }
>>
>> -  if ((Attributes & ~(EFI_MEMORY_RP | EFI_MEMORY_RO | EFI_MEMORY_XP)) != 0) 
>> {
>> +  if ((Attributes & ~(EFI_MEMORY_RP | EFI_MEMORY_RO | EFI_MEMORY_XP | 
>> EFI_MEMORY_SP | EFI_MEMORY_CPU_CRYPTO)) != 0) {
>>      DEBUG ((DEBUG_ERROR, "Attributes(0x%lx) has unsupported bit\n", 
>> Attributes));
>>      return EFI_UNSUPPORTED;
>>    }
>> diff --git a/UefiCpuPkg/PiSmmCpuDxeSmm/SmmCpuMemoryManagement.c 
>> b/UefiCpuPkg/PiSmmCpuDxeSmm/SmmCpuMemoryManagement.c
>> index 9c5a92a..94adf37 100644
>> --- a/UefiCpuPkg/PiSmmCpuDxeSmm/SmmCpuMemoryManagement.c
>> +++ b/UefiCpuPkg/PiSmmCpuDxeSmm/SmmCpuMemoryManagement.c
>> @@ -435,7 +435,7 @@ ConvertMemoryPageAttributes (
>>    EFI_PHYSICAL_ADDRESS              MaximumSupportMemAddress;
>>
>>    ASSERT (Attributes != 0);
>> -  ASSERT ((Attributes & ~(EFI_MEMORY_RP | EFI_MEMORY_RO | EFI_MEMORY_XP)) 
>> == 0);
>> +  ASSERT ((Attributes & ~(EFI_MEMORY_RP | EFI_MEMORY_RO | EFI_MEMORY_XP | 
>> EFI_MEMORY_SP | EFI_MEMORY_CPU_CRYPTO)) == 0);
>>
>>    ASSERT ((BaseAddress & (SIZE_4KB - 1)) == 0);
>>    ASSERT ((Length & (SIZE_4KB - 1)) == 0);
>>
> 
> 
> Please consider the environment before printing this email.
> 
> The information contained in this message may be confidential and proprietary 
> to American Megatrends (AMI).  This communication is intended to be read only 
> by the individual or entity to whom it is addressed or by their designee. If 
> the reader of this message is not the intended recipient, you are on notice 
> that any distribution of this message, in any form, is strictly prohibited.  
> Please promptly notify the sender by reply e-mail or by telephone at 
> 770-246-8600, and then delete or destroy all copies of the transmission.
> 


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

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

Reply via email to