Is this API X64 only? Or IA32 and X64 both? 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://bugzilla.tianocore.org/show_bug.cgi?id=3275 > > 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> > Cc: Min Xu <min.m...@intel.com> > Cc: Jiewen Yao <jiewen....@intel.com> > Cc: Tom Lendacky <thomas.lenda...@amd.com> > Cc: Jordan Justen <jordan.l.jus...@intel.com> > Cc: Ard Biesheuvel <ardb+tianoc...@kernel.org> > Cc: Laszlo Ersek <ler...@redhat.com> > Signed-off-by: Brijesh Singh <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 (#73249): https://edk2.groups.io/g/devel/message/73249 Mute This Topic: https://groups.io/mt/81594059/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-