From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from NAM02-BL2-obe.outbound.protection.outlook.com (NAM02-BL2-obe.outbound.protection.outlook.com [40.107.75.40]) by mx.groups.io with SMTP id smtpd.web12.43.1620753535490410679 for ; Tue, 11 May 2021 10:18:56 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@amd.com header.s=selector1 header.b=ggvlrskT; spf=permerror, err=parse error for token &{10 18 %{i}._ip.%{h}._ehlo.%{d}._spf.vali.email}: invalid domain name (domain: amd.com, ip: 40.107.75.40, mailfrom: brijesh.singh@amd.com) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=gm0PCx+zuDwIeP9KRJDvjUL2eX4MrzG9OEX9B80xB0P8Mu6VAzUp58/h1WeWZ7goZ3vDklaOTxx+3a4LcY0+Eqnr5+fynq41v/H6m/yQNRM81Rz7qhjo3a+oEO1eV33HTJEFo7SX6zipLa6vbCeg9cf5pqHd8W2dj/eK7GkRDi2OGx2UUUP+vAs+8PrpiiBV0avSTIBjIiQQv9bZWbASDs5wiem90m/+CV8kzqQDriw0cOmLFy7NaX7+RZM51KvA1dFEjSCesivSlGoEN9xSLNxb5oNdrI3lSDiJYrMgbwlKCHH5fcexCploa30Tj7Edq3g803z5J6T31ZGjKzXtaw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=kKtciSOq/004YkDnITtb3h/GH/fZa+sipDcfZFICuqk=; b=LhiEz151OdifULPbSW15igVbZZVV8qxZru7AyQlnCdWLXIEAZOboY3EovWRa3FJuY89mvMB9KRSd+EE56C/aoym9VT5q2skJLkiFVmMPaKpbSM5d7pQXvqIxtANwKiOdW7HefqFKFtejK/R5fsNQFHZbRIBy6Zm8RzWCmoRSkuVY5crxPRJmjdUU+DockZr0i215YraOPyF4mnsLXHYGv7MTTP1NNrkZcWUzp0Hj8OuUys4NIbbjQmRNtXDD9BChjuTgy4zL4wX1tuvQW0usxJFuAyf6ESiJ4tGyRb4gDYzWHF0P6OlU/TwHe+RUBwfaaJNuEIldvttvVDlW34fuFA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=amd.com; dmarc=pass action=none header.from=amd.com; dkim=pass header.d=amd.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=kKtciSOq/004YkDnITtb3h/GH/fZa+sipDcfZFICuqk=; b=ggvlrskTEq/8e8LFLHXZF81pJAZsvS7qrZjlcMk5R1IIc7tFcVYE7fEGzCN7VsajnTjCm+CnJITgHB82QwKgv1qRxCkBv6CFkNkL8dtoKQnGxSUN3sLnpSRRkig19o1ZslJtt+kbfarTATxZ1Z41M2r8Y4XloupQo9rEsNaeUdg= Authentication-Results: intel.com; dkim=none (message not signed) header.d=none;intel.com; dmarc=none action=none header.from=amd.com; Received: from SN6PR12MB2718.namprd12.prod.outlook.com (2603:10b6:805:6f::22) by SN1PR12MB2541.namprd12.prod.outlook.com (2603:10b6:802:24::30) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4108.29; Tue, 11 May 2021 17:18:53 +0000 Received: from SN6PR12MB2718.namprd12.prod.outlook.com ([fe80::9898:5b48:a062:db94]) by SN6PR12MB2718.namprd12.prod.outlook.com ([fe80::9898:5b48:a062:db94%6]) with mapi id 15.20.4129.025; Tue, 11 May 2021 17:18:53 +0000 Cc: brijesh.singh@amd.com, James Bottomley , Min Xu , Jiewen Yao , Tom Lendacky , Jordan Justen , Ard Biesheuvel , Erdem Aktas , Michael D Kinney , Liming Gao , Zhiguang Liu Subject: Re: [edk2-devel] [PATCH 07/13] MdePkg/BaseLib: add support for PVALIDATE instruction To: Laszlo Ersek , devel@edk2.groups.io References: <20210507203838.23706-1-brijesh.singh@amd.com> <20210507203838.23706-8-brijesh.singh@amd.com> From: "Brijesh Singh" Message-ID: <98c8155b-34c8-7970-c692-6998f5d47ca4@amd.com> Date: Tue, 11 May 2021 12:18:50 -0500 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0) Gecko/20100101 Thunderbird/78.10.0 In-Reply-To: X-Originating-IP: [70.112.153.56] X-ClientProxiedBy: SN4PR0501CA0054.namprd05.prod.outlook.com (2603:10b6:803:41::31) To SN6PR12MB2718.namprd12.prod.outlook.com (2603:10b6:805:6f::22) Return-Path: brijesh.singh@amd.com MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from Brijeshs-MacBook-Pro.local (70.112.153.56) by SN4PR0501CA0054.namprd05.prod.outlook.com (2603:10b6:803:41::31) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4129.12 via Frontend Transport; Tue, 11 May 2021 17:18:52 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: a6e3afd6-3244-4f18-879b-08d914a0d9b4 X-MS-TrafficTypeDiagnostic: SN1PR12MB2541: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:8273; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: Scpc4G9FYx6kHh+/TuvVNVyAN5oKdaltg4EvXKKsCZ7DDMZZ4dJN40nip1IoVTJRax+9du17T8x9fGStJEiDtw2UyF/St7zRt7z1uZf8saKrdVJSAoh+wepIwyQnn1AoonbXCDO0Hu/OnMnB0A3KRdBZC5lbTl7J23d1PwyLNdh9DUB+ucAIC07/AAz4D9R5ebOVuxKI6GvVupY4ap3JHyjKHhJUp3kuvlWLHgGq7Dgq0PgirxCDOuqs/oxXgQxD4lsZJO26zwrgHDcHAtIoJLZbAmEyiGjxWleWOXeDYeyFjTN/M6mG8C/BiAUrMhx+KpicXLOD55o0POjraVwLl2jbjr1A02L7Ygt5TO5s2XAhu9USM+mBSAdy9winpJohvSeWOFsqEWS/WZSlGIrXNVIWcmy1x5I4QpCLAWEZDRVx4lezkXw7gaFdICVmS9Eds50I0JvTxpE3eLSGeim9KTyFCbiRNsWyr/C57k6ABQnlNJXygivT6pGggL3c9nqtKSEE+SgUHzFhA+EJNbuRk8fS6cN47yyOq+zheGQQWWrWf0K5Tu3+q6vYhnNELZhM/Gijq4Zmd7jEsd7KXgGwMm+ZXBdmxxrHQCbLi2XwTvzgOYEZyZPxwE2MctjsLQv8qoL5vB3k4Xf9EKhhgvw8I6/cv5mvvntXM9At7bHSTS4vZ/49Cu3wGBBEPVeUquSJBHADqVpzXsmsyL6lOFY1XhO53p1gPlRCW0YWVZ8egKKJySwWEF8/mGreVnLRbL8KouBJI7l4hxR93UFFORbuyRrb5kRynHRkOWPGiNC/oUo= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SN6PR12MB2718.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(376002)(39860400002)(366004)(396003)(136003)(346002)(186003)(31686004)(66946007)(86362001)(6486002)(2906002)(16526019)(8676002)(66476007)(53546011)(6506007)(38100700002)(66556008)(36756003)(2616005)(38350700002)(4326008)(956004)(8936002)(31696002)(45080400002)(478600001)(54906003)(26005)(19627235002)(44832011)(966005)(5660300002)(83380400001)(7416002)(6512007)(316002)(52116002)(45980500001)(43740500002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData: =?utf-8?B?K1NON3Vja1o2dkRJWVBGUDd2aS9PeVhub3lFbjNRVVBmbTIvZjJ3ZVFTUFI4?= =?utf-8?B?NXBZTHcwY004Y3o1bzljaU50Nk45bkhBNGw1cWhxeGpXZkE2eUtBd2xCMW9D?= =?utf-8?B?R05RUUNtSzNpeVQyaEJHay9lS0cxK3pxN3hleWJDZE4vMkNscVNKQ0RKUGJr?= =?utf-8?B?S3NuNmdYWmdwN2VUekJNb0pPMjdTMTZ3d1NRK3NvU25SRUxZSGZab0UweFI3?= =?utf-8?B?NWYySmFGWmFDMEVMRDN1dlZlaVY5YjViNUo3eEZ2WE9JQ2lydEJqZ3BncFRs?= =?utf-8?B?VXJQSjU5T0ZyT3JrR2kydGdFK05hNnI0L3FBemhWSmUrZ01uNGlNUGxCMldy?= =?utf-8?B?SStNYzF3QkZLVUF0Zm92cGtMK1BYVDFtaG9ySXRSY1lvOVFvdGtrdTAyclZj?= =?utf-8?B?SXV6MmloSmlTaGlvblQwU3dFVFdtWVhlVXoxeGlXOUx6VFZudHdnbUMxa0dp?= =?utf-8?B?QVJ3TjFaNzBzUUFkS3NjMVFNa0s0a3NtWk14MlQyOThHajg3b01aSFdHSmto?= =?utf-8?B?SExwb2tsVWpiVE1iUUJjQ3RZeHdnSjI1bTE5OG1OazEwd0pXMTJ3UGlSb0hL?= =?utf-8?B?WFcyV2VQWS9zN25PaCtvMmpLekZLb1NwK3A3OUM3b0ZpcGl6UG5NbUVlKzQv?= =?utf-8?B?VmY2U1diZGxFMlZ3ZC9mUnNDNThTdTdlWTU2UVVITUxMcjkxSlRBZTBzZ3Rk?= =?utf-8?B?aEZVczNjbTFFcC83OHp5bGxGM3B1RXRxbnV5NXdMcHVrdmo3NWU5V3FXV0F3?= =?utf-8?B?Zy9qaFBzMTZBYnlzazMzUDAzQzRKZnZiMXJqdG9jREt6Z0d2am5ISnpoYXBk?= =?utf-8?B?NFZoMmFob3V3MDQ5WXNCRXNrejVJb1ArUG1icWI5dlNpNGFBcUxZRHppMTNB?= =?utf-8?B?ZnZScS8vMktlMHdIYngxM2RjR0FmdGpFWGFtMm14R0Z1aEpmQ0NvK3BNT2Q1?= =?utf-8?B?WGUwNE12L0ZuRis4VkpIOG9QS3hOd2dOcW9oOXN6TVBsZG1SNnAxMzFmM2x4?= =?utf-8?B?M2dSdlpITW1kQ0hKSTg2VkhJTCtOTnlKd3k1V3dSR3VhZmZSdUNrblVQaWc1?= =?utf-8?B?RnZLUHMwemNFOTJUNml5WndlejkzQXdJWkRyZWxCZ0lPbWM3Y1JPSlVpMlBu?= =?utf-8?B?VnVMNVp5ZURhU1orMEIwSWpYTWRkOWJ3emVac0VFTlJ4YmJKTHdlUGl6OUp0?= =?utf-8?B?Ui82UFA4eU1UczFTbWVqdGV1RFNaS00yUTlXVzlIMnk5Rm9Za0lxU3Nld3I4?= =?utf-8?B?SmxLaUVtaGk5TVJDaFE4SC9rYllJT01FeUwxN0V0cndNcHh3cWFxM3NXbDdo?= =?utf-8?B?b3gxcGNhbTlSbFFjZUl1VjRwaS9tcElaMktSU2Jwd21KY2lEcXFhUkp5OFoz?= =?utf-8?B?eFByTkFUOXVkNkcxeklSYWZwUWpwMDR2Mm5tYmJwOUlvWWNWaGlMRzRwQkpw?= =?utf-8?B?eDNoWkkvNDIrRHY4TzEzSnFCZDRFRWpsQTVoUVNvbXE2N0g2U095NC9wZDFX?= =?utf-8?B?b1hCQk04ODNGQ3NFeEs4SVY2U2pNd0Q5bXNyRjhhN29vUjNQNGllQjFuZWwv?= =?utf-8?B?V0loRlM4aVNGT01TZVR6emFjVkU5T3N0YUdFbTlzZ2ZCWjNEVmNuRVBlWUZy?= =?utf-8?B?Uld3MmFpY2wrYmtlYnF6eVpQNmRSKzlMSDcvMXhKOUREZFZWVU1GVHllS2xI?= =?utf-8?B?eXd3YWRURnJSajVjRm5CeDF4L2txbnBhVTdscW1ld1lFY28wdEVGSlhXUW5a?= =?utf-8?Q?GVOLDbt4C3iSf3IjCyOs+uVJXNqzT93vLX+P+sx?= X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: a6e3afd6-3244-4f18-879b-08d914a0d9b4 X-MS-Exchange-CrossTenant-AuthSource: SN6PR12MB2718.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 May 2021 17:18:53.1044 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: ABswfiDnXXiwsLxY4aCmBzOHG+FFtiGLL+jeXgjPvsNBOjjjbJ747Qh/WHIzc5vLMJUl7mmtoufarsmqwP6tUQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN1PR12MB2541 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit Content-Language: en-US On 5/11/21 5:29 AM, Laszlo Ersek wrote: > On 05/07/21 22:38, Brijesh Singh wrote: >> 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%7Cc5e03d8f093c430d01b608d91467bc91%7C3dd8961fe4884e608e11a82d994e183d%7C0%7C0%7C637563258060234952%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=QFATwHj5Jtoughp2bLTtFChUuKCWzQBSOGcZb2I%2B534%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 >> Cc: Min Xu >> Cc: Jiewen Yao >> Cc: Tom Lendacky >> Cc: Jordan Justen >> Cc: Ard Biesheuvel >> Cc: Laszlo Ersek >> Cc: Erdem Aktas >> Cc: Michael D Kinney >> Cc: Liming Gao >> Cc: Zhiguang Liu >> Signed-off-by: Brijesh Singh >> --- >> MdePkg/Library/BaseLib/BaseLib.inf | 1 + >> MdePkg/Include/Library/BaseLib.h | 46 +++++++++++++++++++++++ >> MdePkg/Include/X64/Nasm.inc | 8 ++++ >> MdePkg/Library/BaseLib/X64/Pvalidate.nasm | 42 +++++++++++++++++++++ >> 4 files changed, 97 insertions(+) >> create mode 100644 MdePkg/Library/BaseLib/X64/Pvalidate.nasm >> >> diff --git a/MdePkg/Library/BaseLib/BaseLib.inf b/MdePkg/Library/BaseLib/BaseLib.inf >> index b76f3af380ea..89a52f72c08a 100644 >> --- a/MdePkg/Library/BaseLib/BaseLib.inf >> +++ b/MdePkg/Library/BaseLib/BaseLib.inf >> @@ -317,6 +317,7 @@ [Sources.X64] >> X64/GccInlinePriv.c | GCC >> X64/EnableDisableInterrupts.nasm >> X64/DisablePaging64.nasm >> + X64/Pvalidate.nasm >> X64/RdRand.nasm >> X64/XGetBv.nasm >> X64/XSetBv.nasm >> diff --git a/MdePkg/Include/Library/BaseLib.h b/MdePkg/Include/Library/BaseLib.h >> index 7253997a6f8c..f177034af6a1 100644 >> --- a/MdePkg/Include/Library/BaseLib.h >> +++ b/MdePkg/Include/Library/BaseLib.h >> @@ -4813,6 +4813,52 @@ SpeculationBarrier ( >> VOID >> ); >> >> +#if defined (MDE_CPU_X64) >> +// >> +// The page size for the PVALIDATE instruction >> +// >> +typedef enum { >> + PvalidatePageSize4K = 0, >> + PvalidatePageSize2MB, >> +} PVALIDATE_PAGE_SIZE; >> + >> +// >> +// PVALIDATE Return Code. >> +// >> +#define PVALIDATE_RET_SUCCESS 0 >> +#define PVALIDATE_RET_FAIL_INPUT 1 >> +#define PVALIDATE_RET_SIZE_MISMATCH 6 >> + >> +// >> +// The PVALIDATE instruction did not made any changes to the RMP entry. > (1) Typo: should be "did not make". Noted. > >> +// >> +#define PVALIDATE_RET_NO_RMPUPDATE 255 >> + >> +/** >> + Execute a PVALIDATE instruction to validate or rescinds validation of a guest > (2) should be "to validate or to rescind validation" (infinitive form). Noted. > >> + page's RMP entry. >> + >> + The instruction is available only when CPUID Fn8000_001F_EAX[SNP]=1. >> + >> + The function is available on X64. >> + >> + @param[in] PageSize The page size to use. >> + @param[in] Validate Validate or rescinds. > (3) If you use the imperative for "validate", then "rescinds" > (indicative) reads strangely. I will use validate or invalidate in future patches. > >> + @param[in] Address The guest virtual address to validate. >> + >> + @retval The return value from the PVALIDATE instruction, and >> + PVALIDATE_RET_NO_RMPUPDATE when there was no change in >> + the RMP entry. > (4) @retval is only usable with actual return values (constants). If you > provide a natural language explanation, then @return is the proper > doxygen directive. > > You can combine these BTW, for example: > > @retval PVALIDATE_RET_SUCCESS The PVALIDATE instruction > succeeded, and updated the RMP > entry. > @retval PVALIDATE_RET_NO_RMPUPDATE The PVALIDATE instruction > succeeded, but did not update the > RMP entry. > @return Failure codes from the PVALIDATE > instruction. Will do. >> +**/ >> +UINTN >> +EFIAPI >> +AsmPvalidate ( >> + IN PVALIDATE_PAGE_SIZE PageSize, >> + IN BOOLEAN Validate, >> + IN PHYSICAL_ADDRESS Address >> + ); >> +#endif >> + >> >> #if defined (MDE_CPU_IA32) || defined (MDE_CPU_X64) >> /// >> diff --git a/MdePkg/Include/X64/Nasm.inc b/MdePkg/Include/X64/Nasm.inc >> index 527f71e9eb4d..528bb3385609 100644 >> --- a/MdePkg/Include/X64/Nasm.inc >> +++ b/MdePkg/Include/X64/Nasm.inc >> @@ -33,6 +33,14 @@ >> DB 0xF3, 0x48, 0x0F, 0xAE, 0xE8 >> %endmacro >> >> +; >> +; Macro for the PVALIDATE instruction, defined in AMD APM volume 3. >> +; NASM feature request URL: https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Fbugzilla.nasm.us%2Fshow_bug.cgi%3Fid%3D3392753&data=04%7C01%7Cbrijesh.singh%40amd.com%7Cc5e03d8f093c430d01b608d91467bc91%7C3dd8961fe4884e608e11a82d994e183d%7C0%7C0%7C637563258060234952%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=Sk1vgmvOHjp2VVlONWIqDMZnb5nfV5%2Fl9pegv9AQgmg%3D&reserved=0 >> +; >> +%macro PVALIDATE 0 >> + DB 0xF2, 0x0F, 0x01, 0xFF >> +%endmacro >> + >> ; NASM provides built-in macros STRUC and ENDSTRUC for structure definition. >> ; For example, to define a structure called mytype containing a longword, >> ; a word, a byte and a string of bytes, you might code > Thanks for filing the NASM BZ! > >> diff --git a/MdePkg/Library/BaseLib/X64/Pvalidate.nasm b/MdePkg/Library/BaseLib/X64/Pvalidate.nasm >> new file mode 100644 >> index 000000000000..b20dac7e6831 >> --- /dev/null >> +++ b/MdePkg/Library/BaseLib/X64/Pvalidate.nasm >> @@ -0,0 +1,42 @@ >> +;----------------------------------------------------------------------------- >> +; >> +; Copyright (c) 2021, AMD. All rights reserved.
>> +; SPDX-License-Identifier: BSD-2-Clause-Patent >> +; >> +;----------------------------------------------------------------------------- >> + >> +%include "Nasm.inc" >> + >> + SECTION .text >> + >> +;----------------------------------------------------------------------------- >> +; UINTN >> +; EFIAPI >> +; AsmPvalidate ( >> +; IN UINT32 RmpPageSize >> +; IN UINT32 Validate, >> +; IN PHYSICAL_ADDRESS Address >> +; ) > (5) This prototype does not match the one from the header file. > > I guess it's reasonable to replace the enum type and the BOOLEAN type > with UINT32, in the assembly source code. But then I don't understand > why PHYSICAL_ADDRESS is not replaced with UINT64 -- that would only be > consistent with the other replacements. > > Furthermore, the parameter *names* PageSize and RmpPageSize do not match. > Will fix in next rev. >> +;----------------------------------------------------------------------------- >> +global ASM_PFX(AsmPvalidate) >> +ASM_PFX(AsmPvalidate): >> + mov rax, r8 >> + >> + PVALIDATE >> + >> + ; Save the carry flag. >> + setb dl >> + >> + ; The PVALIDATE instruction returns the status in rax register. >> + cmp rax, 0 >> + jne PvalidateExit >> + >> + ; Check the carry flag to determine if RMP entry was updated. >> + cmp dl, 0 >> + jz PvalidateExit >> + >> + ; Return the PVALIDATE_RET_NO_RMPUPDATE. >> + mov rax, 255 >> + >> +PvalidateExit: >> + ret >> > This looks OK. I'm not very used to reading assembly, so "setc" (set if > carry) instead of the equivalent "setb" (set if below) would have been > easier to parse. > > Similarly, "je" (jump if equal) would be easier to read than the > equivalent "jz" (jump if zero), especially after using "jne" (and not > "jnz") with the previous "cmp". > > But, the assembly does look correct to me, so there's no need to change it. > > Thanks! > Laszlo >