> On Mar 25, 2021, at 3:54 AM, Brijesh Singh <brijesh.si...@amd.com> wrote: > > On 3/24/21 9:49 PM, gaoliming wrote: >> Is this API X64 only? Or IA32 and X64 both? > > > Theoretically the instruction is available on both IA32 and X64 but its > used only in X64. AMD SEV, SEV-ES and SEV-SNP support is available for > X64 arch only. I was not sure if the EDK2 community is okay with the > dead-code. Do you think it still makes sense to add the IA32 API for it ? >
If this is only implemented for MDE_CPU_X64 should it be only defined in BaseLIib.h for MDE_CPU_X64? vs. "#endif // defined (MDE_CPU_IA32) || defined (MDE_CPU_X64)”? I think today we may only have types in MDE_CPU_X64 only and all the lib functions are in "#if defined (MDE_CPU_IA32) || defined (MDE_CPU_X64)”. So we should think about adding an IA32 function implementation or not defining the function to exist for MDE_CPU_IA32 in BaseLib.h? What do other people think? Thanks, Andrew Fish > >> >> Thanks >> Liming >>> -----邮件原件----- >>> 发件人: devel@edk2.groups.io <devel@edk2.groups.io> 代表 Brijesh Singh >>> 发送时间: 2021年3月24日 23:32 >>> 收件人: devel@edk2.groups.io >>> 抄送: Brijesh Singh <brijesh.si...@amd.com>; James Bottomley >>> <j...@linux.ibm.com>; Min Xu <min.m...@intel.com>; Jiewen Yao >>> <jiewen....@intel.com>; Tom Lendacky <thomas.lenda...@amd.com>; >>> Jordan Justen <jordan.l.jus...@intel.com>; Ard Biesheuvel >>> <ardb+tianoc...@kernel.org>; Laszlo Ersek <ler...@redhat.com> >>> 主题: [edk2-devel] [RFC PATCH 09/19] MdePkg: Add AsmPvalidate() support >>> >>> BZ: >>> https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Fbugzilla.tianocore.org%2Fshow_bug.cgi%3Fid%3D3275&data=04%7C01%7Cbrijesh.singh%40amd.com%7C125d11ea64cf4f4ecd2108d8ef38a8e7%7C3dd8961fe4884e608e11a82d994e183d%7C0%7C0%7C637522373939810930%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=f3fM%2Fnw3X1lHhf7SPKTxDOLo0GcnU465yvyf0IIyD80%3D&reserved=0 >>> >>> <https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Fbugzilla.tianocore.org%2Fshow_bug.cgi%3Fid%3D3275&data=04%7C01%7Cbrijesh.singh%40amd.com%7C125d11ea64cf4f4ecd2108d8ef38a8e7%7C3dd8961fe4884e608e11a82d994e183d%7C0%7C0%7C637522373939810930%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=f3fM%2Fnw3X1lHhf7SPKTxDOLo0GcnU465yvyf0IIyD80%3D&reserved=0> >>> >>> The PVALIDATE instruction validates or rescinds validation of a guest >>> page RMP entry. Upon completion, a return code is stored in EAX, rFLAGS >>> bits OF, ZF, AF, PF and SF are set based on this return code. If the >>> instruction completed succesfully, the rFLAGS bit CF indicates if the >>> contents of the RMP entry were changed or not. >>> >>> For more information about the instruction see AMD APM volume 3. >>> >>> Cc: James Bottomley <j...@linux.ibm.com <mailto:j...@linux.ibm.com>> >>> Cc: Min Xu <min.m...@intel.com <mailto:min.m...@intel.com>> >>> Cc: Jiewen Yao <jiewen....@intel.com <mailto:jiewen....@intel.com>> >>> Cc: Tom Lendacky <thomas.lenda...@amd.com <mailto:thomas.lenda...@amd.com>> >>> Cc: Jordan Justen <jordan.l.jus...@intel.com >>> <mailto:jordan.l.jus...@intel.com>> >>> Cc: Ard Biesheuvel <ardb+tianoc...@kernel.org >>> <mailto:ardb+tianoc...@kernel.org>> >>> Cc: Laszlo Ersek <ler...@redhat.com <mailto:ler...@redhat.com>> >>> Signed-off-by: Brijesh Singh <brijesh.si...@amd.com >>> <mailto:brijesh.si...@amd.com>> >>> --- >>> MdePkg/Include/Library/BaseLib.h | 37 +++++++++++++++++ >>> MdePkg/Library/BaseLib/BaseLib.inf | 1 + >>> MdePkg/Library/BaseLib/X64/Pvalidate.nasm | 43 ++++++++++++++++++++ >>> 3 files changed, 81 insertions(+) >>> >>> diff --git a/MdePkg/Include/Library/BaseLib.h >>> b/MdePkg/Include/Library/BaseLib.h >>> index 1171a0ffb5..fee27e9a1b 100644 >>> --- a/MdePkg/Include/Library/BaseLib.h >>> +++ b/MdePkg/Include/Library/BaseLib.h >>> @@ -7495,5 +7495,42 @@ PatchInstructionX86 ( >>> IN UINTN ValueSize >>> ); >>> >>> +/** >>> + Execute a PVALIDATE instruction to validate or rescnids validation of a >> guest >>> + page's RMP entry. >>> + >>> + Upon completion, in addition to the return value the instruction also >>> updates >>> + the eFlags. A caller must check both the return code as well as eFlags >> to >>> + determine if the RMP entry has been updated. >>> + >>> + The function is available on x64. >>> + >>> + @param[in] Address The guest virtual address to validate. >>> + @param[in] PageSize The page size to use. >>> + @param[i] Validate Validate or rescinds. >>> + @param[out] Eflags The value of Eflags after PVALIDATE >>> completion. >>> + >>> + @retval PvalidateRetValue The return value from the PVALIDATE >>> instruction. >>> +**/ >>> +typedef enum { >>> + PVALIDATE_PAGE_SIZE_4K = 0, >>> + PVALIDATE_PAGE_SIZE_2M, >>> +} PvalidatePageSize; >>> + >>> +typedef enum { >>> + PVALIDATE_RET_SUCCESS = 0, >>> + PVALIDATE_RET_FAIL_INPUT = 1, >>> + PVALIDATE_RET_FAIL_SIZEMISMATCH = 6, >>> +} PvalidateRetValue; >>> + >>> +PvalidateRetValue >>> +EFIAPI >>> +AsmPvalidate ( >>> + IN PvalidatePageSize PageSize, >>> + IN BOOLEAN Validate, >>> + IN UINTN Address, >>> + OUT IA32_EFLAGS32 *Eflags >>> + ); >>> + >>> #endif // defined (MDE_CPU_IA32) || defined (MDE_CPU_X64) >>> #endif // !defined (__BASE_LIB__) >>> diff --git a/MdePkg/Library/BaseLib/BaseLib.inf >>> b/MdePkg/Library/BaseLib/BaseLib.inf >>> index 3b85c56c3c..01aa5cc7a4 100644 >>> --- a/MdePkg/Library/BaseLib/BaseLib.inf >>> +++ b/MdePkg/Library/BaseLib/BaseLib.inf >>> @@ -319,6 +319,7 @@ >>> X64/RdRand.nasm >>> X64/XGetBv.nasm >>> X64/VmgExit.nasm >>> + X64/Pvalidate.nasm >>> ChkStkGcc.c | GCC >>> >>> [Sources.EBC] >>> diff --git a/MdePkg/Library/BaseLib/X64/Pvalidate.nasm >>> b/MdePkg/Library/BaseLib/X64/Pvalidate.nasm >>> new file mode 100644 >>> index 0000000000..f2aba114ac >>> --- /dev/null >>> +++ b/MdePkg/Library/BaseLib/X64/Pvalidate.nasm >>> @@ -0,0 +1,43 @@ >>> >> +;-------------------------------------------------------------------------- >> --- >>> +; >>> +; Copyright (c) 2020-2021, AMD. All rights reserved.<BR> >>> +; SPDX-License-Identifier: BSD-2-Clause-Patent >>> +; >>> +; Module Name: >>> +; >>> +; Pvalidate.Asm >>> +; >>> +; Abstract: >>> +; >>> +; AsmPvalidate function >>> +; >>> +; Notes: >>> +; >>> >> +;-------------------------------------------------------------------------- >> --- >>> + >>> + SECTION .text >>> + >>> >> +;-------------------------------------------------------------------------- >> --- >>> +; PvalidateRetValue >>> +; EFIAPI >>> +; AsmPvalidate ( >>> +; IN UINT32 RmpPageSize >>> +; IN UINT32 Validate, >>> +; IN UINTN Address, >>> +; OUT UINTN *Eflags, >>> +; ) >>> >> +;-------------------------------------------------------------------------- >> --- >>> +global ASM_PFX(AsmPvalidate) >>> +ASM_PFX(AsmPvalidate): >>> + mov rax, r8 >>> + >>> + ; PVALIDATE instruction opcode >>> + DB 0xF2, 0x0F, 0x01, 0xFF >>> + >>> + ; Read the Eflags >>> + pushfq >>> + pop r8 >>> + mov [r9], r8 >>> + >>> + ; The PVALIDATE instruction returns the status in rax register. >>> + ret >>> -- >>> 2.17.1 >>> >>> >>> >>> >>> >> >> > > > -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#73402): https://edk2.groups.io/g/devel/message/73402 Mute This Topic: https://groups.io/mt/81637942/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-