From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga17.intel.com (mga17.intel.com [192.55.52.151]) by mx.groups.io with SMTP id smtpd.web10.19671.1669126700334544853 for ; Tue, 22 Nov 2022 06:18:20 -0800 Authentication-Results: mx.groups.io; dkim=fail reason="unable to parse pub key" header.i=@intel.com header.s=intel header.b=H0NFoTzJ; spf=pass (domain: intel.com, ip: 192.55.52.151, mailfrom: jiewen.yao@intel.com) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1669126700; x=1700662700; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-transfer-encoding:mime-version; bh=zEPl57Sadrt53XNcdOR/P4nHc01/cw1aQWCzSiCcJFU=; b=H0NFoTzJowwb8rqgAgi9tc1lgSiYh4/Aum8AJNOM+97JowBct5fqgKF1 NCdA7gUqAcqDzbap+QCdX6ceDZhtuKkq84AdwjifkJljmgd0nRJhG73rH zGzNxtXYlDupaVC4flSQuM1A3kVtrMu5WPpdv5BIgwBg7KZP89ZYk7AKI e78IZYn4MQsWnXh2CXvS3tGANmiVuoiroh33rdXvGdBuCFM5onxzzZ1EH 6M4b88Gs+zxmZJEQXDnaj9hXKiGddQSIjXGqb+a4MTO8EjQlU6+rrWe+S jlsArY+z7NsWKltu+Kr/OAb5xERmv2eQUQ/Rkx3XApNQt4J4Dqyc4JvWx w==; X-IronPort-AV: E=McAfee;i="6500,9779,10539"; a="294214117" X-IronPort-AV: E=Sophos;i="5.96,184,1665471600"; d="scan'208";a="294214117" Received: from orsmga008.jf.intel.com ([10.7.209.65]) by fmsmga107.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 22 Nov 2022 06:18:19 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6500,9779,10539"; a="672499384" X-IronPort-AV: E=Sophos;i="5.96,184,1665471600"; d="scan'208";a="672499384" Received: from orsmsx603.amr.corp.intel.com ([10.22.229.16]) by orsmga008.jf.intel.com with ESMTP; 22 Nov 2022 06:18:19 -0800 Received: from orsmsx610.amr.corp.intel.com (10.22.229.23) by ORSMSX603.amr.corp.intel.com (10.22.229.16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.31; Tue, 22 Nov 2022 06:18:18 -0800 Received: from ORSEDG601.ED.cps.intel.com (10.7.248.6) by orsmsx610.amr.corp.intel.com (10.22.229.23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.31 via Frontend Transport; Tue, 22 Nov 2022 06:18:18 -0800 Received: from NAM04-MW2-obe.outbound.protection.outlook.com (104.47.73.168) by edgegateway.intel.com (134.134.137.102) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2375.31; Tue, 22 Nov 2022 06:18:18 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=BJ1JtyefUxXp1Q3IKH96HgKPsPmmuww9u9qIampbb5r280PJsBtbQMiCcAJzGuwBg75P41Nkf2WbD6nFMwcLTb6Nou+iR4b6jvP6Nv8b0tRXcLKZwY9Lfp1QHAB0lPx/UrkgpynFLcmxp76MfqTyCIg8j8ZWCEKJVXmicICSf22LRvTnN26dqCawQTYW6NMyqhffEyO/w+2fn5Iwkw7j24muDNwyVU/xUfiD6GsDM5aRADvcXpBLh4An5XE9l/bGruWmjgfVcvYKwnXdmjEipyvV/ie9aLq4wjsNVFwHuJwL47txuID2qIRms733hAsW2unDIEeudESyhnC9aGSVOQ== 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-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=GeE13AJ4VKxjWk6ycqR1Jinq60w9lgy82HcI/su9g/c=; b=buGxNAAVkAQkKQTYx1FJh0VNerwVbhxBUNFTKpynES9eGArSBCNg3k72FhcdhprtT+/hXtaJOm7Q8bqYSUlDUPcIIflXCr9e5kHo2vO6DZIHwvXL9kcVVGTPeyWQiKbcMp+nTsqZZx73com7zeaANgDy8+/jCpnXZBETiCEBiKrysom7SzteLTZt9k34tx3XEAPKwIkOuabfoZjfdpRGCrJ4OnT+WMNnbosypVWIo+4AQjv99Bc2j7tQEU84AfFjxTujw4NCxsbi/7QKyIOFkq2Fc93cHGmY7ZEGPd4osl4usRu62a5N+fmpBPNSN7Ut4pmapDZzR/mX3A7APjMOwg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none Received: from MW4PR11MB5872.namprd11.prod.outlook.com (2603:10b6:303:169::14) by IA1PR11MB7174.namprd11.prod.outlook.com (2603:10b6:208:41a::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5834.15; Tue, 22 Nov 2022 14:18:14 +0000 Received: from MW4PR11MB5872.namprd11.prod.outlook.com ([fe80::e9dd:f205:1970:4edb]) by MW4PR11MB5872.namprd11.prod.outlook.com ([fe80::e9dd:f205:1970:4edb%7]) with mapi id 15.20.5834.015; Tue, 22 Nov 2022 14:18:14 +0000 From: "Yao, Jiewen" To: "Xu, Min M" , "devel@edk2.groups.io" CC: "Dong, Eric" , "Ni, Ray" , "Kinney, Michael D" , "Huang, Yanbo" Subject: Re: [PATCH V1 1/1] UefiCpuPkg: Add back VmgExitLib to fix downstream incompatibility issue Thread-Topic: [PATCH V1 1/1] UefiCpuPkg: Add back VmgExitLib to fix downstream incompatibility issue Thread-Index: AQHY/n0UQurpSGMkH0O6tj+ybryFM65K/U3Q Date: Tue, 22 Nov 2022 14:18:13 +0000 Message-ID: References: <20221122141637.1631-1-min.m.xu@intel.com> In-Reply-To: <20221122141637.1631-1-min.m.xu@intel.com> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: MW4PR11MB5872:EE_|IA1PR11MB7174:EE_ x-ms-office365-filtering-correlation-id: 6aeb3e47-2a51-438f-2d1e-08dacc946484 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: BGuH7mWe4Ny0MqsfftRdHQxu6F3/s+Fmu/v/0vojHJtQP5T/asKKshX1Cme96GNNtqEi6kyO5Bg3qLRmII/ylGEkk5BprMQcMZQbUs66DREsUdT3oTHB9Bl8xx2fXH5fruYhwjKCqxLi4iC49oeoaXEvOp2/WWQri54A0r8v5ToMhVJhjN7GmyrNKjf8Fop0Sp9YFNSAsY4oMyu0EbM/F/G1UJIdQ7lfU3PQ3wSJHlHWvtCawvcqsqTwmX7b6t8wkoxYW7x2tDVAHMzbpMXKIvWlr3o9zgo9isvi+s0HUWzwWzP+ksa7Ka3bCPWtSR/0Yw1V8Ds+GtZSL+INf9tJ0VvG3XUaQbc22pDyQABlDDMfCNvWqyQ5Vq3hzfSK7QgqBbwY1VU7SyQlFvl7yX90rFtmdn2lM3ZCbEZEvfPua14AzBiq409Gfux628xmKwj4NwhajQFSW0Ik5phw+CyntX62RbLrjD7SnOq1U65Tf6KWw1CoPdnPkgd49m2OzRW0pjvLd05VG+3jqLTtJjpyBpcRH2/euRnFYZHWTVYb1MW8TCzkoUTxDOv0dwleWlvpCFTy+ZCr4mX6TrTqwf4jHITZaT3gLEUL14vs59rt4aQIkf0yFWH4xnZOpfeCbxENKj0r/hLmhwkpyFWKk7iw29k49JhRjF5+ghkZMBoC9ma5sCZxeblKEggu6hL19TRG5q6HHsUxrKhe0r/1gkZvMA== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MW4PR11MB5872.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230022)(39860400002)(136003)(376002)(346002)(366004)(396003)(451199015)(53546011)(8936002)(9686003)(33656002)(7696005)(26005)(6506007)(8676002)(71200400001)(76116006)(110136005)(107886003)(54906003)(64756008)(66556008)(66446008)(66476007)(66946007)(316002)(4326008)(41300700001)(478600001)(52536014)(30864003)(5660300002)(82960400001)(55016003)(38070700005)(122000001)(186003)(38100700002)(83380400001)(86362001)(2906002);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?lAwtf8OhyLzcncJlw+8S9KjOT2ZAl5bC7QeDMJvDKwCqdorKvpqAzCymI/HX?= =?us-ascii?Q?cUmGRvdnBoFDCZ+HBhKEMn/jcSSaOKHEpvcIpYSEg8QqwxT0cGEDUMwjsx2o?= =?us-ascii?Q?qJnL784q02nXoQUGmjK67g5QzdWcyVwLC/YsuxFisZdewtLpfPzdGHP3q7k+?= =?us-ascii?Q?Sm0hqj0i6BBALT3qhcAq4Wmh4BSnjG8Bm+8vkse9OKCK0CQ3D1KhzBjIjQye?= =?us-ascii?Q?GtnHWB4Kpa3jUCbwf16F6S48iHPsoFO14Kfx4E4HyUzcwPUqCf9VdLNIzWco?= =?us-ascii?Q?Z0s+rji6zwd3DZ5jHtobDVGMntaqCEl3VqAl+n0k6ObXnAzzUd6bSDhOMsw6?= =?us-ascii?Q?AQIaWlhYPzgkuSbsyc9V1SlWpSXLV9xpzfLOz+N5tfq/qy4ws7oanBNISkfH?= =?us-ascii?Q?ursPnmbDVHR3HC5XJm3tJIdpO1sTLrbfXgHRayKFYvzZvCMS3oaa98hH58QF?= =?us-ascii?Q?OlZ0MB3J6I/ZUaQpaNcloxJUKyyoKPKrYrtXTHcCHflpGhoKRbnhfj2Wx9/8?= =?us-ascii?Q?9kyHleuSKFKZkOix/ncFXFnidmTVW9T6e4+g7a1EancibcWpNSKon6ERltgd?= =?us-ascii?Q?OiU2lASzc34TC3El1VPWcomPQ0XmUlpYDe2RIF9nDqV6c+C7HvwHdCKEdiEC?= =?us-ascii?Q?XMfMXnu0m2Jnxm1EpKYgQLY54LJX07JeWwnEx5xGU+ImLpaBSQE8T1OzJfDu?= =?us-ascii?Q?93kBld4jBhU2XZ9mvAfi8PyLWZIXhCZcjM1Z3yA9QfWYHZG0z7iOEy23cMKW?= =?us-ascii?Q?4WLVj+wB/XkIShti0SWGVC3ydj21XtrOztywwvc6JmSqRBtiR3H4Zs+H7XWB?= =?us-ascii?Q?Yzu9t+M7CwRTLDneGm6GFtNvKXoD63kPki+dGe18+Lto0mIu0CTjyrLF823+?= =?us-ascii?Q?BlnbkmTlz6jS+nw7KGBfe5mmLcfBoHQLMl0jZjrOOpR+8pk9US5KkL16rRow?= =?us-ascii?Q?jPncroIIXurBsX7l6lX2AAwDD5cJE4yV+aRRe3em4WUUvnkR9PcleyFt9n8r?= =?us-ascii?Q?ZsBCUe6HLo4r9cYeOFSJAS4o3+2IJsNBIFMGky9s7tnkdYj9E+C2TDJ0swmh?= =?us-ascii?Q?bg1KfKNPE1JeCld90pAG5PGtNqgrf5XMceGF4fVPPUWwlWl5I4dJRl2TvjAM?= =?us-ascii?Q?iBRH3dvyk0JiDXgL56uQHwz47okrGldU0yelFPU4AyFm3ckN3N/3FVMUCYYu?= =?us-ascii?Q?d2oG+HOTPzXi0LwW0XaQu2HA+P52B3Y+EnnKzPDo3TwJR41AKWbmfiPSF1Ol?= =?us-ascii?Q?vgF4yO7ECjHGKJfFgB5Sy/GAUBl4eHtNfnVp5Ncxq+tImw9uQCplB5zH6oVq?= =?us-ascii?Q?boi6xd0f2BqCsoHZDz02ImId1MLGCQ4C4X0sXqNyXt/r2p2zMggWWwy4Ui3/?= =?us-ascii?Q?N6O63uamzS9jbMXbibU6897kMdHAUhQlFtrViDASCWnifDfB0v3p/dDk0cXw?= =?us-ascii?Q?QJzMAoFID1r0O+9kGhyIVbo90hIMXCOmSz+r3fLmUgvQzz/y5eDmcaupfeqI?= =?us-ascii?Q?Sg47Vbzwiy0JbSK56VXxno+kXtR+Mog/+N8rVU59BD7sgESrhdjnjJO3PfBP?= =?us-ascii?Q?Mq4UUGp90a+8zBKFZcW/bDKhEvWeFuDd+VBDKuQs?= MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: MW4PR11MB5872.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6aeb3e47-2a51-438f-2d1e-08dacc946484 X-MS-Exchange-CrossTenant-originalarrivaltime: 22 Nov 2022 14:18:13.9800 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: PUsPbovIYR3L4bH/L6EGTuzZpufyp/Ek8mt4rmDJg8YzYikK75KRyLbJMZv+HHhGpdYsGPGRmjCI50JOz3iXYg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: IA1PR11MB7174 Return-Path: jiewen.yao@intel.com X-OriginatorOrg: intel.com Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Can we put this patch to downstream directly? Why it must be upstream? > -----Original Message----- > From: Xu, Min M > Sent: Tuesday, November 22, 2022 10:17 PM > To: devel@edk2.groups.io > Cc: Xu, Min M ; Dong, Eric ; > Ni, Ray ; Kinney, Michael D > ; Yao, Jiewen ; > Huang, Yanbo > Subject: [PATCH V1 1/1] UefiCpuPkg: Add back VmgExitLib to fix > downstream incompatibility issue >=20 > From: Min M Xu >=20 > VmgExitLib is renamed as CcExitLib in commit a89f558d3c. This brought > incompatibility issues for platforms downstream. This patch adds back > VmgExitLib (VmgExitLib.h & VmgExitLibNull) to fix the issue this time > and we will work out the long term solution later. After the > incompatibility of downstream is resolved, this patch will be reverted. >=20 > Cc: Eric Dong > Cc: Ray Ni > Cc: Michael D Kinney > Cc: Jiewen Yao > Cc: Huang Yanbo > Signed-off-by: Min Xu > --- > UefiCpuPkg/Include/Library/VmgExitLib.h | 173 ++++++++++++++++++ > .../Library/VmgExitLibNull/VmTdExitNull.c | 38 ++++ > .../Library/VmgExitLibNull/VmgExitLibNull.c | 165 +++++++++++++++++ > .../Library/VmgExitLibNull/VmgExitLibNull.inf | 28 +++ > .../Library/VmgExitLibNull/VmgExitLibNull.uni | 15 ++ > UefiCpuPkg/UefiCpuPkg.dec | 3 + > UefiCpuPkg/UefiCpuPkg.dsc | 2 + > 7 files changed, 424 insertions(+) > create mode 100644 UefiCpuPkg/Include/Library/VmgExitLib.h > create mode 100644 UefiCpuPkg/Library/VmgExitLibNull/VmTdExitNull.c > create mode 100644 UefiCpuPkg/Library/VmgExitLibNull/VmgExitLibNull.c > create mode 100644 > UefiCpuPkg/Library/VmgExitLibNull/VmgExitLibNull.inf > create mode 100644 > UefiCpuPkg/Library/VmgExitLibNull/VmgExitLibNull.uni >=20 > diff --git a/UefiCpuPkg/Include/Library/VmgExitLib.h > b/UefiCpuPkg/Include/Library/VmgExitLib.h > new file mode 100644 > index 000000000000..9fab90afd226 > --- /dev/null > +++ b/UefiCpuPkg/Include/Library/VmgExitLib.h > @@ -0,0 +1,173 @@ > +/** @file > + Public header file for the VMGEXIT Support library class. > + > + This library class defines some routines used when invoking the VMGEXI= T > + instruction in support of SEV-ES and to handle #VC exceptions. > + > + Copyright (C) 2020, Advanced Micro Devices, Inc. All rights reserved.<= BR> > + SPDX-License-Identifier: BSD-2-Clause-Patent > + > +**/ > + > +#ifndef VMG_EXIT_LIB_H_ > +#define VMG_EXIT_LIB_H_ > + > +#include > +#include > + > +#define VE_EXCEPTION 20 > + > +/** > + Perform VMGEXIT. > + > + Sets the necessary fields of the GHCB, invokes the VMGEXIT instruction > and > + then handles the return actions. > + > + @param[in, out] Ghcb A pointer to the GHCB > + @param[in] ExitCode VMGEXIT code to be assigned to the > SwExitCode > + field of the GHCB. > + @param[in] ExitInfo1 VMGEXIT information to be assigned to the > + SwExitInfo1 field of the GHCB. > + @param[in] ExitInfo2 VMGEXIT information to be assigned to the > + SwExitInfo2 field of the GHCB. > + > + @retval 0 VMGEXIT succeeded. > + @return Exception number to be propagated, VMGEXIT > + processing did not succeed. > + > +**/ > +UINT64 > +EFIAPI > +VmgExit ( > + IN OUT GHCB *Ghcb, > + IN UINT64 ExitCode, > + IN UINT64 ExitInfo1, > + IN UINT64 ExitInfo2 > + ); > + > +/** > + Perform pre-VMGEXIT initialization/preparation. > + > + Performs the necessary steps in preparation for invoking VMGEXIT. Must > be > + called before setting any fields within the GHCB. > + > + @param[in, out] Ghcb A pointer to the GHCB > + @param[in, out] InterruptState A pointer to hold the current interru= pt > + state, used for restoring in VmgDone = () > + > +**/ > +VOID > +EFIAPI > +VmgInit ( > + IN OUT GHCB *Ghcb, > + IN OUT BOOLEAN *InterruptState > + ); > + > +/** > + Perform post-VMGEXIT cleanup. > + > + Performs the necessary steps to cleanup after invoking VMGEXIT. Must > be > + called after obtaining needed fields within the GHCB. > + > + @param[in, out] Ghcb A pointer to the GHCB > + @param[in] InterruptState An indicator to conditionally (re)ena= ble > + interrupts > + > +**/ > +VOID > +EFIAPI > +VmgDone ( > + IN OUT GHCB *Ghcb, > + IN BOOLEAN InterruptState > + ); > + > +/** > + Marks a specified offset as valid in the GHCB. > + > + The ValidBitmap area represents the areas of the GHCB that have been > marked > + valid. Set the bit in ValidBitmap for the input offset. > + > + @param[in, out] Ghcb A pointer to the GHCB > + @param[in] Offset Qword offset in the GHCB to mark valid > + > +**/ > +VOID > +EFIAPI > +VmgSetOffsetValid ( > + IN OUT GHCB *Ghcb, > + IN GHCB_REGISTER Offset > + ); > + > +/** > + Checks if a specified offset is valid in the GHCB. > + > + The ValidBitmap area represents the areas of the GHCB that have been > marked > + valid. Return whether the bit in the ValidBitmap is set for the input = offset. > + > + @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 > + ); > + > +/** > + Handle a #VC exception. > + > + Performs the necessary processing to handle a #VC exception. > + > + The base library function returns an error equal to VC_EXCEPTION, > + to be propagated to the standard exception handling stack. > + > + @param[in, out] ExceptionType Pointer to an EFI_EXCEPTION_TYPE to > be set > + as value to use on error. > + @param[in, out] SystemContext Pointer to EFI_SYSTEM_CONTEXT > + > + @retval EFI_SUCCESS Exception handled > + @retval EFI_UNSUPPORTED #VC not supported, (new) exception > value to > + propagate provided > + @retval EFI_PROTOCOL_ERROR #VC handling failed, (new) exception > value to > + propagate provided > + > +**/ > +EFI_STATUS > +EFIAPI > +VmgExitHandleVc ( > + IN OUT EFI_EXCEPTION_TYPE *ExceptionType, > + IN OUT EFI_SYSTEM_CONTEXT SystemContext > + ); > + > +/** > + Handle a #VE exception. > + > + Performs the necessary processing to handle a #VE exception. > + > + The base library function returns an error equal to VE_EXCEPTION, > + to be propagated to the standard exception handling stack. > + > + @param[in, out] ExceptionType Pointer to an EFI_EXCEPTION_TYPE to > be set > + as value to use on error. > + @param[in, out] SystemContext Pointer to EFI_SYSTEM_CONTEXT > + > + @retval EFI_SUCCESS Exception handled > + @retval EFI_UNSUPPORTED #VE not supported, (new) exception > value to > + propagate provided > + @retval EFI_PROTOCOL_ERROR #VE handling failed, (new) exception > value to > + propagate provided > + > +**/ > +EFI_STATUS > +EFIAPI > +VmTdExitHandleVe ( > + IN OUT EFI_EXCEPTION_TYPE *ExceptionType, > + IN OUT EFI_SYSTEM_CONTEXT SystemContext > + ); > + > +#endif > diff --git a/UefiCpuPkg/Library/VmgExitLibNull/VmTdExitNull.c > b/UefiCpuPkg/Library/VmgExitLibNull/VmTdExitNull.c > new file mode 100644 > index 000000000000..6a4e8087cb89 > --- /dev/null > +++ b/UefiCpuPkg/Library/VmgExitLibNull/VmTdExitNull.c > @@ -0,0 +1,38 @@ > +/** @file > + > + Copyright (c) 2021, Intel Corporation. All rights reserved.
> + > + SPDX-License-Identifier: BSD-2-Clause-Patent > + > +**/ > +#include > +#include > +#include > + > +/** > + Handle a #VE exception. > + > + Performs the necessary processing to handle a #VE exception. > + > + @param[in, out] ExceptionType Pointer to an EFI_EXCEPTION_TYPE to > be set > + as value to use on error. > + @param[in, out] SystemContext Pointer to EFI_SYSTEM_CONTEXT > + > + @retval EFI_SUCCESS Exception handled > + @retval EFI_UNSUPPORTED #VE not supported, (new) exception > value to > + propagate provided > + @retval EFI_PROTOCOL_ERROR #VE handling failed, (new) exception > value to > + propagate provided > + > +**/ > +EFI_STATUS > +EFIAPI > +VmTdExitHandleVe ( > + IN OUT EFI_EXCEPTION_TYPE *ExceptionType, > + IN OUT EFI_SYSTEM_CONTEXT SystemContext > + ) > +{ > + *ExceptionType =3D VE_EXCEPTION; > + > + return EFI_UNSUPPORTED; > +} > diff --git a/UefiCpuPkg/Library/VmgExitLibNull/VmgExitLibNull.c > b/UefiCpuPkg/Library/VmgExitLibNull/VmgExitLibNull.c > new file mode 100644 > index 000000000000..d661d8597434 > --- /dev/null > +++ b/UefiCpuPkg/Library/VmgExitLibNull/VmgExitLibNull.c > @@ -0,0 +1,165 @@ > +/** @file > + VMGEXIT Base Support Library. > + > + Copyright (C) 2020, Advanced Micro Devices, Inc. All rights reserved.<= BR> > + SPDX-License-Identifier: BSD-2-Clause-Patent > + > +**/ > + > +#include > +#include > +#include > + > +/** > + Perform VMGEXIT. > + > + Sets the necessary fields of the GHCB, invokes the VMGEXIT instruction > and > + then handles the return actions. > + > + The base library function returns an error in the form of a > + GHCB_EVENT_INJECTION representing a GP_EXCEPTION. > + > + @param[in, out] Ghcb A pointer to the GHCB > + @param[in] ExitCode VMGEXIT code to be assigned to the > SwExitCode > + field of the GHCB. > + @param[in] ExitInfo1 VMGEXIT information to be assigned to the > + SwExitInfo1 field of the GHCB. > + @param[in] ExitInfo2 VMGEXIT information to be assigned to the > + SwExitInfo2 field of the GHCB. > + > + @retval 0 VMGEXIT succeeded. > + @return Exception number to be propagated, VMGEXIT > + processing did not succeed. > + > +**/ > +UINT64 > +EFIAPI > +VmgExit ( > + IN OUT GHCB *Ghcb, > + IN UINT64 ExitCode, > + IN UINT64 ExitInfo1, > + IN UINT64 ExitInfo2 > + ) > +{ > + GHCB_EVENT_INJECTION Event; > + > + Event.Uint64 =3D 0; > + Event.Elements.Vector =3D GP_EXCEPTION; > + Event.Elements.Type =3D GHCB_EVENT_INJECTION_TYPE_EXCEPTION; > + Event.Elements.Valid =3D 1; > + > + return Event.Uint64; > +} > + > +/** > + Perform pre-VMGEXIT initialization/preparation. > + > + Performs the necessary steps in preparation for invoking VMGEXIT. Must > be > + called before setting any fields within the GHCB. > + > + @param[in, out] Ghcb A pointer to the GHCB > + @param[in, out] InterruptState A pointer to hold the current interru= pt > + state, used for restoring in VmgDone = () > + > +**/ > +VOID > +EFIAPI > +VmgInit ( > + IN OUT GHCB *Ghcb, > + IN OUT BOOLEAN *InterruptState > + ) > +{ > +} > + > +/** > + Perform post-VMGEXIT cleanup. > + > + Performs the necessary steps to cleanup after invoking VMGEXIT. Must > be > + called after obtaining needed fields within the GHCB. > + > + @param[in, out] Ghcb A pointer to the GHCB > + @param[in] InterruptState An indicator to conditionally (re)ena= ble > + interrupts > + > +**/ > +VOID > +EFIAPI > +VmgDone ( > + IN OUT GHCB *Ghcb, > + IN BOOLEAN InterruptState > + ) > +{ > +} > + > +/** > + Marks a field at the specified offset as valid in the GHCB. > + > + The ValidBitmap area represents the areas of the GHCB that have been > marked > + valid. Set the bit in ValidBitmap for the input offset. > + > + @param[in, out] Ghcb Pointer to the Guest-Hypervisor Communication > Block > + @param[in] Offset Qword offset in the GHCB to mark valid > + > +**/ > +VOID > +EFIAPI > +VmgSetOffsetValid ( > + IN OUT GHCB *Ghcb, > + IN GHCB_REGISTER Offset > + ) > +{ > +} > + > +/** > + Checks if a specified offset is valid in the GHCB. > + > + The ValidBitmap area represents the areas of the GHCB that have been > marked > + valid. Return whether the bit in the ValidBitmap is set for the input = offset. > + > + @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 > + ) > +{ > + return FALSE; > +} > + > +/** > + Handle a #VC exception. > + > + Performs the necessary processing to handle a #VC exception. > + > + The base library function returns an error equal to VC_EXCEPTION, > + to be propagated to the standard exception handling stack. > + > + @param[in, out] ExceptionType Pointer to an EFI_EXCEPTION_TYPE to > be set > + as value to use on error. > + @param[in, out] SystemContext Pointer to EFI_SYSTEM_CONTEXT > + > + @retval EFI_SUCCESS Exception handled > + @retval EFI_UNSUPPORTED #VC not supported, (new) exception > value to > + propagate provided > + @retval EFI_PROTOCOL_ERROR #VC handling failed, (new) exception > value to > + propagate provided > + > +**/ > +EFI_STATUS > +EFIAPI > +VmgExitHandleVc ( > + IN OUT EFI_EXCEPTION_TYPE *ExceptionType, > + IN OUT EFI_SYSTEM_CONTEXT SystemContext > + ) > +{ > + *ExceptionType =3D VC_EXCEPTION; > + > + return EFI_UNSUPPORTED; > +} > diff --git a/UefiCpuPkg/Library/VmgExitLibNull/VmgExitLibNull.inf > b/UefiCpuPkg/Library/VmgExitLibNull/VmgExitLibNull.inf > new file mode 100644 > index 000000000000..06d3b0e7e63e > --- /dev/null > +++ b/UefiCpuPkg/Library/VmgExitLibNull/VmgExitLibNull.inf > @@ -0,0 +1,28 @@ > +## @file > +# VMGEXIT Support Library. > +# > +# Copyright (C) 2020, Advanced Micro Devices, Inc. All rights reserved.=
> +# SPDX-License-Identifier: BSD-2-Clause-Patent > +# > +## > + > +[Defines] > + INF_VERSION =3D 0x00010005 > + BASE_NAME =3D VmgExitLibNull > + MODULE_UNI_FILE =3D VmgExitLibNull.uni > + FILE_GUID =3D cbd1992f-c26e-42f9-94d9-57d0468c4c5= 6 > + MODULE_TYPE =3D BASE > + VERSION_STRING =3D 1.0 > + LIBRARY_CLASS =3D VmgExitLib > + > +[Sources.common] > + VmgExitLibNull.c > + VmTdExitNull.c > + > +[Packages] > + MdePkg/MdePkg.dec > + UefiCpuPkg/UefiCpuPkg.dec > + > +[LibraryClasses] > + BaseLib > + > diff --git a/UefiCpuPkg/Library/VmgExitLibNull/VmgExitLibNull.uni > b/UefiCpuPkg/Library/VmgExitLibNull/VmgExitLibNull.uni > new file mode 100644 > index 000000000000..8639bc0e8ce9 > --- /dev/null > +++ b/UefiCpuPkg/Library/VmgExitLibNull/VmgExitLibNull.uni > @@ -0,0 +1,15 @@ > +// /** @file > +// VMGEXIT support library instance. > +// > +// VMGEXIT support library instance. > +// > +// Copyright (C) 2020, Advanced Micro Devices, Inc. All rights reserved.=
> +// SPDX-License-Identifier: BSD-2-Clause-Patent > +// > +// **/ > + > + > +#string STR_MODULE_ABSTRACT #language en-US "VMGEXIT > support NULL library instance" > + > +#string STR_MODULE_DESCRIPTION #language en-US "VMGEXIT > support NULL library instance." > + > diff --git a/UefiCpuPkg/UefiCpuPkg.dec b/UefiCpuPkg/UefiCpuPkg.dec > index cff239d5283e..8058b679412f 100644 > --- a/UefiCpuPkg/UefiCpuPkg.dec > +++ b/UefiCpuPkg/UefiCpuPkg.dec > @@ -53,6 +53,9 @@ > ## > MpInitLib|Include/Library/MpInitLib.h >=20 > + ## @libraryclass Provides function to support VMGEXIT processing. > + VmgExitLib|Include/Library/VmgExitLib.h > + > ## @libraryclass Provides function to support CcExit processing. > CcExitLib|Include/Library/CcExitLib.h >=20 > diff --git a/UefiCpuPkg/UefiCpuPkg.dsc b/UefiCpuPkg/UefiCpuPkg.dsc > index 67b0ce46e455..57c74ba844d2 100644 > --- a/UefiCpuPkg/UefiCpuPkg.dsc > +++ b/UefiCpuPkg/UefiCpuPkg.dsc > @@ -59,6 +59,7 @@ >=20 > PeCoffGetEntryPointLib|MdePkg/Library/BasePeCoffGetEntryPointLib/Base > PeCoffGetEntryPointLib.inf >=20 > PeCoffExtraActionLib|MdePkg/Library/BasePeCoffExtraActionLibNull/BaseP > eCoffExtraActionLibNull.inf >=20 > TpmMeasurementLib|MdeModulePkg/Library/TpmMeasurementLibNull/T > pmMeasurementLibNull.inf > + VmgExitLib|UefiCpuPkg/Library/VmgExitLibNull/VmgExitLibNull.inf > CcExitLib|UefiCpuPkg/Library/CcExitLibNull/CcExitLibNull.inf > MicrocodeLib|UefiCpuPkg/Library/MicrocodeLib/MicrocodeLib.inf >=20 > SmmCpuRendezvousLib|UefiCpuPkg/Library/SmmCpuRendezvousLib/Smm > CpuRendezvousLib.inf > @@ -163,6 +164,7 @@ > UefiCpuPkg/Library/SmmCpuFeaturesLib/SmmCpuFeaturesLib.inf > UefiCpuPkg/Library/SmmCpuFeaturesLib/SmmCpuFeaturesLibStm.inf >=20 > UefiCpuPkg/Library/SmmCpuFeaturesLib/StandaloneMmCpuFeaturesLib.inf > + UefiCpuPkg/Library/VmgExitLibNull/VmgExitLibNull.inf > UefiCpuPkg/Library/CcExitLibNull/CcExitLibNull.inf > UefiCpuPkg/PiSmmCommunication/PiSmmCommunicationPei.inf > UefiCpuPkg/PiSmmCommunication/PiSmmCommunicationSmm.inf > -- > 2.29.2.windows.2