From nobody Sun Feb 8 23:41:12 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of groups.io designates 66.175.222.12 as permitted sender) client-ip=66.175.222.12; envelope-from=bounce+27952+66744+1787277+3901457@groups.io; helo=web01.groups.io; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+66744+1787277+3901457@groups.io; arc=fail (BodyHash is different from the expected one) Received: from web01.groups.io (web01.groups.io [66.175.222.12]) by mx.zohomail.com with SMTPS id 1603981130035384.9737323972938; Thu, 29 Oct 2020 07:18:50 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id wkiKYY1788612x8Q86Sb7aMa; Thu, 29 Oct 2020 07:18:49 -0700 X-Received: from NAM11-BN8-obe.outbound.protection.outlook.com (NAM11-BN8-obe.outbound.protection.outlook.com [40.107.236.74]) by mx.groups.io with SMTP id smtpd.web11.9522.1603981124021917294 for ; Thu, 29 Oct 2020 07:18:44 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Ll7lgzoY5nT1QkXlKTK6KiAO9Zj03HS/Yjd805OYhz1XyiFr7NOuKMgd8GqIv/YujxaIDNwi6XzSMWELyfI1DMcxM508fhIs7dn3+JYWeAvMnjPPYzKxiNoQ/sHFv1LO4VT5WShQLAoSwN+Xh1v62LFVcNqZa/QktrvJMJFngo19R31JZ0YhgWUnYMRyHknkdjCEomBjauNiBJ6tM601Yr/zKGwQ/Ap7tVVoMre4VQKdqXE+NLOyTKNjNZgOzIbEJpTGX2Fc3/GeMV+ReZ02vzgHF4fcFWEB4GA5M1/C8IODe8GF4h84L2OsXo3iCVqtQT7/jY1kkmeIAbaR43BxwA== 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=IR//qSoYbrMNyS20r8rsUYpi7HMVjVjpqeBDsmhthe8=; b=Koog9bdhhF0CkYvAbtSpE2Whl1KNsvDME5rrrn+MsotxuHb21EYZ8UJ/9+JZgDSkuUvCc4ZY7n15M/nFburKqSOQl8Y1g251v+6bBVsIw+H++/iHYNf1lt0gyZWuCH0PzkgdizxTBl6bMqJF8mnLLbIMpX+p9uT1E04p/7rkYlt3XABnMs9/5oW/tPoecFbb8CD0Ygs0udUVBfRlfMKKFzS5PZCIh9uLpib0IPbRQM3s6bj+vYFO5phmQ0Vnu/dW29gSh6J6i4qmw/7TnVLecnbhDAB5dlf9SBy7p2zr321ZEg0vkRSp/ggst8Kg0vBa2HsQxR05u5to6ELUMVWOOQ== 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 X-Received: from DM5PR12MB1355.namprd12.prod.outlook.com (2603:10b6:3:6e::7) by DM6PR12MB3276.namprd12.prod.outlook.com (2603:10b6:5:15e::28) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3477.24; Thu, 29 Oct 2020 14:18:41 +0000 X-Received: from DM5PR12MB1355.namprd12.prod.outlook.com ([fe80::e442:c052:8a2c:5fba]) by DM5PR12MB1355.namprd12.prod.outlook.com ([fe80::e442:c052:8a2c:5fba%6]) with mapi id 15.20.3499.027; Thu, 29 Oct 2020 14:18:41 +0000 From: "Lendacky, Thomas" To: devel@edk2.groups.io CC: Brijesh Singh , Jordan Justen , Laszlo Ersek , Ard Biesheuvel Subject: [edk2-devel] [PATCH v3 03/11] OvmfPkg/VmgExitLib: Implement new VmgExitLib interfaces Date: Thu, 29 Oct 2020 09:17:54 -0500 Message-ID: <0e7695dce56e749e80d5df1e484cc4ac8011717c.1603981082.git.thomas.lendacky@amd.com> In-Reply-To: References: X-Originating-IP: [165.204.77.1] X-ClientProxiedBy: SN4PR0501CA0092.namprd05.prod.outlook.com (2603:10b6:803:22::30) To DM5PR12MB1355.namprd12.prod.outlook.com (2603:10b6:3:6e::7) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-Received: from tlendack-t1.amd.com (165.204.77.1) by SN4PR0501CA0092.namprd05.prod.outlook.com (2603:10b6:803:22::30) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3499.10 via Frontend Transport; Thu, 29 Oct 2020 14:18:40 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: 21825954-1789-489e-a705-08d87c15892b X-MS-TrafficTypeDiagnostic: DM6PR12MB3276: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:8882; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam-Message-Info: i/c38vHsdlPYopAxXAmUTtDvOZyMn5G1N9UYGtuHB1RlRXMP0sKnW561mTvwmCThcIg4gihfWII92ekSqXbuBah8NZUk+g2TJaR7ZtxZ9/gkh1T1hDDLBctZdEYAGSqrkYrPeyOqGmsACe1rom/Cx9oNSelnhmp3ZUZ6tDGuaVBSlnUbHXShHRyNnW+oyJ/iPutHdt7vBjsyS63fL3TAQSGPAbrcIXTVPd61qdpI6t5vRujHyy5yR8iWPf47mLqInLhH6ortugYx5WxJUTR59ItBrhYCw5Umvc+ryfydILPntMAK+ZWof4YhgDy7hPi7KQNwWZlu+Q9tYvR8fEvzz/sM+yDW1OAX7wTSl+VwG9knyk7GzpBbgK2Q2GI6NiJWSogqjL42gYs3A2jWv3oU4w== X-MS-Exchange-AntiSpam-MessageData: XBazzTJNB5iylHfCAJy2Zu469Cv/L3qEneHJkFBlyFbpTJJ3KtTjBHi3Z+P354HKupm0RG3EDLvtP1c7ctWGOIunb5rk40K8903l6PcTUAW9dl3dt6dPLK1isgvdAH8qqU9kk/hRQWwG0rTNLgP4qNwqFL5eQb/mtgPqTZPY1dOHdIr52SPs/ivY55ZuuNSTxBcrJ/HdW3CC/7bUqyVXrYhT3iMknVLXP4Cr7oN3uA3EftNeUeKlfSgUDaGQzcdPD7xMs7FvVkdp9bOjpD5R2yAguZrxtbjrFFqiKkHATAjY1LxPPQ/JFoVy6hXTTtxfvP3eMJVU2G37ARhrhN3jEoxUHI5lstsy8qYmZvtYsY16HXXmVVvBcKZXD1OoI45wN7Fn5pCEL+6LraUN47qParprRXA0RYA+wFe9aJCi829Xh4+h5tlfvjn0QkctsMxLIZY6Uo7dVfxx78HsPhzDLr907TNW7PvwvEl9H6lpnEfh6BNIJoJ6gBPU0Q/loPtr+uS08fgce25lMmQkDa2UEjK2kIKaVE4KwX/sR4g+E+/OmArt7BnS8TxVn0PNKs9Yz77dqQONkkfR3cyzx3ByER0D74KAbBdM4gmyOhx7ay72cWhAUxgCYqj/YwJmUDMo37klkGhwmN3FX/IY7b5yiw== X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: 21825954-1789-489e-a705-08d87c15892b X-MS-Exchange-CrossTenant-AuthSource: DM5PR12MB1355.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 29 Oct 2020 14:18:41.2121 (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: i1Fi58NeOO57YmYFalOfaC9xdr7gB5LlpzCGfA+5wAdrL9917oPNWCtdjoKE+L9fqzOwoyKeuMF9ggeDNDSkag== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR12MB3276 Precedence: Bulk List-Unsubscribe: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,thomas.lendacky@amd.com X-Gm-Message-State: ZcsuXli2iYIZslBms4iPaG2Lx1787277AA= Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1603981129; bh=IfQHvZPiEGspnZ145+ILCCD90HZ52zKH6x2kxMWJKH0=; h=CC:Content-Type:Date:From:Reply-To:Subject:To; b=p33XQpB7g/LJjjH7QAbQlRSkwwJIXPkFtFGbAnpsHYK2Wda7SJNs8s8aIxHbvLf9dHr 3TFqCul6lT2E0F/8WZUqis6mZ3ZjM5kl42fIH3cTw9lDyLX2Nv1nu8L8YXuw2hUaflpxp jM8BqAhPs9N1Jpl0cY36k0plCUCkoT0MTJE= X-ZohoMail-DKIM: pass (identity @groups.io) Content-Type: text/plain; charset="utf-8" From: Tom Lendacky BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=3D3008 The VmgExitLib library added two new interfaces, VmgSetOffsetValid() and VmgIsOffsetValid(), that must now be implemented in the OvmfPkg version of the library. Implement VmgSetOffsetValid() and VmgIsOffsetValid() and update existing code, that is directly accessing ValidBitmap, to use the new interfaces. Cc: Jordan Justen Cc: Laszlo Ersek Cc: Ard Biesheuvel Cc: Tom Lendacky Cc: Brijesh Singh Reviewed-by: Laszlo Ersek Signed-off-by: Tom Lendacky --- OvmfPkg/Library/VmgExitLib/VmgExitLib.c | 54 +++++++++ OvmfPkg/Library/VmgExitLib/VmgExitVcHandler.c | 118 +++++--------------- 2 files changed, 85 insertions(+), 87 deletions(-) diff --git a/OvmfPkg/Library/VmgExitLib/VmgExitLib.c b/OvmfPkg/Library/VmgE= xitLib/VmgExitLib.c index 53040cc6f649..21f68b19c94e 100644 --- a/OvmfPkg/Library/VmgExitLib/VmgExitLib.c +++ b/OvmfPkg/Library/VmgExitLib/VmgExitLib.c @@ -157,3 +157,57 @@ VmgDone ( { } =20 +/** + Marks a field at the specified offset as valid in the GHCB. + + The ValidBitmap area represents the areas of the GHCB that have been mar= ked + valid. Set the bit in ValidBitmap for the input offset. + + @param[in, out] Ghcb Pointer to the Guest-Hypervisor Communication Bl= ock + @param[in] Offset Qword offset in the GHCB to mark valid + +**/ +VOID +EFIAPI +VmgSetOffsetValid ( + IN OUT GHCB *Ghcb, + IN GHCB_REGISTER Offset + ) +{ + UINT32 OffsetIndex; + UINT32 OffsetBit; + + OffsetIndex =3D Offset / 8; + OffsetBit =3D Offset % 8; + + Ghcb->SaveArea.ValidBitmap[OffsetIndex] |=3D (1 << OffsetBit); +} + +/** + Checks if a specified offset is valid in the GHCB. + + The ValidBitmap area represents the areas of the GHCB that have been mar= ked + valid. Return whether the bit in the ValidBitmap is set for the input of= fset. + + @param[in] Ghcb A pointer to the GHCB + @param[in] Offset Qword offset in the GHCB to mark valid + + @retval TRUE Offset is marked valid in the GHCB + @retval FALSE Offset is not marked valid in the GHCB + +**/ +BOOLEAN +EFIAPI +VmgIsOffsetValid ( + IN GHCB *Ghcb, + IN GHCB_REGISTER Offset + ) +{ + UINT32 OffsetIndex; + UINT32 OffsetBit; + + OffsetIndex =3D Offset / 8; + OffsetBit =3D Offset % 8; + + return ((Ghcb->SaveArea.ValidBitmap[OffsetIndex] & (1 << OffsetBit)) != =3D 0); +} diff --git a/OvmfPkg/Library/VmgExitLib/VmgExitVcHandler.c b/OvmfPkg/Librar= y/VmgExitLib/VmgExitVcHandler.c index 8e42b305e83c..7d14341d592b 100644 --- a/OvmfPkg/Library/VmgExitLib/VmgExitVcHandler.c +++ b/OvmfPkg/Library/VmgExitLib/VmgExitVcHandler.c @@ -135,62 +135,6 @@ typedef struct { } SEV_ES_PER_CPU_DATA; =20 =20 -/** - Checks the GHCB to determine if the specified register has been marked v= alid. - - The ValidBitmap area represents the areas of the GHCB that have been mar= ked - valid. Return an indication of whether the area of the GHCB that holds t= he - specified register has been marked valid. - - @param[in] Ghcb Pointer to the Guest-Hypervisor Communication Block - @param[in] Reg Offset in the GHCB of the register to check - - @retval TRUE Register has been marked vald in the GHCB - @retval FALSE Register has not been marked valid in the GHCB - -**/ -STATIC -BOOLEAN -GhcbIsRegValid ( - IN GHCB *Ghcb, - IN GHCB_REGISTER Reg - ) -{ - UINT32 RegIndex; - UINT32 RegBit; - - RegIndex =3D Reg / 8; - RegBit =3D Reg & 0x07; - - return ((Ghcb->SaveArea.ValidBitmap[RegIndex] & (1 << RegBit)) !=3D 0); -} - -/** - Marks a register as valid in the GHCB. - - The ValidBitmap area represents the areas of the GHCB that have been mar= ked - valid. Set the area of the GHCB that holds the specified register as val= id. - - @param[in, out] Ghcb Pointer to the Guest-Hypervisor Communication Bl= ock - @param[in] Reg Offset in the GHCB of the register to mark valid - -**/ -STATIC -VOID -GhcbSetRegValid ( - IN OUT GHCB *Ghcb, - IN GHCB_REGISTER Reg - ) -{ - UINT32 RegIndex; - UINT32 RegBit; - - RegIndex =3D Reg / 8; - RegBit =3D Reg & 0x07; - - Ghcb->SaveArea.ValidBitmap[RegIndex] |=3D (1 << RegBit); -} - /** Return a pointer to the contents of the specified register. =20 @@ -891,9 +835,9 @@ MwaitExit ( DecodeModRm (Regs, InstructionData); =20 Ghcb->SaveArea.Rax =3D Regs->Rax; - GhcbSetRegValid (Ghcb, GhcbRax); + VmgSetOffsetValid (Ghcb, GhcbRax); Ghcb->SaveArea.Rcx =3D Regs->Rcx; - GhcbSetRegValid (Ghcb, GhcbRcx); + VmgSetOffsetValid (Ghcb, GhcbRcx); =20 return VmgExit (Ghcb, SVM_EXIT_MWAIT, 0, 0); } @@ -923,11 +867,11 @@ MonitorExit ( DecodeModRm (Regs, InstructionData); =20 Ghcb->SaveArea.Rax =3D Regs->Rax; // Identity mapped, so VA =3D PA - GhcbSetRegValid (Ghcb, GhcbRax); + VmgSetOffsetValid (Ghcb, GhcbRax); Ghcb->SaveArea.Rcx =3D Regs->Rcx; - GhcbSetRegValid (Ghcb, GhcbRcx); + VmgSetOffsetValid (Ghcb, GhcbRcx); Ghcb->SaveArea.Rdx =3D Regs->Rdx; - GhcbSetRegValid (Ghcb, GhcbRdx); + VmgSetOffsetValid (Ghcb, GhcbRdx); =20 return VmgExit (Ghcb, SVM_EXIT_MONITOR, 0, 0); } @@ -988,9 +932,9 @@ RdtscpExit ( return Status; } =20 - if (!GhcbIsRegValid (Ghcb, GhcbRax) || - !GhcbIsRegValid (Ghcb, GhcbRcx) || - !GhcbIsRegValid (Ghcb, GhcbRdx)) { + if (!VmgIsOffsetValid (Ghcb, GhcbRax) || + !VmgIsOffsetValid (Ghcb, GhcbRcx) || + !VmgIsOffsetValid (Ghcb, GhcbRdx)) { return UnsupportedExit (Ghcb, Regs, InstructionData); } Regs->Rax =3D Ghcb->SaveArea.Rax; @@ -1027,16 +971,16 @@ VmmCallExit ( DecodeModRm (Regs, InstructionData); =20 Ghcb->SaveArea.Rax =3D Regs->Rax; - GhcbSetRegValid (Ghcb, GhcbRax); + VmgSetOffsetValid (Ghcb, GhcbRax); Ghcb->SaveArea.Cpl =3D (UINT8) (Regs->Cs & 0x3); - GhcbSetRegValid (Ghcb, GhcbCpl); + VmgSetOffsetValid (Ghcb, GhcbCpl); =20 Status =3D VmgExit (Ghcb, SVM_EXIT_VMMCALL, 0, 0); if (Status !=3D 0) { return Status; } =20 - if (!GhcbIsRegValid (Ghcb, GhcbRax)) { + if (!VmgIsOffsetValid (Ghcb, GhcbRax)) { return UnsupportedExit (Ghcb, Regs, InstructionData); } Regs->Rax =3D Ghcb->SaveArea.Rax; @@ -1074,15 +1018,15 @@ MsrExit ( case 0x30: // WRMSR ExitInfo1 =3D 1; Ghcb->SaveArea.Rax =3D Regs->Rax; - GhcbSetRegValid (Ghcb, GhcbRax); + VmgSetOffsetValid (Ghcb, GhcbRax); Ghcb->SaveArea.Rdx =3D Regs->Rdx; - GhcbSetRegValid (Ghcb, GhcbRdx); + VmgSetOffsetValid (Ghcb, GhcbRdx); // // fall through // case 0x32: // RDMSR Ghcb->SaveArea.Rcx =3D Regs->Rcx; - GhcbSetRegValid (Ghcb, GhcbRcx); + VmgSetOffsetValid (Ghcb, GhcbRcx); break; default: return UnsupportedExit (Ghcb, Regs, InstructionData); @@ -1094,8 +1038,8 @@ MsrExit ( } =20 if (ExitInfo1 =3D=3D 0) { - if (!GhcbIsRegValid (Ghcb, GhcbRax) || - !GhcbIsRegValid (Ghcb, GhcbRdx)) { + if (!VmgIsOffsetValid (Ghcb, GhcbRax) || + !VmgIsOffsetValid (Ghcb, GhcbRdx)) { return UnsupportedExit (Ghcb, Regs, InstructionData); } Regs->Rax =3D Ghcb->SaveArea.Rax; @@ -1311,7 +1255,7 @@ IoioExit ( } else { CopyMem (&Ghcb->SaveArea.Rax, &Regs->Rax, IOIO_DATA_BYTES (ExitInfo1= )); } - GhcbSetRegValid (Ghcb, GhcbRax); + VmgSetOffsetValid (Ghcb, GhcbRax); =20 Status =3D VmgExit (Ghcb, SVM_EXIT_IOIO_PROT, ExitInfo1, 0); if (Status !=3D 0) { @@ -1319,7 +1263,7 @@ IoioExit ( } =20 if ((ExitInfo1 & IOIO_TYPE_IN) !=3D 0) { - if (!GhcbIsRegValid (Ghcb, GhcbRax)) { + if (!VmgIsOffsetValid (Ghcb, GhcbRax)) { return UnsupportedExit (Ghcb, Regs, InstructionData); } CopyMem (&Regs->Rax, &Ghcb->SaveArea.Rax, IOIO_DATA_BYTES (ExitInfo1= )); @@ -1379,15 +1323,15 @@ CpuidExit ( UINT64 Status; =20 Ghcb->SaveArea.Rax =3D Regs->Rax; - GhcbSetRegValid (Ghcb, GhcbRax); + VmgSetOffsetValid (Ghcb, GhcbRax); Ghcb->SaveArea.Rcx =3D Regs->Rcx; - GhcbSetRegValid (Ghcb, GhcbRcx); + VmgSetOffsetValid (Ghcb, GhcbRcx); if (Regs->Rax =3D=3D CPUID_EXTENDED_STATE) { IA32_CR4 Cr4; =20 Cr4.UintN =3D AsmReadCr4 (); Ghcb->SaveArea.XCr0 =3D (Cr4.Bits.OSXSAVE =3D=3D 1) ? AsmXGetBv (0) : = 1; - GhcbSetRegValid (Ghcb, GhcbXCr0); + VmgSetOffsetValid (Ghcb, GhcbXCr0); } =20 Status =3D VmgExit (Ghcb, SVM_EXIT_CPUID, 0, 0); @@ -1395,10 +1339,10 @@ CpuidExit ( return Status; } =20 - if (!GhcbIsRegValid (Ghcb, GhcbRax) || - !GhcbIsRegValid (Ghcb, GhcbRbx) || - !GhcbIsRegValid (Ghcb, GhcbRcx) || - !GhcbIsRegValid (Ghcb, GhcbRdx)) { + if (!VmgIsOffsetValid (Ghcb, GhcbRax) || + !VmgIsOffsetValid (Ghcb, GhcbRbx) || + !VmgIsOffsetValid (Ghcb, GhcbRcx) || + !VmgIsOffsetValid (Ghcb, GhcbRdx)) { return UnsupportedExit (Ghcb, Regs, InstructionData); } Regs->Rax =3D Ghcb->SaveArea.Rax; @@ -1434,15 +1378,15 @@ RdpmcExit ( UINT64 Status; =20 Ghcb->SaveArea.Rcx =3D Regs->Rcx; - GhcbSetRegValid (Ghcb, GhcbRcx); + VmgSetOffsetValid (Ghcb, GhcbRcx); =20 Status =3D VmgExit (Ghcb, SVM_EXIT_RDPMC, 0, 0); if (Status !=3D 0) { return Status; } =20 - if (!GhcbIsRegValid (Ghcb, GhcbRax) || - !GhcbIsRegValid (Ghcb, GhcbRdx)) { + if (!VmgIsOffsetValid (Ghcb, GhcbRax) || + !VmgIsOffsetValid (Ghcb, GhcbRdx)) { return UnsupportedExit (Ghcb, Regs, InstructionData); } Regs->Rax =3D Ghcb->SaveArea.Rax; @@ -1480,8 +1424,8 @@ RdtscExit ( return Status; } =20 - if (!GhcbIsRegValid (Ghcb, GhcbRax) || - !GhcbIsRegValid (Ghcb, GhcbRdx)) { + if (!VmgIsOffsetValid (Ghcb, GhcbRax) || + !VmgIsOffsetValid (Ghcb, GhcbRdx)) { return UnsupportedExit (Ghcb, Regs, InstructionData); } Regs->Rax =3D Ghcb->SaveArea.Rax; @@ -1531,7 +1475,7 @@ Dr7WriteExit ( // Using a value of 0 for ExitInfo1 means RAX holds the value // Ghcb->SaveArea.Rax =3D *Register; - GhcbSetRegValid (Ghcb, GhcbRax); + VmgSetOffsetValid (Ghcb, GhcbRax); =20 Status =3D VmgExit (Ghcb, SVM_EXIT_DR7_WRITE, 0, 0); if (Status !=3D 0) { --=20 2.28.0 -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#66744): https://edk2.groups.io/g/devel/message/66744 Mute This Topic: https://groups.io/mt/77888118/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-