From nobody Sun May 5 15:05:54 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zoho.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+47635+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 1568922748782552.2989963807394; Thu, 19 Sep 2019 12:52:28 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id yfyJYY1788612xeSIq6jZaxz; Thu, 19 Sep 2019 12:52:27 -0700 X-Received: from NAM02-CY1-obe.outbound.protection.outlook.com (NAM02-CY1-obe.outbound.protection.outlook.com []) by groups.io with SMTP; Thu, 19 Sep 2019 12:52:27 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=doSKbmmICibpxRbb1aoLnQ88v5S1MdcYO7jgFvHqKtceMUTDu3NEUucNlbA+jL907GX/2mJxaWZCHLHdh63CCt+7EqHvzKK+9kFRV/2M3b6qDzkKcJK+75NhNJphOZvOR5hO3vdRuQmqYjFbxJtL6u0gYA+X64jjWYOTDBmDocZ45QzaAWuh42oSsj2Yby+9cPx/FLJlqo3HhI3BR7YxY1nBoFxjypbUfnQ/KHWCqXhF6CcLGwsEmPP1s+D0H6dDu98qpmuh1l7/jfXg7C4iU3IqzxOgmJSkiLEytI2hIos30l6h07Ft+XjnBD8RlUfx+zbIqWSkDSBfTE+iQeQgVw== 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=LGJ1YnZNaLOJ4y3r4pVkhogyYH0CMt0lTXjn/4Mp0QQ=; b=Z0+FFKPJQrmtFCsMi0Zi89R8H4P0/y+ODEO6LKu6AnPai6wK2BPwcK86Geq9DXjvAIUxwANK0F6YGt09FwA63ttQoiR6AxOFJJpR6FXIszHnidJOKlj+OkrLKMx9fZYT26KQFgeclT9PzWEETorBaxHoTvZMzKH6/Il1P3MBS4IdsR89S8MLU/+VmCxEY33ah5jnxh5j95mo0DbFPYX0t5OQvSF+R13cpXQQhHNeNPd1RByypQx+TIjMQ8e2tp8Qxe+fpO1Vibf1qAGFNyZjjRtEVPexhsJYEoxcPJZP+tpJs9hABnWKeB3aPk2O18t61HcUFrlrk1Bk4Fu5gVNk3w== 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 DM6PR12MB3163.namprd12.prod.outlook.com (20.179.104.150) by DM6PR12MB3228.namprd12.prod.outlook.com (20.179.105.96) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2263.13; Thu, 19 Sep 2019 19:52:25 +0000 X-Received: from DM6PR12MB3163.namprd12.prod.outlook.com ([fe80::400e:f0c3:7ca:2fcc]) by DM6PR12MB3163.namprd12.prod.outlook.com ([fe80::400e:f0c3:7ca:2fcc%6]) with mapi id 15.20.2284.009; Thu, 19 Sep 2019 19:52:25 +0000 From: "Lendacky, Thomas" To: "devel@edk2.groups.io" CC: Jordan Justen , Laszlo Ersek , Ard Biesheuvel , Michael D Kinney , Liming Gao , Eric Dong , Ray Ni , "Singh, Brijesh" , Jian J Wang , Hao A Wu Subject: [edk2-devel] [RFC PATCH v2 01/44] MdePkg: Create PCDs to be used in support of SEV-ES Thread-Topic: [RFC PATCH v2 01/44] MdePkg: Create PCDs to be used in support of SEV-ES Thread-Index: AQHVbyPCOoWFuPvcJUGqXLusBCQyxg== Date: Thu, 19 Sep 2019 19:52:25 +0000 Message-ID: <1161605f56f324b88833496e448d1a81072387e8.1568922728.git.thomas.lendacky@amd.com> References: In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: SN4PR0501CA0146.namprd05.prod.outlook.com (2603:10b6:803:2c::24) To DM6PR12MB3163.namprd12.prod.outlook.com (2603:10b6:5:182::22) x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [165.204.78.1] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 019c2e55-cada-4c3e-7339-08d73d3ae4d1 x-ms-office365-filtering-ht: Tenant x-ms-traffictypediagnostic: DM6PR12MB3228: x-ms-exchange-purlcount: 1 x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:7219; Received-SPF: pass (zoho.com: domain of groups.io designates 66.175.222.12 as permitted sender) client-ip=66.175.222.12; envelope-from=bounce+27952+47635+1787277+3901457@groups.io; helo=web01.groups.io; received-spf: None (protection.outlook.com: amd.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: SjSuBqX/gB7rHC53XLW2rFXTRghojD3IWCREBJAr8w37/oJSqCUfg/MMsQPLTtHXj1AAxpSaDdP0SmLKb0RoJVtcdKY5VZul1fDiWgLvmsOpFsEx5fSXWtj3J2dg6RM5JeftzA2O2MXiQXvfdfq6FxTtBtzlVpjYx+N1zPdBQp/xtHH09bLECGU8op6J4XkO2a4MbtGUQ05AEt0xfrRDC4Gg0rGSvywyKzI+k74wvkT/hk/0XUfFd6OdCeTkBxiOtuFrGhvQPiZlAUWQK9ThWfrQH/4Cb5vlO2UiZqLu5Nm4VIFxnyTVDzdwhTvA9ZG0nCyuJGBcIWP6qidb0PARxS8WiuPsEDtrKn/9XewmoqWhbrrTY6aGtDf3baVLg6q9Lt1srlyp1cDIF6dIODzXpsvSasNdWjVEiBxVMRgocXI= MIME-Version: 1.0 X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: 019c2e55-cada-4c3e-7339-08d73d3ae4d1 X-MS-Exchange-CrossTenant-originalarrivaltime: 19 Sep 2019 19:52:25.6221 (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: 8fRUiA6UgJ/H5Cpe3TfDvF/rQQ8enVlDkrtDKmbqvGmcaUKRNZpxed8DEh1jFwKsot/X+VVGlzji64cSm6FK/g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR12MB3228 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: vCZaw1XaSYoYVSB2y2mMibYtx1787277AA= Content-Language: en-US Content-ID: <2C59EA31B2174341BD1CE27A452BC094@namprd12.prod.outlook.com> Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1568922747; bh=5PKiIZoZXgHRGplsYIVHVx+nYpXlbIkUCsgjzmAH8f4=; h=CC:Content-Type:Date:From:Reply-To:Subject:To; b=HoXhi+HN42C2PBYwQEHYMS9SYVtG1ozPDnWxUbzWmrkW/4295DIa4jkXgbeIM11wuLc gSF+SogRo9JFRAQYieU0zfbVLKAEBsVKciS8kRcx46K+cL7djIjd/8Y3SGwFr1pYFAQx6 /vokgaK8wxEbarGPviOBydkb5pU1uAWGqyU= 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=3D2198 Three new PCDs are needed to support SEV-ES under OVMF: - PcdSevEsActive: BOOLEAN value used to indicate if SEV-ES is active - PcdGhcbBase: UINT64 value that is the base address of the GHCB allocation. - PcdGhcbSize: UINT64 value that is the size, in bytes, of the GHCB allocation (size is dependent on the number of APs). Cc: Jian J Wang Cc: Hao A Wu Signed-off-by: Tom Lendacky --- MdeModulePkg/MdeModulePkg.dec | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/MdeModulePkg/MdeModulePkg.dec b/MdeModulePkg/MdeModulePkg.dec index 19935c88fab8..c1ec3e335143 100644 --- a/MdeModulePkg/MdeModulePkg.dec +++ b/MdeModulePkg/MdeModulePkg.dec @@ -2002,6 +2002,21 @@ [PcdsFixedAtBuild, PcdsPatchableInModule, PcdsDynami= c, PcdsDynamicEx] # @Prompt Capsule On Disk relocation device path. gEfiMdeModulePkgTokenSpaceGuid.PcdCodRelocationDevPath|{0xFF}|VOID*|0x00= 00002f =20 + ## Indicates whether SEV-ES is active + # TRUE - SEV-ES is active + # FALSE - SEV-ES is not active + # @Prompt SEV-ES Status + gEfiMdeModulePkgTokenSpaceGuid.PcdSevEsActive|FALSE|BOOLEAN|0x00011060 + + ## The base address of the GHCB pool allocation. + # @Prompt GHCB Pool Base Address + gEfiMdeModulePkgTokenSpaceGuid.PcdGhcbBase|0|UINT64|0x00011061 + + ## The total size of the GHCB allocation. + # The amount of memory allocated for GHCBs is dependent on the number o= f APs. + # @Prompt GHCB Pool Size + gEfiMdeModulePkgTokenSpaceGuid.PcdGhcbSize|0|UINT64|0x00011062 + [PcdsPatchableInModule] ## Specify memory size with page number for PEI code when # Loading Module at Fixed Address feature is enabled. --=20 2.17.1 -=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 (#47635): https://edk2.groups.io/g/devel/message/47635 Mute This Topic: https://groups.io/mt/34203535/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- From nobody Sun May 5 15:05:54 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zoho.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+47636+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 1568922749717811.6988735685042; Thu, 19 Sep 2019 12:52:29 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id 7IH9YY1788612xT2m9f5VPe6; Thu, 19 Sep 2019 12:52:28 -0700 X-Received: from NAM03-BY2-obe.outbound.protection.outlook.com (NAM03-BY2-obe.outbound.protection.outlook.com [40.107.78.74]) by groups.io with SMTP; Thu, 19 Sep 2019 12:52:28 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=aUAkxe1ecbvuZMu9COnr/6cI04jSgrb55ejSfa8tdphPHpmRVQ+ul3AyGCuRAjTaO/Qth6Fh5KKjbZwzavPE03iNiMmoxXIk6lQFM2La9oaoRzBSAKAJ5+dro5iieg4WXSKrN+56qRZvB1uqwubUwhD+OniXP0GEsWgLkznZLb6L4XPmsVoqkWhqlccQLVKfHKAzlzKoAxCUcqphAgigYaa3dP1UfIOW3Oa6cGaQeOfyzG8X/32wi9lfE4kBIOVtJ4OlHUW5Yr1RWpUlxFHE72Fh7rQv/19tlEarDe0zT3fOOTT6ungM7ZRxsOw8zU9uhNFcYRHqsCXxXZfd+9BM6A== 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=kv1EXIxr+fLzY+r1GMHLEyXCVxLXt8v2k34AK3ZY8Xs=; b=n7YAuWy1hA4y41czAvmjplug7LONY9MpjPFBK9o5ZacHDNL24wRzDhSwKYAoXbTuqjmuqcXWISAcw07TfKd7B2XS4AHIoWLeVXVBEJa8Tpufr+eCFNGvw+34IUAzBMGx+cRw3zLuNIx7lMMmMVD2p85elh+HRN+qqEAmRBxestwr9mjbRhhXJAmvkAVBRRa2FPpX+VHeZX76N4cecALN8EWln9jL3/Z7jlcPw6iIzfhcoyRUGhcGbQess5kWJ8wa4IhOey4WtDctfliTxGyXHY+xOikpnBpbQJBSKHi+0T2tD2RDugJ/ejXQ71cA+lFs85BUVfQWL69Aws7QcQYKJA== 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 DM6PR12MB3163.namprd12.prod.outlook.com (20.179.104.150) by DM6PR12MB3228.namprd12.prod.outlook.com (20.179.105.96) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2263.13; Thu, 19 Sep 2019 19:52:26 +0000 X-Received: from DM6PR12MB3163.namprd12.prod.outlook.com ([fe80::400e:f0c3:7ca:2fcc]) by DM6PR12MB3163.namprd12.prod.outlook.com ([fe80::400e:f0c3:7ca:2fcc%6]) with mapi id 15.20.2284.009; Thu, 19 Sep 2019 19:52:26 +0000 From: "Lendacky, Thomas" To: "devel@edk2.groups.io" CC: Jordan Justen , Laszlo Ersek , Ard Biesheuvel , Michael D Kinney , Liming Gao , Eric Dong , Ray Ni , "Singh, Brijesh" Subject: [edk2-devel] [RFC PATCH v2 02/44] OvmfPkg/MemEncryptSevLib: Add an SEV-ES guest indicator function Thread-Topic: [RFC PATCH v2 02/44] OvmfPkg/MemEncryptSevLib: Add an SEV-ES guest indicator function Thread-Index: AQHVbyPDZ1/NzxAWkU2QuybFuRRTKA== Date: Thu, 19 Sep 2019 19:52:26 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: SN4PR0501CA0146.namprd05.prod.outlook.com (2603:10b6:803:2c::24) To DM6PR12MB3163.namprd12.prod.outlook.com (2603:10b6:5:182::22) x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [165.204.78.1] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 721b94ea-aa7d-4b22-66c7-08d73d3ae585 x-ms-office365-filtering-ht: Tenant x-ms-traffictypediagnostic: DM6PR12MB3228: x-ms-exchange-purlcount: 1 x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:4125; Received-SPF: pass (zoho.com: domain of groups.io designates 66.175.222.12 as permitted sender) client-ip=66.175.222.12; envelope-from=bounce+27952+47636+1787277+3901457@groups.io; helo=web01.groups.io; received-spf: None (protection.outlook.com: amd.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: Ha15/3lxibhmrTgWlddwik56tUh6BPEZXbtVTVTb/bGqHVzepZ87VoZC2S0eb/aEn9SfDtk5GzhZ28XP0ZsHBhfDUuOEbA27KvSSG9IHSejYm6JlxxL5+cwO9ha2S+HZKPEOaE9j4YzDv5yAp/D9XbB1l5KyxpKpylTSlm64/YSvaTvR//GhLqfhBoFLeglOs+2txL5T43/pw4pyHsjNl0hMWMNhhZi4vN/q+xkrXgMd6dZFLB3Mnjilnb/xGPhbrCXrXDgzDlLcneNl7yaOXFR3zzHuu/MBmQeR3jMOpf3Jx0+Kl5/LSmDSpLh6iR8qMZmLLE8h6ITZv/fm+EkLuZYBzvd+LM+S4203An8E+EnZcVfTf1cxtOxdSGwn/loZ0DKJASTIr9/4TmvjBBX0K0Ce4AxtpdzmU66ojNIrgvs= MIME-Version: 1.0 X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: 721b94ea-aa7d-4b22-66c7-08d73d3ae585 X-MS-Exchange-CrossTenant-originalarrivaltime: 19 Sep 2019 19:52:26.7135 (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: T24rVF1juw9n70s2MiAEQDHH4jP+tVJ+LEMizDdB1KePKHn0QZ9iZLECphHSzTB2NwnH7oBZzQEh5APERgo2uA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR12MB3228 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: cYcKNhlXhvX2loFhCy4Nc8xAx1787277AA= Content-Language: en-US Content-ID: <8D313CC151E15949B269B851781C72D9@namprd12.prod.outlook.com> Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1568922748; bh=o4tjASVUuewBqvFHMbxkBDYdUz6++BfW2i+XduR1bK0=; h=CC:Content-Type:Date:From:Reply-To:Subject:To; b=D5eicAhSUwAKWyzxemwL79rNYexcAT+W5z1s6e5fOSKf7FPu2b/t+qTuxnV9oQ/gM55 ceUAzrABVkkfbt1Y60AD5r1b06T7UXxEjn2BZ0ICnUGfs5nHKZFg7TjfTlq+3sU49l1+y EtGcjjmOi8AeZSY7tHNQpx5n3HQTErwim8k= 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=3D2198 Create a function that can be used to determine if the VM is running as an SEV-ES guest. Cc: Jordan Justen Cc: Laszlo Ersek Cc: Ard Biesheuvel Signed-off-by: Tom Lendacky Reviewed-by: Laszlo Ersek --- OvmfPkg/Include/Library/MemEncryptSevLib.h | 12 +++ .../MemEncryptSevLibInternal.c | 77 ++++++++++++------- 2 files changed, 62 insertions(+), 27 deletions(-) diff --git a/OvmfPkg/Include/Library/MemEncryptSevLib.h b/OvmfPkg/Include/L= ibrary/MemEncryptSevLib.h index 64dd6977b0f8..a50a0de9c870 100644 --- a/OvmfPkg/Include/Library/MemEncryptSevLib.h +++ b/OvmfPkg/Include/Library/MemEncryptSevLib.h @@ -13,6 +13,18 @@ =20 #include =20 +/** + Returns a boolean to indicate whether SEV-ES is enabled + + @retval TRUE SEV-ES is enabled + @retval FALSE SEV-ES is not enabled +**/ +BOOLEAN +EFIAPI +MemEncryptSevEsIsEnabled ( + VOID + ); + /** Returns a boolean to indicate whether SEV is enabled =20 diff --git a/OvmfPkg/Library/BaseMemEncryptSevLib/MemEncryptSevLibInternal.= c b/OvmfPkg/Library/BaseMemEncryptSevLib/MemEncryptSevLibInternal.c index 96a66e373f11..9c1d68e017fe 100644 --- a/OvmfPkg/Library/BaseMemEncryptSevLib/MemEncryptSevLibInternal.c +++ b/OvmfPkg/Library/BaseMemEncryptSevLib/MemEncryptSevLibInternal.c @@ -20,19 +20,17 @@ #include =20 STATIC BOOLEAN mSevStatus =3D FALSE; +STATIC BOOLEAN mSevEsStatus =3D FALSE; STATIC BOOLEAN mSevStatusChecked =3D FALSE; =20 /** =20 - Returns a boolean to indicate whether SEV is enabled - - @retval TRUE SEV is enabled - @retval FALSE SEV is not enabled + Reads and sets the status of SEV features **/ STATIC -BOOLEAN +VOID EFIAPI -InternalMemEncryptSevIsEnabled ( +InternalMemEncryptSevStatus ( VOID ) { @@ -56,32 +54,57 @@ InternalMemEncryptSevIsEnabled ( // Msr.Uint32 =3D AsmReadMsr32 (MSR_SEV_STATUS); if (Msr.Bits.SevBit) { - return TRUE; + mSevStatus =3D TRUE; + } + + if (Eax.Bits.SevEsBit) { + // + // Check MSR_0xC0010131 Bit 1 (Sev-Es Enabled) + // + if (Msr.Bits.SevEsBit) { + mSevEsStatus =3D TRUE; + } } } } =20 - return FALSE; -} - -/** - Returns a boolean to indicate whether SEV is enabled - - @retval TRUE SEV is enabled - @retval FALSE SEV is not enabled -**/ -BOOLEAN -EFIAPI -MemEncryptSevIsEnabled ( - VOID - ) -{ - if (mSevStatusChecked) { - return mSevStatus; - } - - mSevStatus =3D InternalMemEncryptSevIsEnabled(); mSevStatusChecked =3D TRUE; +} + +/** + Returns a boolean to indicate whether SEV-ES is enabled + + @retval TRUE SEV-ES is enabled + @retval FALSE SEV-ES is not enabled +**/ +BOOLEAN +EFIAPI +MemEncryptSevEsIsEnabled ( + VOID + ) +{ + if (!mSevStatusChecked) { + InternalMemEncryptSevStatus(); + } + + return mSevEsStatus; +} + +/** + Returns a boolean to indicate whether SEV is enabled + + @retval TRUE SEV is enabled + @retval FALSE SEV is not enabled +**/ +BOOLEAN +EFIAPI +MemEncryptSevIsEnabled ( + VOID + ) +{ + if (!mSevStatusChecked) { + InternalMemEncryptSevStatus(); + } =20 return mSevStatus; } --=20 2.17.1 -=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 (#47636): https://edk2.groups.io/g/devel/message/47636 Mute This Topic: https://groups.io/mt/34203536/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- From nobody Sun May 5 15:05:54 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zoho.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+47637+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 1568922751426171.60473300809565; Thu, 19 Sep 2019 12:52:31 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id sLOaYY1788612xkSg0e0Ij2u; Thu, 19 Sep 2019 12:52:30 -0700 X-Received: from NAM02-CY1-obe.outbound.protection.outlook.com (NAM02-CY1-obe.outbound.protection.outlook.com [40.107.76.83]) by groups.io with SMTP; Thu, 19 Sep 2019 12:52:30 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=fRGQJm/0x7ioUkYdZiRGgOi2mciT0MSJDsXhnH/M8uPymQXsRILv0vDFGrXqY/A3nPHwSzCA/Rm7LH4Zo7hAFzwCB83jRYGtD1j5jq6+wkO56PGiph0dOcsChdotDcfXYlHSGzp24REDFAu3PKkR2qlfujQsCWei3qS73ogjnOrhc38qJwvrVDvvkun7/7+O0NeIEZ5og3ksMKxMKVa0aINlR1kE0lYOvOxNMQd6w1SggtRWGfat1gjnUzz0hx7eFfM9T5Ue5+5En3zzVYCGYJGrcBI+2UygEIelWvjWPM3bl6BjbZUDDn5YFqi/Mls+Z/TihpEy0ID2gt8ReZpylw== 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=vBG8QOl5rwGKLTp1ykBp80xyCO0cFXmEhdPgnvi7u7U=; b=hSwJkm80GhY5CJ228+vtU24nmFfJoiR9wZdyYvWBfhzMsR6Qestw3dATNIeQ65RZJtCUzpmARGmh0//ILMPUGh3ljZHmfMGBboCPw3qQut4GBs1cTegvwleVBDuY9hZmzoIfeAKc94MDquer4beMAzQUxNsm7m0YED3U1W32eYNscgmWjq4y93JfDJ7HoW5V0TJvYwfoIb996SVfwxFt+0KR0dXeU4uqygQ0cXojCQnA5fxbcqdiYiRcvo3KpSQWuEwJ/axjpawUvrMgb/oYVxk8vCMOhg+ouw0YawALkboiAOQ87jmxFlckLI8/T3JqpVtsoepX3ailQvHYly//Sg== 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 DM6PR12MB3163.namprd12.prod.outlook.com (20.179.104.150) by DM6PR12MB3228.namprd12.prod.outlook.com (20.179.105.96) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2263.13; Thu, 19 Sep 2019 19:52:28 +0000 X-Received: from DM6PR12MB3163.namprd12.prod.outlook.com ([fe80::400e:f0c3:7ca:2fcc]) by DM6PR12MB3163.namprd12.prod.outlook.com ([fe80::400e:f0c3:7ca:2fcc%6]) with mapi id 15.20.2284.009; Thu, 19 Sep 2019 19:52:28 +0000 From: "Lendacky, Thomas" To: "devel@edk2.groups.io" CC: Jordan Justen , Laszlo Ersek , Ard Biesheuvel , Michael D Kinney , Liming Gao , Eric Dong , Ray Ni , "Singh, Brijesh" Subject: [edk2-devel] [RFC PATCH v2 03/44] OvmfPkg: Add support to perform SEV-ES initialization Thread-Topic: [RFC PATCH v2 03/44] OvmfPkg: Add support to perform SEV-ES initialization Thread-Index: AQHVbyPDnwCe71ks/E2JwQ+3zy/eQQ== Date: Thu, 19 Sep 2019 19:52:27 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: SN4PR0501CA0146.namprd05.prod.outlook.com (2603:10b6:803:2c::24) To DM6PR12MB3163.namprd12.prod.outlook.com (2603:10b6:5:182::22) x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [165.204.78.1] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 0755ee6a-f104-4311-7534-08d73d3ae62d x-ms-office365-filtering-ht: Tenant x-ms-traffictypediagnostic: DM6PR12MB3228: x-ms-exchange-purlcount: 1 x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:4941; Received-SPF: pass (zoho.com: domain of groups.io designates 66.175.222.12 as permitted sender) client-ip=66.175.222.12; envelope-from=bounce+27952+47637+1787277+3901457@groups.io; helo=web01.groups.io; received-spf: None (protection.outlook.com: amd.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: eCE/KY5eSQ+0rHvsERMGJnDwS0MTPuGh/MZ0P746rYPszeXgWywh/6al1ftjDai3bwD0uyp9q3Fxoo+0uN3JxMqsI5r10lDnTsimsL6b5AqhfpdgqL2N6jrI5TJMD/n4SRrl0FiGMLXWECFu2mDPRDF0yU8YuwbnlhFFFJ9QOjBAs3oPNAePrbgWFcnKuwQgEkiQyY3dMlDVkhk2evkfDYowiZeAqgkgT8Bz/ED/kJ6BA2I6Qc3fvIXJUyDJzfKyv3Hm4AmUF+VyLHlvl8+/DhAcEHMb55nxgnib8cxXODWb87if8b/aor4gbVZDld8W8sG6YPtZmbXQGJlnfbYHBh7t9wgb0tuWzNyKktjjcKvq3e+TPuFW06gFrxJMygoruNYTKAvzZ9ZPsLv4scUQbv1zsxnrYqhQbupQ+0jNJlQ= MIME-Version: 1.0 X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: 0755ee6a-f104-4311-7534-08d73d3ae62d X-MS-Exchange-CrossTenant-originalarrivaltime: 19 Sep 2019 19:52:27.9228 (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: dshoJ0iZkedJoZNJ8ugBDtRBLbOtSSP/tGWv7IMsm+b0iqXSslxPa3LHmCNfyQyuounohPuFN+rZROlYxuHvZg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR12MB3228 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: peaJvHNKiwIsh2ueY40EUkvFx1787277AA= Content-Language: en-US Content-ID: Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1568922750; bh=j1KiBCGke8CqN7hVwPCobn+zs+ISRI1dz2GBLSBuRzA=; h=CC:Content-Type:Date:From:Reply-To:Subject:To; b=w4UK+SN7kLc4AhPSdr+zjFoOl/opFjkV73VaCGWFb6BQKFmx/AXtjrEvRzgzeV0uyQ7 ZZ9bQ5qUMy1i7GZ5Qj+HlQ9ZBf1dpAoAEg8tCeUfkLg1FPkV631HZcHSLCExhJxw6V8oV v2UzZF6KJuDlz3dP6/V+EbnzhlcWiy941VI= 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=3D2198 When SEV-ES is active, then SEV is also active. Add support to the SEV initialization function to also check for SEV-ES being active. If SEV-ES is active, set the SEV-ES active PCD (PcdSevEsActive). Cc: Jordan Justen Cc: Laszlo Ersek Cc: Ard Biesheuvel Signed-off-by: Tom Lendacky Reviewed-by: Laszlo Ersek --- OvmfPkg/OvmfPkgIa32.dsc | 3 +++ OvmfPkg/OvmfPkgIa32X64.dsc | 3 +++ OvmfPkg/OvmfPkgX64.dsc | 3 +++ OvmfPkg/PlatformPei/PlatformPei.inf | 1 + OvmfPkg/PlatformPei/AmdSev.c | 26 ++++++++++++++++++++++++++ 5 files changed, 36 insertions(+) diff --git a/OvmfPkg/OvmfPkgIa32.dsc b/OvmfPkg/OvmfPkgIa32.dsc index 6ab730018694..0ce5c01722ef 100644 --- a/OvmfPkg/OvmfPkgIa32.dsc +++ b/OvmfPkg/OvmfPkgIa32.dsc @@ -558,6 +558,9 @@ [PcdsDynamicDefault] # Set memory encryption mask gEfiMdeModulePkgTokenSpaceGuid.PcdPteMemoryEncryptionAddressOrMask|0x0 =20 + # Set SEV-ES defaults + gEfiMdeModulePkgTokenSpaceGuid.PcdSevEsActive|0 + !if $(SMM_REQUIRE) =3D=3D TRUE gUefiOvmfPkgTokenSpaceGuid.PcdQ35TsegMbytes|8 gUefiCpuPkgTokenSpaceGuid.PcdCpuSmmSyncMode|0x01 diff --git a/OvmfPkg/OvmfPkgIa32X64.dsc b/OvmfPkg/OvmfPkgIa32X64.dsc index f163aa267132..e7455e35a55d 100644 --- a/OvmfPkg/OvmfPkgIa32X64.dsc +++ b/OvmfPkg/OvmfPkgIa32X64.dsc @@ -570,6 +570,9 @@ [PcdsDynamicDefault] # Set memory encryption mask gEfiMdeModulePkgTokenSpaceGuid.PcdPteMemoryEncryptionAddressOrMask|0x0 =20 + # Set SEV-ES defaults + gEfiMdeModulePkgTokenSpaceGuid.PcdSevEsActive|0 + !if $(SMM_REQUIRE) =3D=3D TRUE gUefiOvmfPkgTokenSpaceGuid.PcdQ35TsegMbytes|8 gUefiCpuPkgTokenSpaceGuid.PcdCpuSmmSyncMode|0x01 diff --git a/OvmfPkg/OvmfPkgX64.dsc b/OvmfPkg/OvmfPkgX64.dsc index fa98f16a3fb3..0b8305cd10a2 100644 --- a/OvmfPkg/OvmfPkgX64.dsc +++ b/OvmfPkg/OvmfPkgX64.dsc @@ -569,6 +569,9 @@ [PcdsDynamicDefault] # Set memory encryption mask gEfiMdeModulePkgTokenSpaceGuid.PcdPteMemoryEncryptionAddressOrMask|0x0 =20 + # Set SEV-ES defaults + gEfiMdeModulePkgTokenSpaceGuid.PcdSevEsActive|0 + !if $(SMM_REQUIRE) =3D=3D TRUE gUefiOvmfPkgTokenSpaceGuid.PcdQ35TsegMbytes|8 gUefiCpuPkgTokenSpaceGuid.PcdCpuSmmSyncMode|0x01 diff --git a/OvmfPkg/PlatformPei/PlatformPei.inf b/OvmfPkg/PlatformPei/Plat= formPei.inf index d9fd9c8f05b3..2736347a2e03 100644 --- a/OvmfPkg/PlatformPei/PlatformPei.inf +++ b/OvmfPkg/PlatformPei/PlatformPei.inf @@ -100,6 +100,7 @@ [Pcd] gUefiCpuPkgTokenSpaceGuid.PcdCpuMaxLogicalProcessorNumber gUefiCpuPkgTokenSpaceGuid.PcdCpuApInitTimeOutInMicroSeconds gUefiCpuPkgTokenSpaceGuid.PcdCpuApStackSize + gEfiMdeModulePkgTokenSpaceGuid.PcdSevEsActive =20 [FixedPcd] gEfiMdePkgTokenSpaceGuid.PcdPciExpressBaseAddress diff --git a/OvmfPkg/PlatformPei/AmdSev.c b/OvmfPkg/PlatformPei/AmdSev.c index 2ae8126ccf8a..7ae2f26a2ba7 100644 --- a/OvmfPkg/PlatformPei/AmdSev.c +++ b/OvmfPkg/PlatformPei/AmdSev.c @@ -19,6 +19,27 @@ =20 #include "Platform.h" =20 +/** + + Initialize SEV-ES support if running an SEV-ES guest. + + **/ +STATIC +VOID +AmdSevEsInitialize ( + VOID + ) +{ + RETURN_STATUS PcdStatus; + + if (!MemEncryptSevEsIsEnabled ()) { + return; + } + + PcdStatus =3D PcdSetBoolS (PcdSevEsActive, 1); + ASSERT_RETURN_ERROR (PcdStatus); +} + /** =20 Function checks if SEV support is available, if present then it sets @@ -89,4 +110,9 @@ AmdSevInitialize ( EfiBootServicesData // MemoryType ); } + + // + // Check and perform SEV-ES initialization if required. + // + AmdSevEsInitialize (); } --=20 2.17.1 -=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 (#47637): https://edk2.groups.io/g/devel/message/47637 Mute This Topic: https://groups.io/mt/34203538/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- From nobody Sun May 5 15:05:54 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zoho.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+47638+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 156892275196953.076622535937986; Thu, 19 Sep 2019 12:52:31 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id MCcmYY1788612xhh8HyiZExV; Thu, 19 Sep 2019 12:52:31 -0700 X-Received: from NAM02-CY1-obe.outbound.protection.outlook.com (NAM02-CY1-obe.outbound.protection.outlook.com [40.107.76.49]) by groups.io with SMTP; Thu, 19 Sep 2019 12:52:31 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=cOd7URviCohT58IKF9Frf0lWg0xBlVDWxVQylIIwVxXlu3SpOkZnUsMZPvJ1clTAGy7PK+UowMeSJPx5lkJcXJbKTWcz+DJYD6oOnG7f8XyhvfhnxDECXvkTinWktW8VUGnb4dBdW62jNGrnQG4x9AV2Nl31nDVCBIS2s8j7M5FxIwfdIr9aBIFEhqSFKDGWNhR+g1sZdehhMCeEv2QUf8X237aBA8jsWgSFoTus3r/kaIUDazyqLDo2zlbLHuf8p4j1AELcPn2MqUOsCeo0T638fyzETPlfUAC15w+2CL35wQvz6+DsTS5P17te5WOZQ940pfKdC4agWxtiI8emhQ== 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=gFdVS/USbQaBe92WWt94pBCExMOWKw1xJAG3FHSbTEc=; b=L0g2265wsu3U4Sa3femZ2RUDSH5AxrNEnm6FsVilG59/MQsA5g5rclKnmI7tfQ/aGMTHNKxbWYmiLqXlHeqBDsVFf1ldeZ04JfcJfJp6Ookx5p4dmFQ4F/5eSCWhM0XOzhqhwJ/UJFXiuOWpC9DWiUJMcYIn2F6OfZlvVFg3HHdmt71mDAf6xKTEgrUVWX21UkmPZaj65FquzjI/Fuf3qz77pefpK8Q3NYN48CIVaK5fZ0M4JzLeKI+vFeLNrxiv/jMdb+DXCCXxtzLim178r0XyP/jai1BGJPufez1Yc5LkFsOPDc6BpctfOhVZx4N4iLES4MueHzeHFu9xF++MpQ== 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 DM6PR12MB3163.namprd12.prod.outlook.com (20.179.104.150) by DM6PR12MB3228.namprd12.prod.outlook.com (20.179.105.96) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2263.13; Thu, 19 Sep 2019 19:52:29 +0000 X-Received: from DM6PR12MB3163.namprd12.prod.outlook.com ([fe80::400e:f0c3:7ca:2fcc]) by DM6PR12MB3163.namprd12.prod.outlook.com ([fe80::400e:f0c3:7ca:2fcc%6]) with mapi id 15.20.2284.009; Thu, 19 Sep 2019 19:52:29 +0000 From: "Lendacky, Thomas" To: "devel@edk2.groups.io" CC: Jordan Justen , Laszlo Ersek , Ard Biesheuvel , Michael D Kinney , Liming Gao , Eric Dong , Ray Ni , "Singh, Brijesh" Subject: [edk2-devel] [RFC PATCH v2 04/44] OvmfPkg/ResetVector: Add support for a 32-bit SEV check Thread-Topic: [RFC PATCH v2 04/44] OvmfPkg/ResetVector: Add support for a 32-bit SEV check Thread-Index: AQHVbyPEW2twUlghfEifX1FioTvTGA== Date: Thu, 19 Sep 2019 19:52:29 +0000 Message-ID: <54ebf48fe05c20a1181a3dc90496e4835912ebf2.1568922728.git.thomas.lendacky@amd.com> References: In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: SN4PR0501CA0146.namprd05.prod.outlook.com (2603:10b6:803:2c::24) To DM6PR12MB3163.namprd12.prod.outlook.com (2603:10b6:5:182::22) x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [165.204.78.1] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 926ccd90-21a1-41c5-8b55-08d73d3ae6e3 x-ms-office365-filtering-ht: Tenant x-ms-traffictypediagnostic: DM6PR12MB3228: x-ms-exchange-purlcount: 1 x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:8273; Received-SPF: pass (zoho.com: domain of groups.io designates 66.175.222.12 as permitted sender) client-ip=66.175.222.12; envelope-from=bounce+27952+47638+1787277+3901457@groups.io; helo=web01.groups.io; received-spf: None (protection.outlook.com: amd.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: ZD5wSYfgQ/Xq8KYI+WaUCUwbchzp/QMmMsNVsVGiC7whVC/6yYBCt/juASHH/PSXIrZC90Nje31oe6ulcjZRmPG9e6J25M7Ln7Myt8KK+KZ9E9W0ObFUGwt8Ed+dcJo6xs8qbvM8H8/rLCZ/S1haHeMX4oKkH7wV+wPTjdd5FMCTxov5MtEhZWmw64dLvx8eI7EEb+Kt0FUEctN/TgxGrz+GNTnU8pinWcFLtVB0meBa/r1ep5GufnAwfj4MlXATTbUoiEmc2kxDgCzNoO44y/LyYNTtTQAtIWWTHh9a6gZM/6bH8D5Gmd11Ep8JORbeuonNV2rcenJj2N0TPOdJGn+FMAQjIYRzVJ0OL65XxRwbOO55ap8ulhjPquGqMFDLJM9Y1VZkkWqlEzLEgUggfGvLsKaD08fGX7KkmgnBcT4= MIME-Version: 1.0 X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: 926ccd90-21a1-41c5-8b55-08d73d3ae6e3 X-MS-Exchange-CrossTenant-originalarrivaltime: 19 Sep 2019 19:52:29.1051 (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: Ooa/b9QxJCIhPvIj+e3Tk3uxGS9T+m2+awHWdshLgA3SFj+vnUaWHMhywWodIfFaKgfKe8GUg5yHbIRZAbCL7A== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR12MB3228 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: zPPp4PpYky9k0ipq40072g3Mx1787277AA= Content-Language: en-US Content-ID: Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1568922751; bh=C4ZyIYE0TSrqrrg7+yaYu2c1avyk3r0UXZ0p12ZYCfU=; h=CC:Content-Type:Date:From:Reply-To:Subject:To; b=mMUBE60bGg67AY/f6lP46Sr3d5JF4dIQ3fsw7cQkmZNjAsqHOkYHfsLjCxrYDlUPSTa FZTchq2sv0Nuen/ZDBHNcMGnM/2kguDZ74g5Vuh4I161ub8JJQlkMfUt/L6yUrk5EwMUk vP8r2a6z1j4qbT6zcp2QxkuiUoT8foGWiDM= 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=3D2198 During BSP startup, the reset vector code will issue a CPUID instruction while in 32-bit mode. When running as an SEV-ES guest, this will trigger a #VC exception. Add exception handling support to the early reset vector code to catch these exceptions. Also, since the guest is in 32-bit mode at this point, writes to the GHCB will be encrypted and thus not able to be read by the hypervisor, so use the GHCB CPUID request/response protocol to obtain the requested CPUID function values and provide these to the guest. The exception handling support is active during the SEV check and uses the OVMF temporary RAM space for a stack. After the SEV check is complete, the exception handling support is removed and the stack pointer cleared. Cc: Jordan Justen Cc: Laszlo Ersek Cc: Ard Biesheuvel Signed-off-by: Tom Lendacky --- OvmfPkg/ResetVector/ResetVector.inf | 2 + OvmfPkg/ResetVector/Ia32/PageTables64.asm | 177 +++++++++++++++++++++- OvmfPkg/ResetVector/ResetVector.nasmb | 1 + 3 files changed, 179 insertions(+), 1 deletion(-) diff --git a/OvmfPkg/ResetVector/ResetVector.inf b/OvmfPkg/ResetVector/Rese= tVector.inf index b0ddfa5832a2..960b47cd0797 100644 --- a/OvmfPkg/ResetVector/ResetVector.inf +++ b/OvmfPkg/ResetVector/ResetVector.inf @@ -35,3 +35,5 @@ [BuildOptions] [Pcd] gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecPageTablesBase gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecPageTablesSize + gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecPeiTempRamBase + gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecPeiTempRamSize diff --git a/OvmfPkg/ResetVector/Ia32/PageTables64.asm b/OvmfPkg/ResetVecto= r/Ia32/PageTables64.asm index abad009f20f5..40f7814c1134 100644 --- a/OvmfPkg/ResetVector/Ia32/PageTables64.asm +++ b/OvmfPkg/ResetVector/Ia32/PageTables64.asm @@ -33,10 +33,21 @@ BITS 32 =20 ; Check if Secure Encrypted Virtualization (SEV) feature is enabled ; -; If SEV is enabled then EAX will be at least 32 +; Modified: EAX, EBX, ECX, EDX, ESP +; +; If SEV is enabled then EAX will be at least 32. ; If SEV is disabled then EAX will be zero. ; CheckSevFeature: + ; + ; Set up exception handlers to check for SEV-ES + ; Load temporary RAM stack based on PCDs + ; Establish exception handlers + ; + mov esp, SEV_TOP_OF_STACK + mov eax, ADDR_OF(Idtr) + lidt [cs:eax] + ; Check if we have a valid (0x8000_001F) CPUID leaf mov eax, 0x80000000 cpuid @@ -73,6 +84,15 @@ NoSev: xor eax, eax =20 SevExit: + ; + ; Clear exception handlers and stack + ; + push eax + mov eax, ADDR_OF(IdtrClear) + lidt [cs:eax] + pop eax + mov esp, 0 + OneTimeCallRet CheckSevFeature =20 ; @@ -146,3 +166,158 @@ pageTableEntriesLoop: mov cr3, eax =20 OneTimeCallRet SetCr3ForPageTables64 + +SevEsIdtCommon: + hlt + jmp SevEsIdtCommon + iret + +SevEsIdtVmmComm: + ; + ; If we're here, then we are an SEV-ES guest and this + ; was triggered by a CPUID instruction + ; + pop ecx ; Error code + cmp ecx, 0x72 ; Be sure it was CPUID + jne SevEsIdtCommon + + ; + ; Set up local variable room on the stack + ; CPUID function : + 28 + ; CPUID register : + 24 + ; GHCB MSR (EAX) : + 20 + ; GHCB MSR (EDX) : + 16 + ; CPUID result (EDX) : + 12 + ; CPUID result (ECX) : + 8 + ; CPUID result (EBX) : + 4 + ; CPUID result (EAX) : + 0 + sub esp, 32 + + ; Save CPUID function and initial register request + mov [esp + 28], eax + xor eax, eax + mov [esp + 24], eax + + ; Save current GHCB MSR value + mov ecx, 0xc0010130 + rdmsr + mov [esp + 20], eax + mov [esp + 16], edx + +NextReg: + ; + ; Setup GHCB MSR + ; GHCB_MSR[63:32] =3D CPUID function + ; GHCB_MSR[31:30] =3D CPUID register + ; GHCB_MSR[11:0] =3D CPUID request protocol + ; + mov eax, [esp + 24] + cmp eax, 4 + jge VmmDone + + shl eax, 30 + or eax, 0x004 + mov edx, [esp + 28] + mov ecx, 0xc0010130 + wrmsr + + ; Issue VMGEXIT (rep; vmmcall) + db 0xf3 + db 0x0f + db 0x01 + db 0xd9 + + ; + ; Read GHCB MSR + ; GHCB_MSR[63:32] =3D CPUID register value + ; GHCB_MSR[31:30] =3D CPUID register + ; GHCB_MSR[11:0] =3D CPUID response protocol + ; + mov ecx, 0xc0010130 + rdmsr + mov ecx, eax + and ecx, 0xfff + cmp ecx, 0x005 + jne SevEsIdtCommon + + ; Save returned value + shr eax, 30 + and eax, 0x3 + shl eax, 2 + mov ecx, esp + add ecx, eax + mov [ecx], edx + + ; Next register + inc word [esp + 24] + + jmp NextReg + +VmmDone: + ; + ; At this point we have all CPUID register values. Restore the GHCB MS= R, + ; set the return register values and return. + ; + mov eax, [esp + 20] + mov edx, [esp + 16] + mov ecx, 0xc0010130 + wrmsr + + mov eax, [esp + 0] + mov ebx, [esp + 4] + mov ecx, [esp + 8] + mov edx, [esp + 12] + + add esp, 32 + add word [esp], 2 ; Skip over the CPUID instruction + iret + +ALIGN 2 + +Idtr: + dw IDT_END - IDT_BASE - 1 ; Limit + dd ADDR_OF(IDT_BASE) ; Base + +IdtrClear: + dw 0 ; Limit + dd 0 ; Base + +ALIGN 16 + +; +; The Interrupt Descriptor Table (IDT) +; This will be used to determine if SEV-ES is enabled. Upon execution +; of the CPUID instruction, a VMM Communication Exception will occur. +; This will tell us if SEV-ES is enabled. We can use the current value +; of the GHCB MSR to determine the SEV attributes. +; +IDT_BASE: +; +; Vectors 0 - 28 +; +%rep 29 + dw (ADDR_OF(SevEsIdtCommon) & 0xffff) ; Offset low bits 15..0 + dw 0x10 ; Selector + db 0 ; Reserved + db 0x8E ; Gate Type (IA32_IDT_GAT= E_TYPE_INTERRUPT_32) + dw (ADDR_OF(SevEsIdtCommon) >> 16) ; Offset high bits 31..16 +%endrep +; +; Vector 29 (VMM Communication Exception) +; + dw (ADDR_OF(SevEsIdtVmmComm) & 0xffff) ; Offset low bits 15..0 + dw 0x10 ; Selector + db 0 ; Reserved + db 0x8E ; Gate Type (IA32_IDT_GAT= E_TYPE_INTERRUPT_32) + dw (ADDR_OF(SevEsIdtVmmComm) >> 16) ; Offset high bits 31..16 +; +; Vectors 30 - 31 +; +%rep 2 + dw (ADDR_OF(SevEsIdtCommon) & 0xffff) ; Offset low bits 15..0 + dw 0x10 ; Selector + db 0 ; Reserved + db 0x8E ; Gate Type (IA32_IDT_GAT= E_TYPE_INTERRUPT_32) + dw (ADDR_OF(SevEsIdtCommon) >> 16) ; Offset high bits 31..16 +%endrep +IDT_END: diff --git a/OvmfPkg/ResetVector/ResetVector.nasmb b/OvmfPkg/ResetVector/Re= setVector.nasmb index 75cfe16654b1..3b213cd05ab2 100644 --- a/OvmfPkg/ResetVector/ResetVector.nasmb +++ b/OvmfPkg/ResetVector/ResetVector.nasmb @@ -55,6 +55,7 @@ =20 %define PT_ADDR(Offset) (FixedPcdGet32 (PcdOvmfSecPageTablesBase) + (Off= set)) %include "Ia32/Flat32ToFlat64.asm" + %define SEV_TOP_OF_STACK (FixedPcdGet32 (PcdOvmfSecPeiTempRamBase) + Fix= edPcdGet32 (PcdOvmfSecPeiTempRamSize)) %include "Ia32/PageTables64.asm" %endif =20 --=20 2.17.1 -=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 (#47638): https://edk2.groups.io/g/devel/message/47638 Mute This Topic: https://groups.io/mt/34203539/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- From nobody Sun May 5 15:05:54 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zoho.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+47639+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 1568922753784502.93741761015826; Thu, 19 Sep 2019 12:52:33 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id mTlPYY1788612xvMaPDc1XFc; Thu, 19 Sep 2019 12:52:32 -0700 X-Received: from NAM03-BY2-obe.outbound.protection.outlook.com (NAM03-BY2-obe.outbound.protection.outlook.com [40.107.78.88]) by groups.io with SMTP; Thu, 19 Sep 2019 12:52:32 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=BkLGGKbEDfAJze50LFElcyvBtMXO5XM2miuVwWKnEAx/jMmMfDilgJk2YD+IqJ7tTXeEXuS0gkkCgm9XraayVBhLRqi/gjmkEHeg9UBcj98Rgx1eObkuZvGDVC5LUXKl94ydh1ndNo80GfKv2XtDdVF1j/npLYp62sd3y3iJgPS1eAY8JIzLYRv4P07pKqhH42QG0rLOuXJ9NCMe5OyWXZeRtgT9VspQXPAnNhS5CTnq3fOyua4rKII0WWvlOgcd0OMwrvbDG7jQiL14QuS8h50yNBzoxt4Kp87LmcaqIeH/X+9T4SUo/6J/fZFs9lud9Lp6wJ5Y2RMzJEnihwFvtQ== 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=XFAfGcAF2QT+PA+7poX7RttVusxKjfWUj6nA48bjHVE=; b=BlqSp2S8JYTzH+Hsx4W5rlO8wKi99/KuHu2RsvxTsiz8xwLaFimTq0zVYRtpsf70Os3xvCp378x+NeCRKb7pvmcCUSWzosQA9OOdE2bEZ1FbF92vUHKT7/v7fYTZ+my9xFM9HqNjkq2NLyDk7f3CCt6+M+Xv6+GpXmvt4YLddH0jcQuNvCA5COXUxz3ehLxS3UX+clGKidF2Z5+QtkDro6vb46IwNNcx87qpX33qFoieU/hLwGG6o3sfDzVkkOFddNidXHyewsFHLEAQ2l1g7utJKzjiqBMuqPA61QLK9uQzxNPbx0nWso8RcC9sFO0t8TtCaSDFtXVJh1arehoqZw== 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 DM6PR12MB3163.namprd12.prod.outlook.com (20.179.104.150) by DM6PR12MB3228.namprd12.prod.outlook.com (20.179.105.96) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2263.13; Thu, 19 Sep 2019 19:52:30 +0000 X-Received: from DM6PR12MB3163.namprd12.prod.outlook.com ([fe80::400e:f0c3:7ca:2fcc]) by DM6PR12MB3163.namprd12.prod.outlook.com ([fe80::400e:f0c3:7ca:2fcc%6]) with mapi id 15.20.2284.009; Thu, 19 Sep 2019 19:52:30 +0000 From: "Lendacky, Thomas" To: "devel@edk2.groups.io" CC: Jordan Justen , Laszlo Ersek , Ard Biesheuvel , Michael D Kinney , Liming Gao , Eric Dong , Ray Ni , "Singh, Brijesh" Subject: [edk2-devel] [RFC PATCH v2 05/44] MdePkg: Add the MSR definition for the GHCB register Thread-Topic: [RFC PATCH v2 05/44] MdePkg: Add the MSR definition for the GHCB register Thread-Index: AQHVbyPFzDW5safceUCgM26kkVBJ/Q== Date: Thu, 19 Sep 2019 19:52:30 +0000 Message-ID: <7cc30f5cbc01539364b780e1b2d5950d4b36fef4.1568922728.git.thomas.lendacky@amd.com> References: In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: SN4PR0501CA0146.namprd05.prod.outlook.com (2603:10b6:803:2c::24) To DM6PR12MB3163.namprd12.prod.outlook.com (2603:10b6:5:182::22) x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [165.204.78.1] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: a045456f-379c-40e4-0da3-08d73d3ae79e x-ms-office365-filtering-ht: Tenant x-ms-traffictypediagnostic: DM6PR12MB3228: x-ms-exchange-purlcount: 1 x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:3044; Received-SPF: pass (zoho.com: domain of groups.io designates 66.175.222.12 as permitted sender) client-ip=66.175.222.12; envelope-from=bounce+27952+47639+1787277+3901457@groups.io; helo=web01.groups.io; received-spf: None (protection.outlook.com: amd.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: SGRmYpg3ngIw/bEQhDE0S65CmefD2eRNiYEnvbt8ZCvIunDNbx77LSzpOPIcTuvYK+qyAmyekR6057oj6SVKZur+jFRxrUSMXnM1E9dN+YzFA+OjvxkoXN8PdNCvSGkzmFotEWlw7fuJcQVsAqrmdpD+pu8KrSYHgN//2OetTmxaztW503MYrhA+WsiwEDKCwGgjiql+8yoH1INGkUgXulFUPAs0/2RqMXg8M7KQJRVbWui4QGwXLqyCTXpqFH/EzlD5A8bjNIEX/ySSW55wtXsZJkKXBDxIqlJOXj+nIt3KMUy6Sc/LKmQQcrNdygPOym3JOkTYsJPEXYeuhe7Zjsn9b03UHxTdfMCinn3Y50uxJESqjVkpuNY4OwY0xTWWgaiL7eifJqdsoURy9mZsV+MwYVN1aNnKb89pRDf6ZXw= MIME-Version: 1.0 X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: a045456f-379c-40e4-0da3-08d73d3ae79e X-MS-Exchange-CrossTenant-originalarrivaltime: 19 Sep 2019 19:52:30.2405 (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: OAxePXvrz8KWGhEn5PnkGjTqAaXz0Ehy+FJ1e4uGMFGXwMS+FDuxTDaJTHaNTPVOUtbkisVaiMSL4o1/FWHk9A== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR12MB3228 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: X9tpqDvb2oCQu7aTnDzo5llAx1787277AA= Content-Language: en-US Content-ID: <6EA436F6E850114485C6C0772B0DD2B6@namprd12.prod.outlook.com> Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1568922752; bh=QV6kumdmRyMsoIjmUR7mVLi642hNR4cboRj0slHL/l8=; h=CC:Content-Type:Date:From:Reply-To:Subject:To; b=iM6gzxQvvGiOdox5VQn6STpYDuTKvqQCNBD11SnmBwxfd1gmarfN9+8hzXcHde+0wsK Cj8Q4ZxgN1HZmkH2cZW1wWVbtGV1Hs1lOyP06J/Xbh7+JQNnw7shtbOoszC306Rb7mEL+ 77IkdYYxsEcPV+KiPjcU8c7pnLsC6swENfw= 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=3D2198 For SEV-ES, the GHCB page address is stored in the GHCB MSR register (0xc0010130). Define the register and the format used for register during GHCB protocol negotiation. Cc: Michael D Kinney Cc: Liming Gao Signed-off-by: Tom Lendacky --- MdePkg/Include/Register/Amd/Fam17Msr.h | 28 ++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/MdePkg/Include/Register/Amd/Fam17Msr.h b/MdePkg/Include/Regist= er/Amd/Fam17Msr.h index 37b935dcdb30..55a5723e164e 100644 --- a/MdePkg/Include/Register/Amd/Fam17Msr.h +++ b/MdePkg/Include/Register/Amd/Fam17Msr.h @@ -17,6 +17,34 @@ #ifndef __FAM17_MSR_H__ #define __FAM17_MSR_H__ =20 +/** + Secure Encrypted Virtualization - Encrypted State (SEV-ES) GHCB register + +**/ +#define MSR_SEV_ES_GHCB 0xc0010130 + +/** + MSR information returned for #MSR_SEV_ES_GHCB +**/ +typedef union { + struct { + UINT32 GhcbNegotiateBit:1; + + UINT32 Reserved:31; + } Bits; + + struct { + UINT8 Reserved[3]; + UINT8 SevEncryptionBitPos; + UINT16 SevEsProtocolMin; + UINT16 SevEsProtocolMax; + } GhcbProtocol; + + VOID *Ghcb; + + UINT64 GhcbPhysicalAddress; +} MSR_SEV_ES_GHCB_REGISTER; + /** Secure Encrypted Virtualization (SEV) status register =20 --=20 2.17.1 -=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 (#47639): https://edk2.groups.io/g/devel/message/47639 Mute This Topic: https://groups.io/mt/34203540/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- From nobody Sun May 5 15:05:54 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zoho.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+47640+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 1568922753688591.8236388929416; Thu, 19 Sep 2019 12:52:33 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id eg6LYY1788612xpOLEbgEX1V; Thu, 19 Sep 2019 12:52:33 -0700 X-Received: from NAM03-BY2-obe.outbound.protection.outlook.com (NAM03-BY2-obe.outbound.protection.outlook.com []) by groups.io with SMTP; Thu, 19 Sep 2019 12:52:32 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=oECVn1nGGwGvt4yesQHeGDNeX0QAt1JMKjqOFd48yJgl8ovYTcO9LxNXIpi3/csFNoqLHhV5EX3RQRXPvIVqmQKC5bG92RuB7yVnabweEsGhiSJ9zg6kifiG/Gl1XULJvyC/r6KL3coZGfVx905vynJQjB62Ghj4TgDSdvfaXftO/CbHI/i0WrcNF1vBnk22O7fivYZWZn6pzicBp3rHTFyzs16QomsOFQPmwP6iuTri3oSMLjbIzkvbv32Wv4M2qjIvQsP4tDww2ycWoQHseR6+iIIxp34bleeque532O0Tmr8bTI3D1yHJ5oa36OZTzqTDPM7zDondpkHaQvkZXw== 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=P8Q5Ev80U9+svuGEz1HSgbVvRr76GyG3WWRaphWvYOg=; b=i39LXQwGQqXh8r5alrBZWSD8Xmhj69I5iP7CSCWbGtxTq124f++KZl6jT35XJgSZMxAIShArEWUOo9IRWWXnI0iIHC1Wre9+wVxxk2ueKMFN1pY/7DPRET7OYF+2EL2aPF9l+L9cxmqH2z94uAUakaNfiP6afPrJ2njy9NdkamHLeOH5X99U7D9/DFs5gKZBr2pYAywuaHZQ0hOv5ss4/a8vcVdOAMSC8IQ2YMMLhXK/8sdpY3dhJAhJqZGBsL0h8aNTxwetYLzyrKWMQqYrdJ1Azl/jAZoGu8BLQX4J6hHl8RqwtA+AkCCYIh5iBKxUkVgig6gKDsVoUIRmMNPkWA== 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 DM6PR12MB3163.namprd12.prod.outlook.com (20.179.104.150) by DM6PR12MB3228.namprd12.prod.outlook.com (20.179.105.96) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2263.13; Thu, 19 Sep 2019 19:52:31 +0000 X-Received: from DM6PR12MB3163.namprd12.prod.outlook.com ([fe80::400e:f0c3:7ca:2fcc]) by DM6PR12MB3163.namprd12.prod.outlook.com ([fe80::400e:f0c3:7ca:2fcc%6]) with mapi id 15.20.2284.009; Thu, 19 Sep 2019 19:52:31 +0000 From: "Lendacky, Thomas" To: "devel@edk2.groups.io" CC: Jordan Justen , Laszlo Ersek , Ard Biesheuvel , Michael D Kinney , Liming Gao , Eric Dong , Ray Ni , "Singh, Brijesh" Subject: [edk2-devel] [RFC PATCH v2 06/44] OvmfPkg: Create a GHCB page for use during Sec phase Thread-Topic: [RFC PATCH v2 06/44] OvmfPkg: Create a GHCB page for use during Sec phase Thread-Index: AQHVbyPF4bPCUXgsNUCiLEpZ737GZw== Date: Thu, 19 Sep 2019 19:52:31 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: SN4PR0501CA0146.namprd05.prod.outlook.com (2603:10b6:803:2c::24) To DM6PR12MB3163.namprd12.prod.outlook.com (2603:10b6:5:182::22) x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [165.204.78.1] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 6d47b678-123d-4b4a-c506-08d73d3ae849 x-ms-office365-filtering-ht: Tenant x-ms-traffictypediagnostic: DM6PR12MB3228: x-ms-exchange-purlcount: 1 x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:2399; Received-SPF: pass (zoho.com: domain of groups.io designates 66.175.222.12 as permitted sender) client-ip=66.175.222.12; envelope-from=bounce+27952+47640+1787277+3901457@groups.io; helo=web01.groups.io; received-spf: None (protection.outlook.com: amd.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: PsKmGyl8Y+BZPmaOSp8t9N2XrqziSXHXxOJiRiMLzbJ43vmQk5ybFge1yrZuJyAFQWLStvFmQ+oNe093TlP+PHtw+Q6KGTW7Pezuc+7M+FgZqWqGkZ5201mC+alC6iDPQEcRszulZS5R41VT+cLo6CKEVwLqf1Zn+XMLlmtT48L+SwBYTUIxL7HqNBUAQBVGA2pRLbqKz+rTPTnSfAlQpri20YLL4txbPxInFuv3Xb7cW5R/Vq52m0xZq/i2sE0L83eQS9MXFArkPhC2DNFT3th4L8TExupcWjVE2H571cgoz5GGrE33qBQ6uDIN3IdYzfZ1uy49vFh083IaCQqBCtV4IfwmnRV/rSO2avRYjbDufXtJwfY9eZzGjO5lzZDMRzPY8GYnH6EtpW+RPkgRTM1SP6y7jt0mcS8/zLFWlDA= MIME-Version: 1.0 X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6d47b678-123d-4b4a-c506-08d73d3ae849 X-MS-Exchange-CrossTenant-originalarrivaltime: 19 Sep 2019 19:52:31.3069 (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: 60Cz6e1oSmuV7hG3kz8Tv/2nqyzLISKXJboIAoqBnF2ghFVJZ/mc5BQ2acVKIntQ37I35oq8DC9AUjpMyLFpBg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR12MB3228 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: f4PXcJWfhOAn64or1QGSS7O7x1787277AA= Content-Language: en-US Content-ID: <0F82BB6E3323B340BF6940F3C42DB5BF@namprd12.prod.outlook.com> Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1568922753; bh=2cdHa+/2bFscdZPLgINa2R4y90lKZL+G5ldA0hjUiSU=; h=CC:Content-Type:Date:From:Reply-To:Subject:To; b=cEQHAR+QuZZ/GZcvP37mdVBLz/1JcWHt8cSWO9aeBzjFkrq9n637if3YvJuLnnoVfZo ZEiSpDauJylMXLlpkZSuekv8ekQtiznVPCbMSmqfYxP3HV8uFR/t2quzzaH30NwQKd+a9 69uFOlH8C85azaIz1wfowmTyoxrw7MGFNhY= 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=3D2198 A GHCB page is needed during the Sec phase, so this new page must be created. Since the GHCB must be marked as an un-encrypted, or shared, page, an additional pagetable page is required to break down the 2MB region where the GHCB page lives into 4K pagetable entries. Create a new entry in the OVMF memory layout for the new page table page and for the SEC GHCB page. After breaking down the 2MB page, update the GHCB page table entry to remove the encryption mask. Cc: Jordan Justen Cc: Laszlo Ersek Cc: Ard Biesheuvel Signed-off-by: Tom Lendacky --- OvmfPkg/OvmfPkg.dec | 10 +++ OvmfPkg/OvmfPkgX64.fdf | 6 ++ OvmfPkg/ResetVector/ResetVector.inf | 4 ++ OvmfPkg/ResetVector/Ia32/PageTables64.asm | 79 +++++++++++++++++++++++ OvmfPkg/ResetVector/ResetVector.nasmb | 12 ++++ 5 files changed, 111 insertions(+) diff --git a/OvmfPkg/OvmfPkg.dec b/OvmfPkg/OvmfPkg.dec index 9640360f6245..b9287a023c94 100644 --- a/OvmfPkg/OvmfPkg.dec +++ b/OvmfPkg/OvmfPkg.dec @@ -218,6 +218,16 @@ [PcdsFixedAtBuild] # The value should be a multiple of 4KB. gUefiOvmfPkgTokenSpaceGuid.PcdHighPmmMemorySize|0x400000|UINT32|0x31 =20 + ## Specify the extra page table needed to mark the GHCB as unencrypted. + # The value should be a multiple of 4KB for each. + gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecGhcbPageTableBase|0x0|UINT32|0x32 + gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecGhcbPageTableSize|0x0|UINT32|0x33 + + ## Specify the GHCB base address and size. + # The value should be a multiple of 4KB for each. + gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecGhcbBase|0x0|UINT32|0x34 + gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecGhcbSize|0x0|UINT32|0x35 + [PcdsDynamic, PcdsDynamicEx] gUefiOvmfPkgTokenSpaceGuid.PcdEmuVariableEvent|0|UINT64|2 gUefiOvmfPkgTokenSpaceGuid.PcdOvmfFlashVariablesEnable|FALSE|BOOLEAN|0x10 diff --git a/OvmfPkg/OvmfPkgX64.fdf b/OvmfPkg/OvmfPkgX64.fdf index 74407072563b..a567131a0591 100644 --- a/OvmfPkg/OvmfPkgX64.fdf +++ b/OvmfPkg/OvmfPkgX64.fdf @@ -76,6 +76,12 @@ [FD.MEMFD] 0x007000|0x001000 gEfiMdePkgTokenSpaceGuid.PcdGuidedExtractHandlerTableAddress|gUefiOvmfPkgT= okenSpaceGuid.PcdGuidedExtractHandlerTableSize =20 +0x008000|0x001000 +gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecGhcbPageTableBase|gUefiOvmfPkgTokenSp= aceGuid.PcdOvmfSecGhcbPageTableSize + +0x009000|0x001000 +gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecGhcbBase|gUefiOvmfPkgTokenSpaceGuid.P= cdOvmfSecGhcbSize + 0x010000|0x010000 gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecPeiTempRamBase|gUefiOvmfPkgTokenSpace= Guid.PcdOvmfSecPeiTempRamSize =20 diff --git a/OvmfPkg/ResetVector/ResetVector.inf b/OvmfPkg/ResetVector/Rese= tVector.inf index 960b47cd0797..80c971354176 100644 --- a/OvmfPkg/ResetVector/ResetVector.inf +++ b/OvmfPkg/ResetVector/ResetVector.inf @@ -37,3 +37,7 @@ [Pcd] gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecPageTablesSize gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecPeiTempRamBase gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecPeiTempRamSize + gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecGhcbPageTableBase + gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecGhcbPageTableSize + gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecGhcbBase + gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecGhcbSize diff --git a/OvmfPkg/ResetVector/Ia32/PageTables64.asm b/OvmfPkg/ResetVecto= r/Ia32/PageTables64.asm index 40f7814c1134..7e346661f2c8 100644 --- a/OvmfPkg/ResetVector/Ia32/PageTables64.asm +++ b/OvmfPkg/ResetVector/Ia32/PageTables64.asm @@ -21,6 +21,11 @@ BITS 32 %define PAGE_2M_MBO 0x080 %define PAGE_2M_PAT 0x01000 =20 +%define PAGE_4K_PDE_ATTR (PAGE_ACCESSED + \ + PAGE_DIRTY + \ + PAGE_READ_WRITE + \ + PAGE_PRESENT) + %define PAGE_2M_PDE_ATTR (PAGE_2M_MBO + \ PAGE_ACCESSED + \ PAGE_DIRTY + \ @@ -95,6 +100,37 @@ SevExit: =20 OneTimeCallRet CheckSevFeature =20 +; Check if Secure Encrypted Virtualization - Encrypted State (SEV-ES) feat= ure +; is enabled. +; +; Modified: EAX, EBX, ECX, EDX +; +; If SEV-ES is enabled then EAX will be non-zero. +; If SEV-ES is disabled then EAX will be zero. +; +CheckSevEsFeature: + xor eax, eax + + ; SEV-ES can't be enabled if SEV isn't, so first check the encryption + ; mask. + test edx, edx + jz NoSevEs + + ; Save current value of encryption mask + mov ebx, edx + + ; Check if SEV-ES is enabled + ; MSR_0xC0010131 - Bit 1 (SEV-ES enabled) + mov ecx, 0xc0010131 + rdmsr + and eax, 2 + + ; Restore encryption mask + mov edx, ebx + +NoSevEs: + OneTimeCallRet CheckSevEsFeature + ; ; Modified: EAX, EBX, ECX, EDX ; @@ -159,6 +195,49 @@ pageTableEntriesLoop: mov [(ecx * 8 + PT_ADDR (0x2000 - 8)) + 4], edx loop pageTableEntriesLoop =20 + OneTimeCall CheckSevEsFeature + test eax, eax + jz SetCr3 + + ; + ; The initial GHCB will live at 0x809000 and needs to be un-encrypted. + ; This requires the 2MB page (index 4 in the first 1GB page) for this + ; range be broken down into 512 4KB pages. All will be marked encrypt= ed, + ; except for the GHCB. + ; + mov ecx, 4 + mov eax, GHCB_PT_ADDR + PAGE_PDP_ATTR + mov [ecx * 8 + PT_ADDR (0x2000)], eax + + ; + ; Page Table Entries (512 * 4KB entries =3D> 2MB) + ; + mov ecx, 512 +pageTableEntries4kLoop: + mov eax, ecx + dec eax + shl eax, 12 + add eax, 0x800000 + add eax, PAGE_4K_PDE_ATTR + mov [ecx * 8 + GHCB_PT_ADDR - 8], eax + mov [ecx * 8 + GHCB_PT_ADDR - 4], edx + loop pageTableEntries4kLoop + + ; + ; Clear the encryption bit from the GHCB entry (index 9 in the + ; new PTE table: (0x809000 - 0x800000) >> 12)). + ; + mov ecx, 9 + xor edx, edx + mov [ecx * 8 + GHCB_PT_ADDR + 4], edx + + mov ecx, GHCB_SIZE / 4 + xor eax, eax +clearGhcbMemoryLoop: + mov dword[ecx * 4 + GHCB_BASE - 4], eax + loop clearGhcbMemoryLoop + +SetCr3: ; ; Set CR3 now that the paging structures are available ; diff --git a/OvmfPkg/ResetVector/ResetVector.nasmb b/OvmfPkg/ResetVector/Re= setVector.nasmb index 3b213cd05ab2..8909fc9313f4 100644 --- a/OvmfPkg/ResetVector/ResetVector.nasmb +++ b/OvmfPkg/ResetVector/ResetVector.nasmb @@ -53,7 +53,19 @@ %error "This implementation inherently depends on PcdOvmfSecPageTables= Size" %endif =20 + %if (FixedPcdGet32 (PcdOvmfSecGhcbPageTableSize) !=3D 0x1000) + %error "This implementation inherently depends on PcdOvmfSecGhcbPageTa= bleSize" + %endif + + %if (FixedPcdGet32 (PcdOvmfSecGhcbSize) !=3D 0x1000) + %error "This implementation inherently depends on PcdOvmfSecGhcbSize" + %endif + %define PT_ADDR(Offset) (FixedPcdGet32 (PcdOvmfSecPageTablesBase) + (Off= set)) + + %define GHCB_PT_ADDR (FixedPcdGet32 (PcdOvmfSecGhcbPageTableBase)) + %define GHCB_BASE (FixedPcdGet32 (PcdOvmfSecGhcbBase)) + %define GHCB_SIZE (FixedPcdGet32 (PcdOvmfSecGhcbSize)) %include "Ia32/Flat32ToFlat64.asm" %define SEV_TOP_OF_STACK (FixedPcdGet32 (PcdOvmfSecPeiTempRamBase) + Fix= edPcdGet32 (PcdOvmfSecPeiTempRamSize)) %include "Ia32/PageTables64.asm" --=20 2.17.1 -=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 (#47640): https://edk2.groups.io/g/devel/message/47640 Mute This Topic: https://groups.io/mt/34203541/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- From nobody Sun May 5 15:05:54 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zoho.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+47641+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 15689227556211018.7024457483902; Thu, 19 Sep 2019 12:52:35 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id HaYsYY1788612xJrFsi0LsR0; Thu, 19 Sep 2019 12:52:34 -0700 X-Received: from NAM03-DM3-obe.outbound.protection.outlook.com (NAM03-DM3-obe.outbound.protection.outlook.com [40.107.80.75]) by groups.io with SMTP; Thu, 19 Sep 2019 12:52:34 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Bm/vo3DRXbbyJ/nfGS9JwORiYWX5k34eYWWWF0jkR0dREfN/FC51o0Ijc5mUpjrJYOrajYQk+3wQy7G9CB7HE6DCtYjs3UuRxZmUg7OU5HVQaEMASdgaYoRRfTaHH9hahue/nLot1yy2phzrVRqCcR6tyqsSXrCqQxYOaNSBimpwR1W9aTVStXXlTJgYvxZ9QiDDCDSy304l7o27rt5yZhb3JXhhisufVin93ZpXHQa9aJnr9HTj9PTgvmaA1fV3bwo+Sgi0oC8gDCx0AaV1K1rvbjVK9t4wuaZyAdcRVP3xs0pkLsbd9fNqOkuCNcPBlItBQfsQT1Ub1etijnKjPg== 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=BCknf9Ht/NyPEJBUxB6CcGCgW3V8VNj8kSxA+TehLBc=; b=K+oXkrisV0G6UpbhGOPo9UbFGjx+7MbLLc9OHriZoWGfC41BQvjnq1TbvY0hbZrU2Ig4LyvONVSg0dp9uYPyCF4o1WO+urCJ0jTi6OUS1EbfMDdo0Rebci6SF+DPKoxh+0/enHsDJfxJ5jXAiJSx8Xd0RhuSmjWv/AvUXJdUCdSvm4WF2cWjKJIu4SfnJjbpKuv+UyYQhFE6r0m0XMizEJHeymdq7iR1yKdVYnm4m9pHgq+jDT5bQwQL4/9fhKNkBKAkevGsDFzaVc4kJLGV3jrM9nMVAwgw+uR9dysVKsUImxhGuQk1ZQCDp8APNuVKtxsg6mjyHrqaT+3gDEE+pA== 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 DM6PR12MB3163.namprd12.prod.outlook.com (20.179.104.150) by DM6PR12MB2890.namprd12.prod.outlook.com (20.179.71.152) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2263.23; Thu, 19 Sep 2019 19:52:32 +0000 X-Received: from DM6PR12MB3163.namprd12.prod.outlook.com ([fe80::400e:f0c3:7ca:2fcc]) by DM6PR12MB3163.namprd12.prod.outlook.com ([fe80::400e:f0c3:7ca:2fcc%6]) with mapi id 15.20.2284.009; Thu, 19 Sep 2019 19:52:32 +0000 From: "Lendacky, Thomas" To: "devel@edk2.groups.io" CC: Jordan Justen , Laszlo Ersek , Ard Biesheuvel , Michael D Kinney , Liming Gao , Eric Dong , Ray Ni , "Singh, Brijesh" , Anthony Perard , Julien Grall Subject: [edk2-devel] [RFC PATCH v2 07/44] OvmfPkg/PlatformPei: Reserve GHCB-related areas if S3 is supported Thread-Topic: [RFC PATCH v2 07/44] OvmfPkg/PlatformPei: Reserve GHCB-related areas if S3 is supported Thread-Index: AQHVbyPGa4HeapA1b0u8+VTJxQpZ4Q== Date: Thu, 19 Sep 2019 19:52:32 +0000 Message-ID: <5aedd92ee8bcf72a70a0feaeb8f1a2a178cd9cb0.1568922728.git.thomas.lendacky@amd.com> References: In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: SN4PR0501CA0146.namprd05.prod.outlook.com (2603:10b6:803:2c::24) To DM6PR12MB3163.namprd12.prod.outlook.com (2603:10b6:5:182::22) x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [165.204.78.1] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: c269f701-04b7-4432-0fa2-08d73d3ae8fa x-ms-office365-filtering-ht: Tenant x-ms-traffictypediagnostic: DM6PR12MB2890: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:8882; Received-SPF: pass (zoho.com: domain of groups.io designates 66.175.222.12 as permitted sender) client-ip=66.175.222.12; envelope-from=bounce+27952+47641+1787277+3901457@groups.io; helo=web01.groups.io; received-spf: None (protection.outlook.com: amd.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: egm7uE0UDtXq5vS1pN/eOe8V1QGtMY8hyCi8JBGW5L53XXb3iqF5Ezf24+rQDZ+xrVmqmcWcP0CrZwrgcFdC3ZVPdxOmhSrUYwEZdszoTUI9toFF5XSBtLBV8nqy8Q3VNYTWBsj6zs0E+vb0rGTOq9rCsL4btNGrXSYc9lLexCScoutaAf/PVIUk+79dby0fZcOnygpnuQuSvLsTLsNw6fzqm7xgJOVFk4syq1gCuXkf732Xf+WV/trQFx7CFetrHP9hlPA9J77IkX1NHm14M889RniJYyfH+R/Hr++llAe2v4iB1PnT+ysdp2J51p/fFm9dFyTixn4ugTs77+wPqVLpcrN+yvp93auBPflLSAQaw58AwQcdSfqYuM2bYnrcw4SombP1v6XjFrRBnW0+6W4B9NH0rL106qDSGZsV2Cg= MIME-Version: 1.0 X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: c269f701-04b7-4432-0fa2-08d73d3ae8fa X-MS-Exchange-CrossTenant-originalarrivaltime: 19 Sep 2019 19:52:32.4682 (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: H2ggOk1zY6QDIkJM0lYV5yhKX3nmvpt3Fzu+I//RSstKipSNT1HvTTOI5gMfrpzTsHXbbI2MsUhhZq4Dm0EgVw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR12MB2890 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: ccfN2gKdFodYEqqLTU99B6Nxx1787277AA= Content-Language: en-US Content-ID: Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1568922754; bh=yJswMaXX8TOXbHFGpqRDeC/XiyjpL7mccpVtoHIWZKY=; h=CC:Content-Type:Date:From:Reply-To:Subject:To; b=qCYuej4RGhJBNl4TmAcV+E99avSd78at6qCMluWrWBBB9ClSXuz9GAeu4wKtBtmlUvr QOtHLG/aim4Z/p9YeTt/tVFg+MaI2goisKvp3LffENoXrssMmNLKL6RDra4CLyOyOu3rG G7DtknqPqpfs1SawdWpcxcH7UpM2Bj29akI= X-ZohoMail-DKIM: pass (identity @groups.io) Content-Type: text/plain; charset="utf-8" From: Tom Lendacky Protect the memory used by an SEV-ES guest when S3 is supported. This includes the page table used to break down the 2MB page that contains the GHCB so that it can be marked un-encrypted, as well as the GHCB area. Regarding the lifecycle of the GHCB-related memory areas: PcdOvmfSecGhcbPageTableBase PcdOvmfSecGhcbBase (a) when and how it is initialized after first boot of the VM If SEV-ES is enabled, the GHCB-related areas are initialized during the SEC phase [OvmfPkg/ResetVector/Ia32/PageTables64.asm]. (b) how it is protected from memory allocations during DXE If S3 and SEV-ES are enabled, then InitializeRamRegions() [OvmfPkg/PlatformPei/MemDetect.c] protects the range with an AcpiNVS memory allocation HOB, in PEI. (c) how it is protected from the OS If S3 is enabled, then (1b) reserves it from the OS too. If S3 is disabled, then the range needs no protection. (d) how it is accessed on the S3 resume path It is rewritten same as in (1a), which is fine because (1b) reserved it. (e) how it is accessed on the warm reset path It is rewritten same as in (1a). Cc: Jordan Justen Cc: Laszlo Ersek Cc: Ard Biesheuvel Cc: Anthony Perard Cc: Julien Grall Signed-off-by: Tom Lendacky Reviewed-by: Laszlo Ersek --- OvmfPkg/PlatformPei/PlatformPei.inf | 4 ++++ OvmfPkg/PlatformPei/MemDetect.c | 23 +++++++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/OvmfPkg/PlatformPei/PlatformPei.inf b/OvmfPkg/PlatformPei/Plat= formPei.inf index 2736347a2e03..a9e424a6012a 100644 --- a/OvmfPkg/PlatformPei/PlatformPei.inf +++ b/OvmfPkg/PlatformPei/PlatformPei.inf @@ -84,6 +84,10 @@ [Pcd] gUefiOvmfPkgTokenSpaceGuid.PcdPciMmio64Size gUefiOvmfPkgTokenSpaceGuid.PcdOvmfDecompressionScratchEnd gUefiOvmfPkgTokenSpaceGuid.PcdQ35TsegMbytes + gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecGhcbPageTableBase + gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecGhcbPageTableSize + gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecGhcbBase + gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecGhcbSize gEfiMdePkgTokenSpaceGuid.PcdGuidedExtractHandlerTableAddress gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareSize gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableSize diff --git a/OvmfPkg/PlatformPei/MemDetect.c b/OvmfPkg/PlatformPei/MemDetec= t.c index d451989f31c9..cd2e3abb7c9b 100644 --- a/OvmfPkg/PlatformPei/MemDetect.c +++ b/OvmfPkg/PlatformPei/MemDetect.c @@ -32,6 +32,7 @@ Module Name: #include #include #include +#include =20 #include "Platform.h" #include "Cmos.h" @@ -805,6 +806,28 @@ InitializeRamRegions ( (UINT64)(UINTN) PcdGet32 (PcdOvmfSecPageTablesSize), EfiACPIMemoryNVS ); + + if (MemEncryptSevEsIsEnabled ()) { + // + // If SEV-ES is active, reserve the GHCB-related memory area. This + // includes the extra page table used to break down the 2MB page + // mapping into 4KB page entries where the GHCB resides and the + // GHCB area itself. + // + // Since this memory range will be used by the Reset Vector on S3 + // resume, it must be reserved as ACPI NVS. + // + BuildMemoryAllocationHob ( + (EFI_PHYSICAL_ADDRESS)(UINTN) PcdGet32 (PcdOvmfSecGhcbPageTableBas= e), + (UINT64)(UINTN) PcdGet32 (PcdOvmfSecGhcbPageTableSize), + EfiACPIMemoryNVS + ); + BuildMemoryAllocationHob ( + (EFI_PHYSICAL_ADDRESS)(UINTN) PcdGet32 (PcdOvmfSecGhcbBase), + (UINT64)(UINTN) PcdGet32 (PcdOvmfSecGhcbSize), + EfiACPIMemoryNVS + ); + } #endif } =20 --=20 2.17.1 -=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 (#47641): https://edk2.groups.io/g/devel/message/47641 Mute This Topic: https://groups.io/mt/34203542/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- From nobody Sun May 5 15:05:54 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zoho.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+47642+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 1568922755922897.9167581176972; Thu, 19 Sep 2019 12:52:35 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id e8bZYY1788612x4D90MIuKNd; Thu, 19 Sep 2019 12:52:35 -0700 X-Received: from NAM03-DM3-obe.outbound.protection.outlook.com (NAM03-DM3-obe.outbound.protection.outlook.com [40.107.80.49]) by groups.io with SMTP; Thu, 19 Sep 2019 12:52:35 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=K2bU6Xzbo3pVRTB7S7mw6WaFtKOe/K6Z1VhqKFK+u9fZcqN+n+qrYx/vqj2AUJVfMPOsoUvXdkLfn5lHum6fmDTIHTCblvRnGFT3ivnYuIW+bJUuAZuYyoRk6xu2loqJC7KmFnhXIDdB3wmGD37p422AEK6ow9b1YxFApTtxCkmjWYKql16wrVmApDU0zytM1HcxUtH60lLuZasXIleYInYPdZcryCpkMd+lNsWSvm+kARFzDole70bNx2x3I0MLmcQt7yZOHuPWol9lpr6GhRrofICAUGMXolY2OzD6T+e26VbDaYO25UNoguNmD89fK5uXgDyzXESXCyZYllgJNQ== 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=GLlqY5NQYtbpVpuHy7beXxC6YAP/VG/p9Bzvvz2TpOc=; b=Aewr4lPGbgTUGqyUTvcB9HJcemuvS/zUDnSMoGbvV9T4nNP8P5TArz4s3GmsFW87DybliPf2lwQMIr+DXZyHtUl5P1ydoc6Aw7aYvSfmE19P04h9WCXUZJ0e7zWRBT8PxfJhyncp+gPr+uapqzO4dZsQ71O84Y16Il7BHVW8lxs1Mp06D+O9sOW9mAXC/fyViOr4uclx5Oie+8aHHTpLLOEcUZZ1FPMa4T66uW/pvQKc+CrmUQg6S1mSTZrJoVwvaSKfZb3FQbjI4JodXytp/FMYYgOuc7bBO1MfJo2iwcicR1y9lez5gTzhMcf0jDMRlRreyL8GXxmiggv1560x1g== 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 DM6PR12MB3163.namprd12.prod.outlook.com (20.179.104.150) by DM6PR12MB2890.namprd12.prod.outlook.com (20.179.71.152) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2263.23; Thu, 19 Sep 2019 19:52:33 +0000 X-Received: from DM6PR12MB3163.namprd12.prod.outlook.com ([fe80::400e:f0c3:7ca:2fcc]) by DM6PR12MB3163.namprd12.prod.outlook.com ([fe80::400e:f0c3:7ca:2fcc%6]) with mapi id 15.20.2284.009; Thu, 19 Sep 2019 19:52:33 +0000 From: "Lendacky, Thomas" To: "devel@edk2.groups.io" CC: Jordan Justen , Laszlo Ersek , Ard Biesheuvel , Michael D Kinney , Liming Gao , Eric Dong , Ray Ni , "Singh, Brijesh" Subject: [edk2-devel] [RFC PATCH v2 08/44] OvmfPkg: Create GHCB pages for use during Pei and Dxe phase Thread-Topic: [RFC PATCH v2 08/44] OvmfPkg: Create GHCB pages for use during Pei and Dxe phase Thread-Index: AQHVbyPHXRDv/YGRIEiL4Ddvjs4NBA== Date: Thu, 19 Sep 2019 19:52:33 +0000 Message-ID: <9799d415f652618c8a960cdb0040918185588652.1568922728.git.thomas.lendacky@amd.com> References: In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: SN4PR0501CA0146.namprd05.prod.outlook.com (2603:10b6:803:2c::24) To DM6PR12MB3163.namprd12.prod.outlook.com (2603:10b6:5:182::22) x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [165.204.78.1] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 4756aa61-f346-4835-33c9-08d73d3ae9a1 x-ms-office365-filtering-ht: Tenant x-ms-traffictypediagnostic: DM6PR12MB2890: x-ms-exchange-purlcount: 1 x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:7691; Received-SPF: pass (zoho.com: domain of groups.io designates 66.175.222.12 as permitted sender) client-ip=66.175.222.12; envelope-from=bounce+27952+47642+1787277+3901457@groups.io; helo=web01.groups.io; received-spf: None (protection.outlook.com: amd.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: Membm+uCOvEOnLnSOqln5UAByZnLMwmO2MUjfMGnWOL+2x9WmRXzcd0hyaRvToBMj3truTxujciks2Js59BZPNOlaiAIfOrl5oETxbrg2rM8NMMaG2WEXqk5q8m0qiiE9MviWzrhCoEHaAH4O0oprM9VsIoR+T//b/LqbkaCEqboxf3XN0p9B66nB7eMMcBBKTWYSO7+IxjVgnKEh45Pb+n+r1r5fi7MZm/sBxngETlCKgssjX/37QCFMEbpGDEBZWqDNoebuKU/sclVW9dKpqlJPJOnxuYfszmchJYv95WVhOX4zLORsr8UoUXsWkx6vL/XiHOpij0HJmuYNeSTn3QRv8gvumoDI889sU0f5ZhFEcsvrDhDYtZfIiGlGX/d1IM1dmQBehbLbmNkbk0wHjQQxazHEndS+CFku9/x3LE= MIME-Version: 1.0 X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: 4756aa61-f346-4835-33c9-08d73d3ae9a1 X-MS-Exchange-CrossTenant-originalarrivaltime: 19 Sep 2019 19:52:33.5276 (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: jnrBrRiSgnuBSbVU25GmBx+MjdNCYnjnvv76N698zStP4741Xk1H+Z7vgPpZb1ywKasf9UWHYYkZ937FlFs0aw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR12MB2890 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: vi1qoNFSxNV3bCQ7VLKjgnTBx1787277AA= Content-Language: en-US Content-ID: <1D2FD5EBCDC4E2488ACE870DA98017A3@namprd12.prod.outlook.com> Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1568922755; bh=eH6ptAvNfXUMztySv1WRzwL4sZJ0VgkQLT+TDwd2hV4=; h=CC:Content-Type:Date:From:Reply-To:Subject:To; b=kXBKMIuO2LO0/C1iqtaG4MqWLi/TUggj2ahvZodQQxLUBp2esBdp8ixUkaxLSivPiox s1U3JNU5ODtckZ06AqCZAYiJq8iX7fpeArsFoXH4t9+MTnNZ8o7scq8SA8+3E4AW1zIKz lw9ze7VnwgmFtUddCfIqXDtlXAupRwi0oIM= 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=3D2198 Allocate memory for the GHCB pages during SEV initialization for use during Pei and Dxe phases. The GHCB page(s) must be shared pages, so clear the encryption mask from the current page table entries. Upon successful allocation, set the GHCB PCDs (PcdGhcbBase and PcdGhcbSize). Cc: Jordan Justen Cc: Laszlo Ersek Cc: Ard Biesheuvel Signed-off-by: Tom Lendacky Reviewed-by: Laszlo Ersek --- OvmfPkg/OvmfPkgIa32.dsc | 2 ++ OvmfPkg/OvmfPkgIa32X64.dsc | 2 ++ OvmfPkg/OvmfPkgX64.dsc | 2 ++ OvmfPkg/PlatformPei/PlatformPei.inf | 2 ++ OvmfPkg/PlatformPei/AmdSev.c | 36 ++++++++++++++++++++++++++++- 5 files changed, 43 insertions(+), 1 deletion(-) diff --git a/OvmfPkg/OvmfPkgIa32.dsc b/OvmfPkg/OvmfPkgIa32.dsc index 0ce5c01722ef..4369cf6d55e5 100644 --- a/OvmfPkg/OvmfPkgIa32.dsc +++ b/OvmfPkg/OvmfPkgIa32.dsc @@ -560,6 +560,8 @@ [PcdsDynamicDefault] =20 # Set SEV-ES defaults gEfiMdeModulePkgTokenSpaceGuid.PcdSevEsActive|0 + gEfiMdeModulePkgTokenSpaceGuid.PcdGhcbBase|0 + gEfiMdeModulePkgTokenSpaceGuid.PcdGhcbSize|0 =20 !if $(SMM_REQUIRE) =3D=3D TRUE gUefiOvmfPkgTokenSpaceGuid.PcdQ35TsegMbytes|8 diff --git a/OvmfPkg/OvmfPkgIa32X64.dsc b/OvmfPkg/OvmfPkgIa32X64.dsc index e7455e35a55d..a74f5028068e 100644 --- a/OvmfPkg/OvmfPkgIa32X64.dsc +++ b/OvmfPkg/OvmfPkgIa32X64.dsc @@ -572,6 +572,8 @@ [PcdsDynamicDefault] =20 # Set SEV-ES defaults gEfiMdeModulePkgTokenSpaceGuid.PcdSevEsActive|0 + gEfiMdeModulePkgTokenSpaceGuid.PcdGhcbBase|0 + gEfiMdeModulePkgTokenSpaceGuid.PcdGhcbSize|0 =20 !if $(SMM_REQUIRE) =3D=3D TRUE gUefiOvmfPkgTokenSpaceGuid.PcdQ35TsegMbytes|8 diff --git a/OvmfPkg/OvmfPkgX64.dsc b/OvmfPkg/OvmfPkgX64.dsc index 0b8305cd10a2..fd714d386e75 100644 --- a/OvmfPkg/OvmfPkgX64.dsc +++ b/OvmfPkg/OvmfPkgX64.dsc @@ -571,6 +571,8 @@ [PcdsDynamicDefault] =20 # Set SEV-ES defaults gEfiMdeModulePkgTokenSpaceGuid.PcdSevEsActive|0 + gEfiMdeModulePkgTokenSpaceGuid.PcdGhcbBase|0 + gEfiMdeModulePkgTokenSpaceGuid.PcdGhcbSize|0 =20 !if $(SMM_REQUIRE) =3D=3D TRUE gUefiOvmfPkgTokenSpaceGuid.PcdQ35TsegMbytes|8 diff --git a/OvmfPkg/PlatformPei/PlatformPei.inf b/OvmfPkg/PlatformPei/Plat= formPei.inf index a9e424a6012a..62abc99f4622 100644 --- a/OvmfPkg/PlatformPei/PlatformPei.inf +++ b/OvmfPkg/PlatformPei/PlatformPei.inf @@ -105,6 +105,8 @@ [Pcd] gUefiCpuPkgTokenSpaceGuid.PcdCpuApInitTimeOutInMicroSeconds gUefiCpuPkgTokenSpaceGuid.PcdCpuApStackSize gEfiMdeModulePkgTokenSpaceGuid.PcdSevEsActive + gEfiMdeModulePkgTokenSpaceGuid.PcdGhcbBase + gEfiMdeModulePkgTokenSpaceGuid.PcdGhcbSize =20 [FixedPcd] gEfiMdePkgTokenSpaceGuid.PcdPciExpressBaseAddress diff --git a/OvmfPkg/PlatformPei/AmdSev.c b/OvmfPkg/PlatformPei/AmdSev.c index 7ae2f26a2ba7..30c0e4af7252 100644 --- a/OvmfPkg/PlatformPei/AmdSev.c +++ b/OvmfPkg/PlatformPei/AmdSev.c @@ -16,6 +16,9 @@ #include #include #include +#include +#include +#include =20 #include "Platform.h" =20 @@ -30,7 +33,10 @@ AmdSevEsInitialize ( VOID ) { - RETURN_STATUS PcdStatus; + VOID *GhcbBase; + PHYSICAL_ADDRESS GhcbBasePa; + UINTN GhcbPageCount; + RETURN_STATUS PcdStatus, DecryptStatus; =20 if (!MemEncryptSevEsIsEnabled ()) { return; @@ -38,6 +44,34 @@ AmdSevEsInitialize ( =20 PcdStatus =3D PcdSetBoolS (PcdSevEsActive, 1); ASSERT_RETURN_ERROR (PcdStatus); + + // + // Allocate GHCB pages. + // + GhcbPageCount =3D mMaxCpuCount; + GhcbBase =3D AllocatePages (GhcbPageCount); + ASSERT (GhcbBase); + + GhcbBasePa =3D (PHYSICAL_ADDRESS)(UINTN) GhcbBase; + + DecryptStatus =3D MemEncryptSevClearPageEncMask ( + 0, + GhcbBasePa, + GhcbPageCount, + TRUE + ); + ASSERT_RETURN_ERROR (DecryptStatus); + + SetMem (GhcbBase, GhcbPageCount * SIZE_4KB, 0); + + PcdStatus =3D PcdSet64S (PcdGhcbBase, (UINT64)GhcbBasePa); + ASSERT_RETURN_ERROR (PcdStatus); + PcdStatus =3D PcdSet64S (PcdGhcbSize, (UINT64)EFI_PAGES_TO_SIZE (GhcbPag= eCount)); + ASSERT_RETURN_ERROR (PcdStatus); + + DEBUG ((DEBUG_INFO, "SEV-ES is enabled, %u GHCB pages allocated starting= at 0x%lx\n", GhcbPageCount, GhcbBase)); + + AsmWriteMsr64 (MSR_SEV_ES_GHCB, (UINT64)GhcbBasePa); } =20 /** --=20 2.17.1 -=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 (#47642): https://edk2.groups.io/g/devel/message/47642 Mute This Topic: https://groups.io/mt/34203543/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- From nobody Sun May 5 15:05:54 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zoho.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+47643+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 1568922757805596.6751452175214; Thu, 19 Sep 2019 12:52:37 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id I4kQYY1788612x6tcNUD9Nt5; Thu, 19 Sep 2019 12:52:36 -0700 X-Received: from NAM03-DM3-obe.outbound.protection.outlook.com (NAM03-DM3-obe.outbound.protection.outlook.com [40.107.80.58]) by groups.io with SMTP; Thu, 19 Sep 2019 12:52:36 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=HybYLJiflSyJanMe+7rfHlXiuFUq29y7HIrLRl/8czYcLs1Mha2t1UeCSZmYuRe7nv57XRSrG2GyHZuFRlbEYm+rBTRHiWi0IUJCitq89m4XyVvvyP6VaGVttdhwQ554Ifv61K0WZC02rVStCuY/ePT9lEKV8mqdJwzDgoeClIiKUXPIgM0LZmM5iiM2VE55eQcGa5fVQw5giGPduw0eXw0PDfQuJ4ub5BrLAJdvjmmDPz7CtlUo6azWJJ0I7WFu5Ws/IrQgJH6iJUET5mu6Uv6fba4nXxx8xv++aWQjAZyIdn8i/QzYysQ1nOxEICEVu9foLWkKOqOj847KesKHzA== 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=yG9ANJ6aBpQcdcpFxOryN+Uo8rz9SWXUfvPb73kTK1E=; b=bze8bIaaj7xP3gOy1kbCdkKa52sFqiFRBBOzkgZ2M85RMyFgW9XJcc+M0D/SF2K8kMfhAdpjkwWV8NjH+htGvwdCUceqjqcM7zDgFlOzjyBDHRM29yl60JxM0ZvkAcVgkwh+wu5O3BYi3YdLIWWei5pNSwjt7WCykH21vV+/VoCAVQwO/4CUO1A2oQoiJ+ppyon8TC9Ysr74qnxs+5LA0vtBH1E2CNmwHZ+pV0gLkYH1yBXBsxcCxV+KE+mhYjKQUFXp54st0KIrweLcHZbBzQ3SV42vh6Qm4tBnVvzIB4/V4MhoHNKJBxdmozgBBEdtb6ZmIHShdIqKlQKDvraKGQ== 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 DM6PR12MB3163.namprd12.prod.outlook.com (20.179.104.150) by DM6PR12MB2890.namprd12.prod.outlook.com (20.179.71.152) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2263.23; Thu, 19 Sep 2019 19:52:34 +0000 X-Received: from DM6PR12MB3163.namprd12.prod.outlook.com ([fe80::400e:f0c3:7ca:2fcc]) by DM6PR12MB3163.namprd12.prod.outlook.com ([fe80::400e:f0c3:7ca:2fcc%6]) with mapi id 15.20.2284.009; Thu, 19 Sep 2019 19:52:34 +0000 From: "Lendacky, Thomas" To: "devel@edk2.groups.io" CC: Jordan Justen , Laszlo Ersek , Ard Biesheuvel , Michael D Kinney , Liming Gao , Eric Dong , Ray Ni , "Singh, Brijesh" , Jian J Wang , Hao A Wu , Dandan Bi Subject: [edk2-devel] [RFC PATCH v2 09/44] MdeModulePkg/DxeIplPeim: Support GHCB pages when creating page tables Thread-Topic: [RFC PATCH v2 09/44] MdeModulePkg/DxeIplPeim: Support GHCB pages when creating page tables Thread-Index: AQHVbyPHEHmiP1dPg0uKbuSxhO+EVQ== Date: Thu, 19 Sep 2019 19:52:34 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: SN4PR0501CA0146.namprd05.prod.outlook.com (2603:10b6:803:2c::24) To DM6PR12MB3163.namprd12.prod.outlook.com (2603:10b6:5:182::22) x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [165.204.78.1] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 23dd4193-6528-4928-d9ef-08d73d3aea4b x-ms-office365-filtering-ht: Tenant x-ms-traffictypediagnostic: DM6PR12MB2890: x-ms-exchange-purlcount: 1 x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:7691; Received-SPF: pass (zoho.com: domain of groups.io designates 66.175.222.12 as permitted sender) client-ip=66.175.222.12; envelope-from=bounce+27952+47643+1787277+3901457@groups.io; helo=web01.groups.io; received-spf: None (protection.outlook.com: amd.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: gPiPOl9GZnG/cN+DhVxoHqew8wrxCGy6DmAQpEJPy+21N5Q2ez5yhQs6+jqQbXCGRXg5HeuegpYnaPMgyPjnw5Mmy3EnZ68tOULJORR+LwbZZfZQVdpHTRsESlP4WKfB1GKx4SHtKc1u7mJ0h1sFls0bVRZwSZycoaoAOJT55WOu9ZMU50Ya9h0SjgIZH97P3ZCBugrRpbNdgrcPVam6J2bgdHbAmtxOOFq8yz73SFEhyDr8XBeFWgK3IqOY0k9jAmhsfPN7l0HLSdvAHA+fLeyhEqNaedn45nRJkUXeOiggPcEcMeGdlWZaDBjgSs/d0DZ/KMF5cjJ59ANkKBEGNQb4vebjsVf2XBCHvx71OHecQeVWRNUI/GNfvmDC8822kNJ7HTLnvja0lRc076/KpS1kIqssbkTyOi5faIA33YI= MIME-Version: 1.0 X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: 23dd4193-6528-4928-d9ef-08d73d3aea4b X-MS-Exchange-CrossTenant-originalarrivaltime: 19 Sep 2019 19:52:34.7010 (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: 0Qe8iz20qoV/CHfHNSvYUGFE+CdFgMHuwUyFpp10g5JMht2VSTzFkxJgeHuQnPmqi7/Xf3mlpIE475u+VWgCDA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR12MB2890 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: uosVcjhkNzoe7HifYb5xzpK7x1787277AA= Content-Language: en-US Content-ID: Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1568922756; bh=/jpD8d/yfZgZE7BBrQuoS/ieyOLmhqPiMTQNLJV2wns=; h=CC:Content-Type:Date:From:Reply-To:Subject:To; b=X8cib6avntvxehU4JUGDn/uZGa8XO+gC+6owH9zBK8HbpoAyszv7k9wsPDpeBdbWqMG r9SUoseBIq1Ewy7nGOm0LU5EXlL1/jbieYzW3YfjCIM4OQI9doTOJlbdPOqjXLsf16FAW 7zwew3BN0+u3PcEyv866L4rG0PIvre87KHU= 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=3D2198 GHCB pages must be mapped as shared pages, so modify the process of creating identity mapped pagetable entries so that GHCB entries are created without the encryption bit set. Cc: Jian J Wang Cc: Hao A Wu Cc: Dandan Bi Cc: Liming Gao Signed-off-by: Tom Lendacky --- MdeModulePkg/Core/DxeIplPeim/DxeIpl.inf | 2 + .../Core/DxeIplPeim/X64/VirtualMemory.h | 12 ++++- .../Core/DxeIplPeim/Ia32/DxeLoadFunc.c | 4 +- .../Core/DxeIplPeim/X64/DxeLoadFunc.c | 11 ++++- .../Core/DxeIplPeim/X64/VirtualMemory.c | 49 ++++++++++++++----- 5 files changed, 62 insertions(+), 16 deletions(-) diff --git a/MdeModulePkg/Core/DxeIplPeim/DxeIpl.inf b/MdeModulePkg/Core/Dx= eIplPeim/DxeIpl.inf index 98bc17fc9d1f..5e6b78e295e6 100644 --- a/MdeModulePkg/Core/DxeIplPeim/DxeIpl.inf +++ b/MdeModulePkg/Core/DxeIplPeim/DxeIpl.inf @@ -111,6 +111,8 @@ [Pcd.IA32,Pcd.X64] gEfiMdeModulePkgTokenSpaceGuid.PcdHeapGuardPropertyMask ##= CONSUMES gEfiMdeModulePkgTokenSpaceGuid.PcdCpuStackGuard ##= CONSUMES gEfiMdeModulePkgTokenSpaceGuid.PcdUse5LevelPageTable ##= SOMETIMES_CONSUMES + gEfiMdeModulePkgTokenSpaceGuid.PcdGhcbBase ##= CONSUMES + gEfiMdeModulePkgTokenSpaceGuid.PcdGhcbSize ##= CONSUMES =20 [Pcd.IA32,Pcd.X64,Pcd.ARM,Pcd.AARCH64] gEfiMdeModulePkgTokenSpaceGuid.PcdSetNxForStack ## SOMETIM= ES_CONSUMES diff --git a/MdeModulePkg/Core/DxeIplPeim/X64/VirtualMemory.h b/MdeModulePk= g/Core/DxeIplPeim/X64/VirtualMemory.h index 2d0493f109e8..6b7c38a441d6 100644 --- a/MdeModulePkg/Core/DxeIplPeim/X64/VirtualMemory.h +++ b/MdeModulePkg/Core/DxeIplPeim/X64/VirtualMemory.h @@ -201,6 +201,8 @@ EnableExecuteDisableBit ( @param[in, out] PageEntry2M Pointer to 2M page entry. @param[in] StackBase Stack base address. @param[in] StackSize Stack size. + @param[in] GhcbBase GHCB page area base address. + @param[in] GhcbSize GHCB page area size. =20 **/ VOID @@ -208,7 +210,9 @@ Split2MPageTo4K ( IN EFI_PHYSICAL_ADDRESS PhysicalAddress, IN OUT UINT64 *PageEntry2M, IN EFI_PHYSICAL_ADDRESS StackBase, - IN UINTN StackSize + IN UINTN StackSize, + IN EFI_PHYSICAL_ADDRESS GhcbBase, + IN UINTN GhcbSize ); =20 /** @@ -217,6 +221,8 @@ Split2MPageTo4K ( =20 @param[in] StackBase Stack base address. @param[in] StackSize Stack size. + @param[in] GhcbBase GHCB page area base address. + @param[in] GhcbSize GHCB page area size. =20 @return The address of 4 level page map. =20 @@ -224,7 +230,9 @@ Split2MPageTo4K ( UINTN CreateIdentityMappingPageTables ( IN EFI_PHYSICAL_ADDRESS StackBase, - IN UINTN StackSize + IN UINTN StackSize, + IN EFI_PHYSICAL_ADDRESS GhcbBase, + IN UINTN GhcbkSize ); =20 =20 diff --git a/MdeModulePkg/Core/DxeIplPeim/Ia32/DxeLoadFunc.c b/MdeModulePkg= /Core/DxeIplPeim/Ia32/DxeLoadFunc.c index 172d7cd1c60c..630a3503f6ba 100644 --- a/MdeModulePkg/Core/DxeIplPeim/Ia32/DxeLoadFunc.c +++ b/MdeModulePkg/Core/DxeIplPeim/Ia32/DxeLoadFunc.c @@ -123,7 +123,7 @@ Create4GPageTablesIa32Pae ( // // Need to split this 2M page that covers stack range. // - Split2MPageTo4K (PhysicalAddress, (UINT64 *) PageDirectoryEntry, S= tackBase, StackSize); + Split2MPageTo4K (PhysicalAddress, (UINT64 *) PageDirectoryEntry, S= tackBase, StackSize, 0, 0); } else { // // Fill in the Page Directory entries @@ -278,7 +278,7 @@ HandOffToDxeCore ( // // Create page table and save PageMapLevel4 to CR3 // - PageTables =3D CreateIdentityMappingPageTables (BaseOfStack, STACK_SIZ= E); + PageTables =3D CreateIdentityMappingPageTables (BaseOfStack, STACK_SIZ= E, 0, 0); =20 // // End of PEI phase signal diff --git a/MdeModulePkg/Core/DxeIplPeim/X64/DxeLoadFunc.c b/MdeModulePkg/= Core/DxeIplPeim/X64/DxeLoadFunc.c index 2867610bff4d..77da20e5c5c5 100644 --- a/MdeModulePkg/Core/DxeIplPeim/X64/DxeLoadFunc.c +++ b/MdeModulePkg/Core/DxeIplPeim/X64/DxeLoadFunc.c @@ -35,6 +35,8 @@ HandOffToDxeCore ( UINT32 Index; EFI_VECTOR_HANDOFF_INFO *VectorInfo; EFI_PEI_VECTOR_HANDOFF_INFO_PPI *VectorHandoffInfoPpi; + VOID *GhcbBase; + UINTN GhcbSize; =20 if (IsNullDetectionEnabled ()) { ClearFirst4KPage (HobList.Raw); @@ -77,12 +79,19 @@ HandOffToDxeCore ( TopOfStack =3D (VOID *) ((UINTN) BaseOfStack + EFI_SIZE_TO_PAGES (STACK_= SIZE) * EFI_PAGE_SIZE - CPU_STACK_ALIGNMENT); TopOfStack =3D ALIGN_POINTER (TopOfStack, CPU_STACK_ALIGNMENT); =20 + // + // Get the address and size of the GHCB pages + // + GhcbBase =3D (VOID *) PcdGet64 (PcdGhcbBase); + GhcbSize =3D PcdGet64 (PcdGhcbSize); + PageTables =3D 0; if (FeaturePcdGet (PcdDxeIplBuildPageTables)) { // // Create page table and save PageMapLevel4 to CR3 // - PageTables =3D CreateIdentityMappingPageTables ((EFI_PHYSICAL_ADDRESS)= (UINTN) BaseOfStack, STACK_SIZE); + PageTables =3D CreateIdentityMappingPageTables ((EFI_PHYSICAL_ADDRESS)= (UINTN) BaseOfStack, STACK_SIZE, + (EFI_PHYSICAL_ADDRESS) (= UINTN) GhcbBase, GhcbSize); } else { // // Set NX for stack feature also require PcdDxeIplBuildPageTables be T= RUE diff --git a/MdeModulePkg/Core/DxeIplPeim/X64/VirtualMemory.c b/MdeModulePk= g/Core/DxeIplPeim/X64/VirtualMemory.c index 516cf908bc88..32a81d1f3c21 100644 --- a/MdeModulePkg/Core/DxeIplPeim/X64/VirtualMemory.c +++ b/MdeModulePkg/Core/DxeIplPeim/X64/VirtualMemory.c @@ -181,6 +181,8 @@ EnableExecuteDisableBit ( @param Size Size of the given physical memory. @param StackBase Base address of stack. @param StackSize Size of stack. + @param GhcbBase Base address of GHCB pages. + @param GhcbSize Size of GHCB area. =20 @retval TRUE Page table should be split. @retval FALSE Page table should not be split. @@ -190,7 +192,9 @@ ToSplitPageTable ( IN EFI_PHYSICAL_ADDRESS Address, IN UINTN Size, IN EFI_PHYSICAL_ADDRESS StackBase, - IN UINTN StackSize + IN UINTN StackSize, + IN EFI_PHYSICAL_ADDRESS GhcbBase, + IN UINTN GhcbSize ) { if (IsNullDetectionEnabled () && Address =3D=3D 0) { @@ -209,6 +213,12 @@ ToSplitPageTable ( } } =20 + if (GhcbBase) { + if ((Address < GhcbBase + GhcbSize) && ((Address + Size) > GhcbBase)) { + return TRUE; + } + } + return FALSE; } /** @@ -322,6 +332,8 @@ AllocatePageTableMemory ( @param[in, out] PageEntry2M Pointer to 2M page entry. @param[in] StackBase Stack base address. @param[in] StackSize Stack size. + @param[in] GhcbBase GHCB page area base address. + @param[in] GhcbSize GHCB page area size. =20 **/ VOID @@ -329,7 +341,9 @@ Split2MPageTo4K ( IN EFI_PHYSICAL_ADDRESS PhysicalAddress, IN OUT UINT64 *PageEntry2M, IN EFI_PHYSICAL_ADDRESS StackBase, - IN UINTN StackSize + IN UINTN StackSize, + IN EFI_PHYSICAL_ADDRESS GhcbBase, + IN UINTN GhcbSize ) { EFI_PHYSICAL_ADDRESS PhysicalAddress4K; @@ -355,7 +369,12 @@ Split2MPageTo4K ( // // Fill in the Page Table entries // - PageTableEntry->Uint64 =3D (UINT64) PhysicalAddress4K | AddressEncMask; + PageTableEntry->Uint64 =3D (UINT64) PhysicalAddress4K; + if (!GhcbBase + || (PhysicalAddress4K < GhcbBase) + || (PhysicalAddress4K >=3D GhcbBase + GhcbSize)) { + PageTableEntry->Uint64 |=3D AddressEncMask; + } PageTableEntry->Bits.ReadWrite =3D 1; =20 if ((IsNullDetectionEnabled () && PhysicalAddress4K =3D=3D 0) || @@ -383,6 +402,8 @@ Split2MPageTo4K ( @param[in, out] PageEntry1G Pointer to 1G page entry. @param[in] StackBase Stack base address. @param[in] StackSize Stack size. + @param[in] GhcbBase GHCB page area base address. + @param[in] GhcbSize GHCB page area size. =20 **/ VOID @@ -390,7 +411,9 @@ Split1GPageTo2M ( IN EFI_PHYSICAL_ADDRESS PhysicalAddress, IN OUT UINT64 *PageEntry1G, IN EFI_PHYSICAL_ADDRESS StackBase, - IN UINTN StackSize + IN UINTN StackSize, + IN EFI_PHYSICAL_ADDRESS GhcbBase, + IN UINTN GhcbSize ) { EFI_PHYSICAL_ADDRESS PhysicalAddress2M; @@ -413,11 +436,11 @@ Split1GPageTo2M ( =20 PhysicalAddress2M =3D PhysicalAddress; for (IndexOfPageDirectoryEntries =3D 0; IndexOfPageDirectoryEntries < 51= 2; IndexOfPageDirectoryEntries++, PageDirectoryEntry++, PhysicalAddress2M += =3D SIZE_2MB) { - if (ToSplitPageTable (PhysicalAddress2M, SIZE_2MB, StackBase, StackSiz= e)) { + if (ToSplitPageTable (PhysicalAddress2M, SIZE_2MB, StackBase, StackSiz= e, GhcbBase, GhcbSize)) { // // Need to split this 2M page that covers NULL or stack range. // - Split2MPageTo4K (PhysicalAddress2M, (UINT64 *) PageDirectoryEntry, S= tackBase, StackSize); + Split2MPageTo4K (PhysicalAddress2M, (UINT64 *) PageDirectoryEntry, S= tackBase, StackSize, GhcbBase, GhcbSize); } else { // // Fill in the Page Directory entries @@ -616,6 +639,8 @@ EnablePageTableProtection ( =20 @param[in] StackBase Stack base address. @param[in] StackSize Stack size. + @param[in] GhcbBase GHCB base address. + @param[in] GhcbSize GHCB size. =20 @return The address of 4 level page map. =20 @@ -623,7 +648,9 @@ EnablePageTableProtection ( UINTN CreateIdentityMappingPageTables ( IN EFI_PHYSICAL_ADDRESS StackBase, - IN UINTN StackSize + IN UINTN StackSize, + IN EFI_PHYSICAL_ADDRESS GhcbBase, + IN UINTN GhcbSize ) { UINT32 RegEax; @@ -809,8 +836,8 @@ CreateIdentityMappingPageTables ( PageDirectory1GEntry =3D (VOID *) PageDirectoryPointerEntry; =20 for (IndexOfPageDirectoryEntries =3D 0; IndexOfPageDirectoryEntrie= s < 512; IndexOfPageDirectoryEntries++, PageDirectory1GEntry++, PageAddress= +=3D SIZE_1GB) { - if (ToSplitPageTable (PageAddress, SIZE_1GB, StackBase, StackSiz= e)) { - Split1GPageTo2M (PageAddress, (UINT64 *) PageDirectory1GEntry,= StackBase, StackSize); + if (ToSplitPageTable (PageAddress, SIZE_1GB, StackBase, StackSiz= e, GhcbBase, GhcbSize)) { + Split1GPageTo2M (PageAddress, (UINT64 *) PageDirectory1GEntry,= StackBase, StackSize, GhcbBase, GhcbSize); } else { // // Fill in the Page Directory entries @@ -840,11 +867,11 @@ CreateIdentityMappingPageTables ( PageDirectoryPointerEntry->Bits.Present =3D 1; =20 for (IndexOfPageDirectoryEntries =3D 0; IndexOfPageDirectoryEntr= ies < 512; IndexOfPageDirectoryEntries++, PageDirectoryEntry++, PageAddress= +=3D SIZE_2MB) { - if (ToSplitPageTable (PageAddress, SIZE_2MB, StackBase, StackS= ize)) { + if (ToSplitPageTable (PageAddress, SIZE_2MB, StackBase, StackS= ize, GhcbBase, GhcbSize)) { // // Need to split this 2M page that covers NULL or stack rang= e. // - Split2MPageTo4K (PageAddress, (UINT64 *) PageDirectoryEntry,= StackBase, StackSize); + Split2MPageTo4K (PageAddress, (UINT64 *) PageDirectoryEntry,= StackBase, StackSize, GhcbBase, GhcbSize); } else { // // Fill in the Page Directory entries --=20 2.17.1 -=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 (#47643): https://edk2.groups.io/g/devel/message/47643 Mute This Topic: https://groups.io/mt/34203545/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- From nobody Sun May 5 15:05:54 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zoho.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+47644+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 1568922757986717.2508369638612; Thu, 19 Sep 2019 12:52:37 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id t43PYY1788612xCySF7devQ1; Thu, 19 Sep 2019 12:52:37 -0700 X-Received: from NAM03-DM3-obe.outbound.protection.outlook.com (NAM03-DM3-obe.outbound.protection.outlook.com [40.107.80.87]) by groups.io with SMTP; Thu, 19 Sep 2019 12:52:37 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=UtaVDjyn/Sc3Tf5ou3L+KfHm8Fo2rjxUArWHE1H5fDWeDRrgEUEzT6Vt0gdt14AsketJqjQfPxpXLe2JUZWncZwnLeSYdOZ/GKeJXceUA9vEOEpBV7i3igZBio/XdiEQchlSmWqbQBTWzk+6L+m1erzmK7njH+YeTTA+Ay9g01B57bZz98cafi6pp22jtm7XR0HVUikGu6fhoQ6CFxfqW3iWCZfNjSpn85uLlaIvy0b8W4w7asNIXW9d5AAZL2SlSp2qRnNvG6X+mrfIExCngDIP+usEXfkPv/VW7TgGluGDm6jdXzQQUown1wWMveFz95OYaL53caLvfvdv0myPKA== 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=Y0b/c6QVQIYB2LE2zIb2FaWHiNt/1Zg50uw/1QYpqUw=; b=Pc6H7HH9VSrzxph7UQ1bFwu3LCXbJ/mko0r5KQBTKMopeYfq5xPZYKdPu49RmIo3HNHWl5ODru9iH0cUYiiAw64zno1I898Bt2IL6eKFh/sZEZTfPe/skVFXKvt49sZdq1svGxpyGlM3NqE2fZ9nYTWKHudbyhv/NMse9fPZ8HdXXWcXKvp3wcA7ZGtR3HrNhlHzAOaU7H8rWoyHyx4DnRCfBl7qDxfeMn8tLWjZ5LxDsedOuStHwPVDrFE36zXocuFq4u4ovtLu3AMkoSHan/074/i6GX6gLohmQOIKu6mGXfLImQIq2KjROm6YnxL1nmmjqYRGVXRl3l/sPvmZRQ== 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 DM6PR12MB3163.namprd12.prod.outlook.com (20.179.104.150) by DM6PR12MB2890.namprd12.prod.outlook.com (20.179.71.152) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2263.23; Thu, 19 Sep 2019 19:52:35 +0000 X-Received: from DM6PR12MB3163.namprd12.prod.outlook.com ([fe80::400e:f0c3:7ca:2fcc]) by DM6PR12MB3163.namprd12.prod.outlook.com ([fe80::400e:f0c3:7ca:2fcc%6]) with mapi id 15.20.2284.009; Thu, 19 Sep 2019 19:52:35 +0000 From: "Lendacky, Thomas" To: "devel@edk2.groups.io" CC: Jordan Justen , Laszlo Ersek , Ard Biesheuvel , Michael D Kinney , Liming Gao , Eric Dong , Ray Ni , "Singh, Brijesh" Subject: [edk2-devel] [RFC PATCH v2 10/44] OvmfPkg: A per-CPU variable area for #VC usage Thread-Topic: [RFC PATCH v2 10/44] OvmfPkg: A per-CPU variable area for #VC usage Thread-Index: AQHVbyPIi0t/93BoCUigK+eNYlDx0A== Date: Thu, 19 Sep 2019 19:52:35 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: SN4PR0501CA0146.namprd05.prod.outlook.com (2603:10b6:803:2c::24) To DM6PR12MB3163.namprd12.prod.outlook.com (2603:10b6:5:182::22) x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [165.204.78.1] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 7a2e5bdd-2215-40f7-0f64-08d73d3aeaf4 x-ms-office365-filtering-ht: Tenant x-ms-traffictypediagnostic: DM6PR12MB2890: x-ms-exchange-purlcount: 1 x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:8882; Received-SPF: pass (zoho.com: domain of groups.io designates 66.175.222.12 as permitted sender) client-ip=66.175.222.12; envelope-from=bounce+27952+47644+1787277+3901457@groups.io; helo=web01.groups.io; received-spf: None (protection.outlook.com: amd.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: WIjLkThCdDz5uI98x2OUeIFMHstw/qDcQgC38RuErK23hA5Dkd/ryTShHOTY7nUnjPbP2LhNsmrnGVRyVREMfnqErF2bLG47IlFg4cHwsryBZHOKlhxM7UdoxPY5fuT18Fq9yWe2kkmIG4NxAPe2X4F+BJyoccPMCtj+cN1UUj0zFQsJHNDQovg/mzJlBN4z+28ffUWTgi77Pu6Qm9KsDLNWdvhryJqlKl/NjODfIuk/eYBYV6j7QQnFOoWC7NVvzMDOlMTrVNYIfDe6CgRgkmuL/bx9f/POb2ZLz4G7hFNUZr1kbAkrLiKoaIGVrAre5VpnmzebsTAe5GEDthDhMGW9O4EqoVr5wbKU9jdXJu0CbRd5KilJVgSPiybtnDJRNY+CGcBsmFKpZSKVZHus2aDJ4hYllbR3fRAgnb2L1Wg= MIME-Version: 1.0 X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: 7a2e5bdd-2215-40f7-0f64-08d73d3aeaf4 X-MS-Exchange-CrossTenant-originalarrivaltime: 19 Sep 2019 19:52:35.7724 (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: lJlEBNhGxEPSkU207L68uTP/FQ9BEWieyz1PRzvjM9nDeTHEuy9c5B5qJ85/ETp66QGSra+AFDfM4olQnwGSAA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR12MB2890 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: NPeSGBA9ur5X2oAH04uUbI6Nx1787277AA= Content-Language: en-US Content-ID: <42B337017DC31E479C7CFF4F1C75C79B@namprd12.prod.outlook.com> Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1568922757; bh=N2IDogMqmhoEPSCrSp3M3qKXArfdYso5CI4OkZMN+n0=; h=CC:Content-Type:Date:From:Reply-To:Subject:To; b=r+Ml7C0x1W3TvlKALpyJDh+MdoE3/6TCl5UqG+I+DZvqFm40knSxGK1bHtD23skmyv4 4wRh4bNcxHuhS7zKx7Na0s1TvNozSFtDFwrki+jm/2isjsu74qdPQXMFlsGi6Odd+lMAu PNzWj/UiKtyf2ocnvFq575YFxpwA1tbA+S0= 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=3D2198 A per-CPU implementation for holding values specific to a CPU when running as an SEV-ES guest, specifically to hold the Debug Register value. Allocate an extra page immediately after the GHCB page for each AP. Using the page after the GHCB ensures that it is unique per AP. But, it also ends up being marked shared/unencrypted when it doesn't need to be. It is possible during PEI to mark only the GHCB pages as shared (and that is done), but DXE is not as easy. There needs to be a way to change the pagetables created for DXE using CreateIdentityMappingPageTables() before switching to them. Cc: Jordan Justen Cc: Laszlo Ersek Cc: Ard Biesheuvel Signed-off-by: Tom Lendacky --- OvmfPkg/OvmfPkgX64.fdf | 2 +- OvmfPkg/PlatformPei/AmdSev.c | 2 +- OvmfPkg/ResetVector/ResetVector.nasmb | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/OvmfPkg/OvmfPkgX64.fdf b/OvmfPkg/OvmfPkgX64.fdf index a567131a0591..84716952052d 100644 --- a/OvmfPkg/OvmfPkgX64.fdf +++ b/OvmfPkg/OvmfPkgX64.fdf @@ -79,7 +79,7 @@ [FD.MEMFD] 0x008000|0x001000 gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecGhcbPageTableBase|gUefiOvmfPkgTokenSp= aceGuid.PcdOvmfSecGhcbPageTableSize =20 -0x009000|0x001000 +0x009000|0x002000 gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecGhcbBase|gUefiOvmfPkgTokenSpaceGuid.P= cdOvmfSecGhcbSize =20 0x010000|0x010000 diff --git a/OvmfPkg/PlatformPei/AmdSev.c b/OvmfPkg/PlatformPei/AmdSev.c index 30c0e4af7252..699bb8b11557 100644 --- a/OvmfPkg/PlatformPei/AmdSev.c +++ b/OvmfPkg/PlatformPei/AmdSev.c @@ -48,7 +48,7 @@ AmdSevEsInitialize ( // // Allocate GHCB pages. // - GhcbPageCount =3D mMaxCpuCount; + GhcbPageCount =3D mMaxCpuCount * 2; GhcbBase =3D AllocatePages (GhcbPageCount); ASSERT (GhcbBase); =20 diff --git a/OvmfPkg/ResetVector/ResetVector.nasmb b/OvmfPkg/ResetVector/Re= setVector.nasmb index 8909fc9313f4..d7c0ab3ada00 100644 --- a/OvmfPkg/ResetVector/ResetVector.nasmb +++ b/OvmfPkg/ResetVector/ResetVector.nasmb @@ -57,7 +57,7 @@ %error "This implementation inherently depends on PcdOvmfSecGhcbPageTa= bleSize" %endif =20 - %if (FixedPcdGet32 (PcdOvmfSecGhcbSize) !=3D 0x1000) + %if (FixedPcdGet32 (PcdOvmfSecGhcbSize) !=3D 0x2000) %error "This implementation inherently depends on PcdOvmfSecGhcbSize" %endif =20 --=20 2.17.1 -=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 (#47644): https://edk2.groups.io/g/devel/message/47644 Mute This Topic: https://groups.io/mt/34203546/1787277 Mute #vc: https://groups.io/mk?hashtag=3Dvc&subid=3D3901457 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- From nobody Sun May 5 15:05:54 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zoho.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+47646+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 1568922765826320.7266970251834; Thu, 19 Sep 2019 12:52:45 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id bDgSYY1788612xCuS5ySdSQ5; Thu, 19 Sep 2019 12:52:45 -0700 X-Received: from NAM02-CY1-obe.outbound.protection.outlook.com (NAM02-CY1-obe.outbound.protection.outlook.com [40.107.76.70]) by groups.io with SMTP; Thu, 19 Sep 2019 12:52:45 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=icRzi7fkVN3lnrGzhoPK5lhYw0DytxqsVxo4rRgPH2l/B6NmvSa2H4aGZyNS0XnNjq34c8BKVYZrU723Ndj1K7JTtAiwNSgZljeeWhTtMDp3uJI+HClNMzmOm5s+Wo1lKpbb36aDrly84qU/6AIMpPmvcae137PFYIgl8I5KVGONg1IWqPhzSQ0rjdKjcpMnISrbPiMF5RN0JSMohXdnDAebFzljBUf5r7d0LLWMDtGMOCJCvgFXnVVNG/OWEBEIyxqqULgAOL247wFqSCPXvf3kMsTlqelN8WOHVqeBSP2Ps4LzhzjKfm8imB2k2sBIUS6Gs99fGvhR2n2f1YsxCw== 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=Igq3h4zG4I52crtTqr+i3x9mev1jnumlgMYG+0qQxmM=; b=gqFw9TMYm4X83v6jgEZOhmDcLO7JKv2H9J38iZm+D51AMTYNxxVZ5cMu2aOXpP3JXrrt/vaL1HQt2XkMIxR3AojYzs8CaEC6hoUbkadWuqFNv82q3mjJCBkhxY4IdCne8Jvi0R2qyfLyG1ZlFwBTbDtiJvMSlFXSlGNBV1p0o328ywnDzIggqTgaIZNwpckCWfefn4sZ+M2xVHKoMKih7l6gv8BX98CA1LBNoAwqNhyhyiOBCblxrKFVxxaH4wQMnfRIv17Rwrq42P5TNSpZKovx1QNOwyNnZGNoh1rqkyE3EtF2ntfHoAzffcH2rTp4UTqROt5MggO4MBHr0p7udg== 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 DM6PR12MB3163.namprd12.prod.outlook.com (20.179.104.150) by DM6PR12MB3228.namprd12.prod.outlook.com (20.179.105.96) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2263.13; Thu, 19 Sep 2019 19:52:37 +0000 X-Received: from DM6PR12MB3163.namprd12.prod.outlook.com ([fe80::400e:f0c3:7ca:2fcc]) by DM6PR12MB3163.namprd12.prod.outlook.com ([fe80::400e:f0c3:7ca:2fcc%6]) with mapi id 15.20.2284.009; Thu, 19 Sep 2019 19:52:36 +0000 From: "Lendacky, Thomas" To: "devel@edk2.groups.io" CC: Jordan Justen , Laszlo Ersek , Ard Biesheuvel , Michael D Kinney , Liming Gao , Eric Dong , Ray Ni , "Singh, Brijesh" Subject: [edk2-devel] [RFC PATCH v2 11/44] OvmfPkg/PlatformPei: Move early GDT into ram when SEV-ES is enabled Thread-Topic: [RFC PATCH v2 11/44] OvmfPkg/PlatformPei: Move early GDT into ram when SEV-ES is enabled Thread-Index: AQHVbyPJn+3R7DBBt0GZRRCSMmsIBQ== Date: Thu, 19 Sep 2019 19:52:36 +0000 Message-ID: <457424fdcd5ba463dbbc198c1018cedd3857a9b7.1568922728.git.thomas.lendacky@amd.com> References: In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: SN4PR0501CA0146.namprd05.prod.outlook.com (2603:10b6:803:2c::24) To DM6PR12MB3163.namprd12.prod.outlook.com (2603:10b6:5:182::22) x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [165.204.78.1] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: f0886c32-5b81-4bc3-2b39-08d73d3aeb96 x-ms-office365-filtering-ht: Tenant x-ms-traffictypediagnostic: DM6PR12MB3228: x-ms-exchange-purlcount: 1 x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:9508; Received-SPF: pass (zoho.com: domain of groups.io designates 66.175.222.12 as permitted sender) client-ip=66.175.222.12; envelope-from=bounce+27952+47646+1787277+3901457@groups.io; helo=web01.groups.io; received-spf: None (protection.outlook.com: amd.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: VIzKiKHT/DOdRX1TaTXbTJech3xyzq8scNeeLtoth0Chjvsj2Ngvw/P3JEflr7yIKTRkm93t7dTtryQCiSn65XusFDmt9445Q4/NsWqYzadX9Y5SrhSx3i2U9SHWiTLtWLmRQOOPb/9i2jR9aVVJm+CieKJQAHIewEnITfsOjPiQzF0XSxHdpuQb1VNpuj+bGksOVxuz/kPX89kQpdjmEuYkZkQlgE/TtbEL2hYKRNzA8KhN7KEgsNJs+eg41vFWZJlsNe/S4sLt9Yeoi5CnOPdi2T+rF4fU73+uRZScCCrJtAh3msfI9AaO3CIHP9cKK+eoT7RMfJjjdz5rsNDiWIfSx+uBIY+asj1AST4ZLjaq+Hv9KhuaaNpV3X2qn6t42ieW4hAOIs+x5GRcfToe5vLo3DrOfz3kxfY2L5UsZA8= MIME-Version: 1.0 X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: f0886c32-5b81-4bc3-2b39-08d73d3aeb96 X-MS-Exchange-CrossTenant-originalarrivaltime: 19 Sep 2019 19:52:36.8058 (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: w9DqEP4eXv0SICPuW6Ic53Y0CPCqaQU8YrQqt48Lwuyn668MSOcixKrIQcg/uyZCjVW20UIZRP12i6CXdXZcWA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR12MB3228 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: csI67v4yAw4sVZNAuyJsY7I6x1787277AA= Content-Language: en-US Content-ID: Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1568922765; bh=xcFgDjzpg2zgUIg8nhMcILdtKwr9kn5rUnNtkGtQmYM=; h=CC:Content-Type:Date:From:Reply-To:Subject:To; b=xXb5aTwC57ckpeGN9YYg33XzJWoTIMIs2pRl6LbJ30LMW3wJoiKo1INhOBJoFKhHis0 cVG0VcHq9iJvIgp0VwgEwVlXPbXfpbITMIa7FV0Y8ffGPS3MhA3V87T5n9zO3yRUVP/DZ p5j3r0823YdMX8BY1mQX6an8VmBeDbHSM/g= 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=3D2198 The SEV support will clear the C-bit from non-RAM areas. The early GDT lives in a non-RAM area, so when an exception occurs (like a #VC) the GDT will be read as un-encrypted even though it is encrypted. This will result in a failure to be able to handle the exception. Move the GDT into RAM so it can be accessed without error when running as an SEV-ES guest. Cc: Jordan Justen Cc: Laszlo Ersek Cc: Ard Biesheuvel Signed-off-by: Tom Lendacky Reviewed-by: Laszlo Ersek --- OvmfPkg/PlatformPei/AmdSev.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/OvmfPkg/PlatformPei/AmdSev.c b/OvmfPkg/PlatformPei/AmdSev.c index 699bb8b11557..d6733447bdf2 100644 --- a/OvmfPkg/PlatformPei/AmdSev.c +++ b/OvmfPkg/PlatformPei/AmdSev.c @@ -37,6 +37,8 @@ AmdSevEsInitialize ( PHYSICAL_ADDRESS GhcbBasePa; UINTN GhcbPageCount; RETURN_STATUS PcdStatus, DecryptStatus; + IA32_DESCRIPTOR Gdtr; + VOID *Gdt; =20 if (!MemEncryptSevEsIsEnabled ()) { return; @@ -72,6 +74,20 @@ AmdSevEsInitialize ( DEBUG ((DEBUG_INFO, "SEV-ES is enabled, %u GHCB pages allocated starting= at 0x%lx\n", GhcbPageCount, GhcbBase)); =20 AsmWriteMsr64 (MSR_SEV_ES_GHCB, (UINT64)GhcbBasePa); + + // + // The SEV support will clear the C-bit from the non-RAM areas. Since + // the GDT initially lives in that area and it will be read when a #VC + // exception happens, it needs to be moved to RAM for an SEV-ES guest. + // + AsmReadGdtr (&Gdtr); + + Gdt =3D AllocatePages (EFI_SIZE_TO_PAGES (Gdtr.Limit + 1)); + ASSERT (Gdt); + + CopyMem (Gdt, (VOID *) Gdtr.Base, Gdtr.Limit + 1); + Gdtr.Base =3D (UINTN) Gdt; + AsmWriteGdtr (&Gdtr); } =20 /** --=20 2.17.1 -=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 (#47646): https://edk2.groups.io/g/devel/message/47646 Mute This Topic: https://groups.io/mt/34203548/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- From nobody Sun May 5 15:05:54 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zoho.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+47645+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 1568922766114216.32445955428216; Thu, 19 Sep 2019 12:52:46 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id Zb3QYY1788612xQjXqYy1kSE; Thu, 19 Sep 2019 12:52:45 -0700 X-Received: from NAM03-BY2-obe.outbound.protection.outlook.com (NAM03-BY2-obe.outbound.protection.outlook.com [40.107.78.58]) by groups.io with SMTP; Thu, 19 Sep 2019 12:52:44 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=jwmTewN0p9QPK7TbaMVmhIgrI5T0sbsHwDpivXi83fWlpALl5AOomjg/KmYq0Mm0p2StryYWVDuiDvYNu6RUx0R6LkipGoiMUEFNYmR4zzcf3Kbt3HAqnt+R7hnh7Fh+0wZ2Hr00+AV4o/BjNKG5N8JWwqyc8bXztSddnkzhudfaRraw3BsIsfcbsIn7FKMdc0ikte47EatxPbWo2PU9xEwDXC1Yh24wRvw/HTAWTYFt9xZwqnlmfn9E2/atXe69icjuZGyJUNal0eJMS1TKaqH7Lk0sRmS41lBO+0GYD6xzQJVYYdaXIlQMHqLnPrJF/o0MkWGPaLMGIsXXgPdD3A== 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=zw+dUE8Eant4qRdFyxcb47OEGx/u2Xo9Fx6zDAl42is=; b=VDc/vElZKeKrXfP/zusYR0ylpQsVr0DHcuNmmezrafg93H1TTO+DqMLLN2mLyp72BiEXk8SRFycB+xtuapxAfr2YqWPwOQYbxtHZz7oqkc1YYU4Zd7QCiKXshT4Ym6F51zOM2UM1G4O0A/OX0dg4LR6bOmdbKWULE/NVmWu2r9/Hrz6fHcSAQZqb58oFSkyoqlc2ilCNa7FZdNDF+BKbYEzNjkrG3mL+iw57APc5IgfeYpaWg8zmiuFNOdFhxA64nF6fs3AsVW4Y3/x3DLpXKxlU0fLsRJUbTxmqOnav+l2mduDeCGRZnI93DJU7VEe6BLwDXKMWkDk4a8Ne8vsFGA== 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 DM6PR12MB3163.namprd12.prod.outlook.com (20.179.104.150) by DM6PR12MB3228.namprd12.prod.outlook.com (20.179.105.96) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2263.13; Thu, 19 Sep 2019 19:52:38 +0000 X-Received: from DM6PR12MB3163.namprd12.prod.outlook.com ([fe80::400e:f0c3:7ca:2fcc]) by DM6PR12MB3163.namprd12.prod.outlook.com ([fe80::400e:f0c3:7ca:2fcc%6]) with mapi id 15.20.2284.009; Thu, 19 Sep 2019 19:52:38 +0000 From: "Lendacky, Thomas" To: "devel@edk2.groups.io" CC: Jordan Justen , Laszlo Ersek , Ard Biesheuvel , Michael D Kinney , Liming Gao , Eric Dong , Ray Ni , "Singh, Brijesh" Subject: [edk2-devel] [RFC PATCH v2 12/44] MdePkg: Add a structure definition for the GHCB Thread-Topic: [RFC PATCH v2 12/44] MdePkg: Add a structure definition for the GHCB Thread-Index: AQHVbyPJ3pUdb40AxEmPfOx32J+GpQ== Date: Thu, 19 Sep 2019 19:52:37 +0000 Message-ID: <815a3ab86510d001bc7efc3ec660d060afa631b6.1568922728.git.thomas.lendacky@amd.com> References: In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: SN4PR0501CA0146.namprd05.prod.outlook.com (2603:10b6:803:2c::24) To DM6PR12MB3163.namprd12.prod.outlook.com (2603:10b6:5:182::22) x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [165.204.78.1] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: fb0f59fd-a4ac-4be9-dae6-08d73d3aec33 x-ms-office365-filtering-ht: Tenant x-ms-traffictypediagnostic: DM6PR12MB3228: x-ms-exchange-purlcount: 1 x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:8273; Received-SPF: pass (zoho.com: domain of groups.io designates 66.175.222.12 as permitted sender) client-ip=66.175.222.12; envelope-from=bounce+27952+47645+1787277+3901457@groups.io; helo=web01.groups.io; received-spf: None (protection.outlook.com: amd.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: blvbnK1YUOrPYHkrzHkn1e39dPrEqLmW0DYRCa/xUylYi3r2WB5YI/9+jk7NWy2CDyOxytsBzpmghJGGTpRLjJSYPtyXsPl1AuHpoH1n7F574URv2wkB1geoNNKMbLqDfIP/rWYmc0FbzgsYqHDmjlAZMaVQNfYLIeKJBaE+fYxH2VoeTkn0sKTIL0tzvmDoae77YKcshS+Kf9E6m4geNpYv6ODsXe1po4hZAF88S4q0yMWcInJEZRz1yPYzOuLRU9oU3whYFvTcc8egrDhxqG+5+jfDtcSba4GcOAqvvTH/9VvMKB2oBVLKQDmhmAkXDgL1vtXsirI1VCOKbKDs+EfmFoSPSMBUL/AfcguORt3xAXdXXZT98b9LHecdVaFQ763yuuo8QsFKcgV64RUbvHr2+Zqd+3RNdEwZxgWMnuM= MIME-Version: 1.0 X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: fb0f59fd-a4ac-4be9-dae6-08d73d3aec33 X-MS-Exchange-CrossTenant-originalarrivaltime: 19 Sep 2019 19:52:38.0361 (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: VQO3WF0gF4XTBzis0fhdKQ6pSGXzXndel974XnvngtzmRM7f4iQWXJskNHB7rOu9ddu0YJMMmwYq9WMF2il/ZA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR12MB3228 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: J2bRmBZVJbnLN3YZWBeU4Uzrx1787277AA= Content-Language: en-US Content-ID: <0250EBF7C314B74E8DB26AFA9C68C6C9@namprd12.prod.outlook.com> Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1568922765; bh=NreAM/TWeOLNIczC8LawOgaPA26e0uVQHSca/EAR6fs=; h=CC:Content-Type:Date:From:Reply-To:Subject:To; b=dNDh8TXgw3X4VZaq87ItPiiSbHACoCTZIS9A8z6HJOV6kpiRCxYGMILWS/1sUaIihgn kM/lqbWm5WM7pAIW3S4JSGiYWSFH3NwCfa6SvvRgZxl9DTkkiWbVZr9IPfFNoRGBUARUd 8L3CsU+E2bGcbUZj3ez7o30uZZZ68tT8xdU= 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=3D2198 The GHCB is used by an SEV-ES guest for communicating between the guest and the hypervisor. Create the GHCB definition as defined by the GHCB protocol definition. Cc: Michael D Kinney Cc: Liming Gao Signed-off-by: Tom Lendacky --- MdePkg/Include/Register/Amd/Ghcb.h | 105 +++++++++++++++++++++++++++++ 1 file changed, 105 insertions(+) create mode 100644 MdePkg/Include/Register/Amd/Ghcb.h diff --git a/MdePkg/Include/Register/Amd/Ghcb.h b/MdePkg/Include/Register/A= md/Ghcb.h new file mode 100644 index 000000000000..cd3c98091208 --- /dev/null +++ b/MdePkg/Include/Register/Amd/Ghcb.h @@ -0,0 +1,105 @@ + +#ifndef __GHCB_H__ +#define __GHCB_H__ + +#include +#include +#include + +#define UD_EXCEPTION 6 +#define GP_EXCEPTION 13 + +#define GHCB_VERSION_MIN 1 +#define GHCB_VERSION_MAX 1 + +#define GHCB_STANDARD_USAGE 0 + +typedef enum { + SvmExitDr7Read =3D 0x27, + SvmExitDr7Write =3D 0x37, + SvmExitRdtsc =3D 0x6E, + SvmExitRdpmc, + SvmExitCpuid =3D 0x72, + SvmExitInvd =3D 0x76, + SvmExitIoioProt =3D 0x7B, + SvmExitMsr, + SvmExitVmmCall =3D 0x81, + SvmExitRdtscp =3D 0x87, + SvmExitWbinvd =3D 0x89, + SvmExitMonitor, + SvmExitMwait, + SvmExitNpf =3D 0x400, + + // VMG special exits + SvmExitMmioRead =3D 0x80000001, + SvmExitMmioWrite, + SvmExitNmiComplete, + SvmExitApResetHold, + + SvmExitUnsupported =3D 0x8000FFFF, +} SVM_EXITCODE; + +typedef enum { + GhcbCpl =3D 25, + GhcbRflags =3D 46, + GhcbRip, + GhcbRsp =3D 59, + GhcbRax =3D 63, + GhcbRcx =3D 97, + GhcbRdx, + GhcbRbx, + GhcbRbp =3D 101, + GhcbRsi, + GhcbRdi, + GhcbR8, + GhcbR9, + GhcbR10, + GhcbR11, + GhcbR12, + GhcbR13, + GhcbR14, + GhcbR15, + GhcbXCr0 =3D 125, +} GHCB_REGISTER; + +typedef struct { + UINT8 Reserved1[203]; + UINT8 Cpl; + UINT8 Reserved2[148]; + UINT64 Dr7; + UINT8 Reserved3[144]; + UINT64 Rax; + UINT8 Reserved4[264]; + UINT64 Rcx; + UINT64 Rdx; + UINT64 Rbx; + UINT8 Reserved5[112]; + UINT64 SwExitCode; + UINT64 SwExitInfo1; + UINT64 SwExitInfo2; + UINT64 SwScratch; + UINT8 Reserved6[56]; + UINT64 XCr0; + UINT8 ValidBitmap[16]; + UINT64 X87StateGpa; + UINT8 Reserved7[1016]; +} __attribute__ ((__packed__)) GHCB_SAVE_AREA; + +typedef struct { + GHCB_SAVE_AREA SaveArea; + UINT8 SharedBuffer[2032]; + UINT8 Reserved1[10]; + UINT16 ProtocolVersion; + UINT32 GhcbUsage; +} __attribute__ ((__packed__)) __attribute__ ((aligned(SIZE_4KB))) GHCB; + +typedef union { + struct { + UINT32 Lower32Bits; + UINT32 Upper32Bits; + } Elements; + + UINT64 Uint64; +} GHCB_EXIT_INFO; + +#endif --=20 2.17.1 -=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 (#47645): https://edk2.groups.io/g/devel/message/47645 Mute This Topic: https://groups.io/mt/34203547/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- From nobody Sun May 5 15:05:54 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zoho.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+47647+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 15689227667975.936102125496745; Thu, 19 Sep 2019 12:52:46 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id lNgEYY1788612xqYt7wi4xT3; Thu, 19 Sep 2019 12:52:45 -0700 X-Received: from NAM03-BY2-obe.outbound.protection.outlook.com (NAM03-BY2-obe.outbound.protection.outlook.com []) by groups.io with SMTP; Thu, 19 Sep 2019 12:52:45 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=bd8eTVeASzN5Cec1OCkoh0CtDUgU1pgnlj+lma5SodjQ1aBHMoyJCDmenWXy03PMAeV+2q1h3kpIyWTljjhNoSF35Efjve49NkSGsCQ2MBexjWXAdwtg0yIU7iaoY/s2ikDOxAHw3XOmYd22lHBYfqkN3o3sF/ppan7Pljiou6E6ksUyN4oc3eZt5LYgRBpI68fAocKRy1yetSPEiMKfasP2cxjY2HklnLQj6MFacnvTvP5tNjfaYUsjOBqWIKypaQtwTEmAafq28zGx6idammEHeL2C15M3P/LpyKbQP7+/+HNtHnsfGO2eQy0hgcLFIiCv59ReeA2F90IstKD3Jw== 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=sFiM6JqIMZO1CFrx1BAvdMMBK+hO/XIsuPFEQXvGzZI=; b=oTJDz2qe6xe3uB0XYsigxiSYvNPC4kW1C2txP7F2M39BdQIO6mEITqFOBNaqLjeWvmWpF/al/n0VCmt1f7LLnI/QdybOmPHay4S+IwuOuCQV4ptIm0oXL/vHy9Bi88nqpLb9tpNa8sTFjkbN5vZIgMiU2kcO2EhKhl8R2BcPZcjw6QPPkCndXvwZJC4bccMFWVBHsFNSPxOkETUA2zF69XQmhAH7JfEHTay97k6uqFRFsAOtwuKa6xL+rzD6G4+hV6JWGOia3jgdsUNM63jeqswFf0idXL70t6aIg/0UQ1H3RuROPobCDaKEmy+VcqXBCBu+3L9DZ5F7yFFhzYRrgQ== 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 DM6PR12MB3163.namprd12.prod.outlook.com (20.179.104.150) by DM6PR12MB3228.namprd12.prod.outlook.com (20.179.105.96) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2263.13; Thu, 19 Sep 2019 19:52:39 +0000 X-Received: from DM6PR12MB3163.namprd12.prod.outlook.com ([fe80::400e:f0c3:7ca:2fcc]) by DM6PR12MB3163.namprd12.prod.outlook.com ([fe80::400e:f0c3:7ca:2fcc%6]) with mapi id 15.20.2284.009; Thu, 19 Sep 2019 19:52:39 +0000 From: "Lendacky, Thomas" To: "devel@edk2.groups.io" CC: Jordan Justen , Laszlo Ersek , Ard Biesheuvel , Michael D Kinney , Liming Gao , Eric Dong , Ray Ni , "Singh, Brijesh" Subject: [edk2-devel] [RFC PATCH v2 13/44] MdePkg/BaseLib: Add support for the VMGEXIT instruction Thread-Topic: [RFC PATCH v2 13/44] MdePkg/BaseLib: Add support for the VMGEXIT instruction Thread-Index: AQHVbyPKhz+dXWIY70eEQ392lGg6Mg== Date: Thu, 19 Sep 2019 19:52:39 +0000 Message-ID: <2e83f23f7c539b64b57df41eac0b7a924d1f2bd0.1568922728.git.thomas.lendacky@amd.com> References: In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: SN4PR0501CA0146.namprd05.prod.outlook.com (2603:10b6:803:2c::24) To DM6PR12MB3163.namprd12.prod.outlook.com (2603:10b6:5:182::22) x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [165.204.78.1] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 842fb07d-3794-4125-98c2-08d73d3aecff x-ms-office365-filtering-ht: Tenant x-ms-traffictypediagnostic: DM6PR12MB3228: x-ms-exchange-purlcount: 1 x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:6790; Received-SPF: pass (zoho.com: domain of groups.io designates 66.175.222.12 as permitted sender) client-ip=66.175.222.12; envelope-from=bounce+27952+47647+1787277+3901457@groups.io; helo=web01.groups.io; received-spf: None (protection.outlook.com: amd.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: EUV700MIfhcB8yEVUGy5XvaauVSfivEW784n/BgdJYVZtZeOWnTuRPR5MtsfS0YFFtn6z+SB8QP6sqhK7k+nGglcRNcCy/68MaaB6VB/W25qg6QHq/L4qdGYi3QhgIS/vpcgDSh+T7K2QrZ86Lt3GGdS2ibGhQszuS8DMcb0NL2ME1a8jDuDSGUdlPGXT8aA6BujqXq34sNSYACZV4AfnqV4whdz8fBiAMC4EutnysnvMNgjqudXUd1m5k3U2Ddx2X45XsHI/48uwWVWsAEndjKXhK9fNFv240fRGSQIkoZMkUKqFNjM0ryC0Xp3duvmpRYgY1u7y6HFxuteAgemRqteM7bP+y9zhm2tV3gca0uDRbdRf9Gf9JH1AG11mYd2DOQxHzaPYg7QMcJska43i1mPUt0e+ZaOhzS0NMCF/fo= MIME-Version: 1.0 X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: 842fb07d-3794-4125-98c2-08d73d3aecff X-MS-Exchange-CrossTenant-originalarrivaltime: 19 Sep 2019 19:52:39.2574 (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: ZqrhZFoCWZrAEbphyZRwY76pDEZtm52N5/M7W8q4uD5dVjBmpjwHN9JzNteczlVX3grJ081Rk5S2rWhG17pYnw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR12MB3228 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: DIN4RAGGJnN0gbFsSpYrCWxqx1787277AA= Content-Language: en-US Content-ID: <2D24C7C05D67DB4F8F1A372CB3C1860D@namprd12.prod.outlook.com> Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1568922765; bh=0cJsobq07XJOkXt6NakReds/vvdmKIrpPNXuTbViUU0=; h=CC:Content-Type:Date:From:Reply-To:Subject:To; b=NQo+jDgm7at+Nxa2jOL1Q3TGVyoWKylSRpuC7AbrWFDCIT6sB0xjG2QCcVU0FnCJ7K2 /CyzUP80YDoekwLGymLll+VrpVPzeHoGMmwHCA4Sn74DDN2OHF74dSubjc85lkUiC46P7 Becdk8+otnSTcuUzvieLMnAgkYs0ObDjhXE= 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=3D2198 VMGEXIT is a new instruction used for Hypervisor/Guest communication when running as an SEV-ES guest. A VMGEXIT will cause an automatic exit (AE) to occur, resulting in a #VMEXIT with an exit code value of 0x403. Provide the necessary support to execute the VMGEXIT instruction, which is "rep; vmmcall". Cc: Michael D Kinney Cc: Liming Gao Signed-off-by: Tom Lendacky --- MdePkg/Library/BaseLib/BaseLib.inf | 2 ++ MdePkg/Include/Library/BaseLib.h | 14 +++++++++++ MdePkg/Library/BaseLib/Ia32/GccInline.c | 17 +++++++++++++ MdePkg/Library/BaseLib/X64/GccInline.c | 17 +++++++++++++ MdePkg/Library/BaseLib/Ia32/VmgExit.nasm | 31 +++++++++++++++++++++++ MdePkg/Library/BaseLib/X64/VmgExit.nasm | 32 ++++++++++++++++++++++++ 6 files changed, 113 insertions(+) create mode 100644 MdePkg/Library/BaseLib/Ia32/VmgExit.nasm create mode 100644 MdePkg/Library/BaseLib/X64/VmgExit.nasm diff --git a/MdePkg/Library/BaseLib/BaseLib.inf b/MdePkg/Library/BaseLib/Ba= seLib.inf index 3586beb0ab5c..14b3f5721101 100644 --- a/MdePkg/Library/BaseLib/BaseLib.inf +++ b/MdePkg/Library/BaseLib/BaseLib.inf @@ -152,6 +152,7 @@ [Sources.Ia32] Ia32/ARShiftU64.c | MSFT Ia32/EnableCache.c | MSFT Ia32/DisableCache.c | MSFT + Ia32/VmgExit.nasm | MSFT =20 =20 Ia32/GccInline.c | GCC @@ -286,6 +287,7 @@ [Sources.X64] X64/ReadCr2.nasm| MSFT X64/ReadCr0.nasm| MSFT X64/ReadEflags.nasm| MSFT + X64/VmgExit.nasm | MSFT =20 =20 X64/Non-existing.c diff --git a/MdePkg/Include/Library/BaseLib.h b/MdePkg/Include/Library/Base= Lib.h index 2a75bc023f56..80bd5cf57a72 100644 --- a/MdePkg/Include/Library/BaseLib.h +++ b/MdePkg/Include/Library/BaseLib.h @@ -7880,6 +7880,20 @@ AsmLfence ( VOID ); =20 +/** + Executes a VMGEXIT instruction (VMMCALL with a REP prefix) + + Executes a VMGEXIT instruction. This function is only available on IA-32= and + x64. + +**/ +VOID +EFIAPI +AsmVmgExit ( + VOID + ); + + /** Patch the immediate operand of an IA32 or X64 instruction such that the = byte, word, dword or qword operand is encoded at the end of the instruction's diff --git a/MdePkg/Library/BaseLib/Ia32/GccInline.c b/MdePkg/Library/BaseL= ib/Ia32/GccInline.c index 5287200f8754..55d2e12bcdc9 100644 --- a/MdePkg/Library/BaseLib/Ia32/GccInline.c +++ b/MdePkg/Library/BaseLib/Ia32/GccInline.c @@ -1763,3 +1763,20 @@ AsmFlushCacheLine ( } =20 =20 +/** + Executes a VMGEXIT instruction. + + Executes a VMGEXIT instruction. This function is only available on IA-32= and + X64. + +**/ +VOID +EFIAPI +AsmVmgExit ( + VOID + ) +{ + __asm__ __volatile__ ("rep; vmmcall":::"memory"); +} + + diff --git a/MdePkg/Library/BaseLib/X64/GccInline.c b/MdePkg/Library/BaseLi= b/X64/GccInline.c index 154ce1f57e92..17539caa0798 100644 --- a/MdePkg/Library/BaseLib/X64/GccInline.c +++ b/MdePkg/Library/BaseLib/X64/GccInline.c @@ -1798,3 +1798,20 @@ AsmFlushCacheLine ( } =20 =20 +/** + Executes a VMGEXIT instruction. + + Executes a VMGEXIT instruction. This function is only available on IA-32= and + X64. + +**/ +VOID +EFIAPI +AsmVmgExit ( + VOID + ) +{ + __asm__ __volatile__ ("rep; vmmcall":::"memory"); +} + + diff --git a/MdePkg/Library/BaseLib/Ia32/VmgExit.nasm b/MdePkg/Library/Base= Lib/Ia32/VmgExit.nasm new file mode 100644 index 000000000000..babc1bf437f2 --- /dev/null +++ b/MdePkg/Library/BaseLib/Ia32/VmgExit.nasm @@ -0,0 +1,31 @@ +;-------------------------------------------------------------------------= ----- +; +; Copyright (c) 2019, Advanced Micro Device, Inc. All rights reserved.
+; SPDX-License-Identifier: BSD-2-Clause-Patent +; +; Module Name: +; +; VmgExit.Asm +; +; Abstract: +; +; AsmVmgExit function +; +; Notes: +; +;-------------------------------------------------------------------------= ----- + + SECTION .text + +;-------------------------------------------------------------------------= ----- +; VOID +; EFIAPI +; AsmVmgExit ( +; VOID +; ); +;-------------------------------------------------------------------------= ----- +global ASM_PFX(AsmVmgExit) +ASM_PFX(AsmVmgExit): + rep; vmmcall + ret + diff --git a/MdePkg/Library/BaseLib/X64/VmgExit.nasm b/MdePkg/Library/BaseL= ib/X64/VmgExit.nasm new file mode 100644 index 000000000000..173e12c36054 --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/VmgExit.nasm @@ -0,0 +1,32 @@ +;-------------------------------------------------------------------------= ----- +; +; Copyright (c) 2019, Advanced Micro Device, Inc. All rights reserved.
+; SPDX-License-Identifier: BSD-2-Clause-Patent +; +; Module Name: +; +; VmgExit.Asm +; +; Abstract: +; +; AsmVmgExit function +; +; Notes: +; +;-------------------------------------------------------------------------= ----- + + DEFAULT REL + SECTION .text + +;-------------------------------------------------------------------------= ----- +; VOID +; EFIAPI +; AsmVmgExit ( +; VOID +; ); +;-------------------------------------------------------------------------= ----- +global ASM_PFX(AsmVmgExit) +ASM_PFX(AsmVmgExit): + rep; vmmcall + ret + --=20 2.17.1 -=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 (#47647): https://edk2.groups.io/g/devel/message/47647 Mute This Topic: https://groups.io/mt/34203549/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- From nobody Sun May 5 15:05:55 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zoho.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+47648+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 1568922766325863.1018971972362; Thu, 19 Sep 2019 12:52:46 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id z3DyYY1788612x1ZBVarYQZ4; Thu, 19 Sep 2019 12:52:45 -0700 X-Received: from NAM02-CY1-obe.outbound.protection.outlook.com (NAM02-CY1-obe.outbound.protection.outlook.com []) by groups.io with SMTP; Thu, 19 Sep 2019 12:52:45 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=G0/yZ1GdElcgllHm3Jvf3OaI0zJTRb7iHka3y9Y0MlqLlWy+s/KHeLz1+2B+oVBPemyNQvCQjR7qBDVOI8W39jRqeaEJ4jkibW5AG1AzRWiXOV5tieQrvr9VjCGL7zcFQeNuEprc9hVi/AOzy0lQLLwt7+/IAd51/KMzOVIEUtgy2rE+yJhPKAzWMjbnvTBEuu1TmmO0Lx5GlhmoypFGjeAVmu0EHPZ6Cvouka6Q/s6PfEJZd3ZxfwqWarfJLya4Jm5trpNfx2RQsVabF4cR7A8R6HSFnaJLCSTVii88jGNFEPJfDVwZHvpS5ltDNm4VjwCXN1cdwoTHj/gJgVn8KA== 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=MTAyrAzWFlcNou84MNXAc+SMlAOBdXSpfYlWY4d1TPs=; b=k7qm+nWgeUDrQeV1Lj8NilrAzWLzoXz8mZFikAP/njnKA8CKddrOnhroHpOpdQBwDUGk50b9RQ/h/6CLKbNBfHglJWQsbyt7Z1pcofNxlyeAZJ+VPoJwh9P7R4v4BiQxJzT9+tt0JmxnIrDxc2s82yGA3L/gKudELT1z6FXbx2ZObWpt12qpZXlbz9VxBr7gA7+1iu7wkWVJMUr0reAUeUzFwyTeo/skMTaeBGJys0inkMDnl4qKLijA/S19AA97zRcS/sJtbxzlZOYLOYjzs9Ay+PsP46rHB5GAkDl3eQeeILbodsqjfTBBixSHQsDmgoLCMr0bTpjXm3Ij9iMbnw== 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 DM6PR12MB3163.namprd12.prod.outlook.com (20.179.104.150) by DM6PR12MB3228.namprd12.prod.outlook.com (20.179.105.96) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2263.13; Thu, 19 Sep 2019 19:52:40 +0000 X-Received: from DM6PR12MB3163.namprd12.prod.outlook.com ([fe80::400e:f0c3:7ca:2fcc]) by DM6PR12MB3163.namprd12.prod.outlook.com ([fe80::400e:f0c3:7ca:2fcc%6]) with mapi id 15.20.2284.009; Thu, 19 Sep 2019 19:52:40 +0000 From: "Lendacky, Thomas" To: "devel@edk2.groups.io" CC: Jordan Justen , Laszlo Ersek , Ard Biesheuvel , Michael D Kinney , Liming Gao , Eric Dong , Ray Ni , "Singh, Brijesh" Subject: [edk2-devel] [RFC PATCH v2 14/44] UefiCpuPkg: Implement library support for VMGEXIT Thread-Topic: [RFC PATCH v2 14/44] UefiCpuPkg: Implement library support for VMGEXIT Thread-Index: AQHVbyPLcIVKgoXR1EuouJUf+lbdSQ== Date: Thu, 19 Sep 2019 19:52:40 +0000 Message-ID: <5427110cedd114a56a77b2895f0261e18b11a455.1568922728.git.thomas.lendacky@amd.com> References: In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: SN4PR0501CA0146.namprd05.prod.outlook.com (2603:10b6:803:2c::24) To DM6PR12MB3163.namprd12.prod.outlook.com (2603:10b6:5:182::22) x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [165.204.78.1] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 52e13542-fb8c-4c53-54a1-08d73d3aeda9 x-ms-office365-filtering-ht: Tenant x-ms-traffictypediagnostic: DM6PR12MB3228: x-ms-exchange-purlcount: 1 x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:9508; Received-SPF: pass (zoho.com: domain of groups.io designates 66.175.222.12 as permitted sender) client-ip=66.175.222.12; envelope-from=bounce+27952+47648+1787277+3901457@groups.io; helo=web01.groups.io; received-spf: None (protection.outlook.com: amd.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: STPABSmmJTLI0TgrCUs9yKELoPxrndylxm2Vtnm9FuP0cy7XKfPImaVl4YSO1bCD6g3WBBcLTwNiPZM1Bamc1TVy5Pq3EgOjajJli4uMG80m2qfp/SbxoiYwUOP79ylzD2880VKA+52DW9r4JnqgNEZBomzO268kyv02OStzj9N66liHdWCrEq0dSz8SjuprSdRZsAxh4VgYe9h8Ka17n3uKCpUx4VazCQ5C9Rq1bmTQRgRQ+IoKa05MgLoQkCnJpIRjr+/l1xaGbcbfu6aQkswrL38uX85qcSuOYHYN2IDQR+jgOMKSwyxfE91TtsUGU0TBaAJ+FgoACDLPSTiqV0ccmvNUYC5OYrRrJOHCn+YPIaGfcqkSWzdQBPOuHVCiY5wInk1sovOFgkL8MXfJUG7GJAHWuwUG4ffNt1zl4dU= MIME-Version: 1.0 X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: 52e13542-fb8c-4c53-54a1-08d73d3aeda9 X-MS-Exchange-CrossTenant-originalarrivaltime: 19 Sep 2019 19:52:40.3478 (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: 7PEPbO7P7PDgXr6w53oaLpMs0zMYWaeCCG/fgNsSfDPRTizbHK9RQZAGbabZEDy4TmWAFPPCkho5EHngC4TcXw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR12MB3228 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: EyxzAmE01rsyzhwciJCsOhNmx1787277AA= Content-Language: en-US Content-ID: <317BE8DAF901014388C06418EB067019@namprd12.prod.outlook.com> Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1568922765; bh=oC0eaZ74D1FL/b0KiSNxBGdXAB/jISJQXD/wTfX1y2A=; h=CC:Content-Type:Date:From:Reply-To:Subject:To; b=VhrfhO8AEqc2atjbNqvA2/IIBUFuo2BcDy5rbcNAjuGqXlFYLfL57aec1ifWYV/R8f4 AmjpBoSOzXIDaxwuTRNFEpQ6SCspkGA9mM0W6K/3BfVP5829Zv+4gD6d0cIcPypw0ilRY ABv0vaSzi2wrT4azvGMov8RC4Lwz8pgaPN0= 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=3D2198 To support issuing a VMGEXIT instruction, create a library that can be used to perform GHCB and VMGEXIT related operations and to issue the actual VMGEXIT instruction when using the GHCB. Cc: Eric Dong Cc: Ray Ni Cc: Laszlo Ersek Signed-off-by: Tom Lendacky --- UefiCpuPkg/UefiCpuPkg.dec | 3 + UefiCpuPkg/UefiCpuPkg.dsc | 5 ++ UefiCpuPkg/Library/VmgExitLib/VmgExitLib.inf | 33 +++++++++ UefiCpuPkg/Include/Library/VmgExitLib.h | 74 +++++++++++++++++++ UefiCpuPkg/Library/VmgExitLib/VmgExitLib.c | 75 ++++++++++++++++++++ UefiCpuPkg/Library/VmgExitLib/VmgExitLib.uni | 15 ++++ 6 files changed, 205 insertions(+) create mode 100644 UefiCpuPkg/Library/VmgExitLib/VmgExitLib.inf create mode 100644 UefiCpuPkg/Include/Library/VmgExitLib.h create mode 100644 UefiCpuPkg/Library/VmgExitLib/VmgExitLib.c create mode 100644 UefiCpuPkg/Library/VmgExitLib/VmgExitLib.uni diff --git a/UefiCpuPkg/UefiCpuPkg.dec b/UefiCpuPkg/UefiCpuPkg.dec index 14ddaa8633c6..5d2bd5b7c0eb 100644 --- a/UefiCpuPkg/UefiCpuPkg.dec +++ b/UefiCpuPkg/UefiCpuPkg.dec @@ -53,6 +53,9 @@ [LibraryClasses.IA32, LibraryClasses.X64] ## MpInitLib|Include/Library/MpInitLib.h =20 + ## @libraryclass Provides function to support VMGEXIT processing. + VmgExitLib|Include/Library/VmgExitLib.h + [Guids] gUefiCpuPkgTokenSpaceGuid =3D { 0xac05bf33, 0x995a, 0x4ed4, { 0xaa,= 0xb8, 0xef, 0x7a, 0xe8, 0xf, 0x5c, 0xb0 }} gMsegSmramGuid =3D { 0x5802bce4, 0xeeee, 0x4e33, { 0xa1,= 0x30, 0xeb, 0xad, 0x27, 0xf0, 0xe4, 0x39 }} diff --git a/UefiCpuPkg/UefiCpuPkg.dsc b/UefiCpuPkg/UefiCpuPkg.dsc index bf690d3978f1..3ab96f6f986f 100644 --- a/UefiCpuPkg/UefiCpuPkg.dsc +++ b/UefiCpuPkg/UefiCpuPkg.dsc @@ -63,6 +63,7 @@ [LibraryClasses.common.SEC] HobLib|MdePkg/Library/PeiHobLib/PeiHobLib.inf PeiServicesTablePointerLib|MdePkg/Library/PeiServicesTablePointerLibIdt/= PeiServicesTablePointerLibIdt.inf MemoryAllocationLib|MdePkg/Library/PeiMemoryAllocationLib/PeiMemoryAlloc= ationLib.inf + VmgExitLib|UefiCpuPkg/Library/VmgExitLib/VmgExitLib.inf =20 [LibraryClasses.common.PEIM] MemoryAllocationLib|MdePkg/Library/PeiMemoryAllocationLib/PeiMemoryAlloc= ationLib.inf @@ -74,6 +75,7 @@ [LibraryClasses.common.PEIM] [LibraryClasses.IA32.PEIM, LibraryClasses.X64.PEIM] PeiServicesTablePointerLib|MdePkg/Library/PeiServicesTablePointerLibIdt/= PeiServicesTablePointerLibIdt.inf CpuExceptionHandlerLib|UefiCpuPkg/Library/CpuExceptionHandlerLib/PeiCpuE= xceptionHandlerLib.inf + VmgExitLib|UefiCpuPkg/Library/VmgExitLib/VmgExitLib.inf =20 [LibraryClasses.common.DXE_DRIVER] MemoryAllocationLib|MdePkg/Library/UefiMemoryAllocationLib/UefiMemoryAll= ocationLib.inf @@ -81,12 +83,14 @@ [LibraryClasses.common.DXE_DRIVER] CpuExceptionHandlerLib|UefiCpuPkg/Library/CpuExceptionHandlerLib/DxeCpuE= xceptionHandlerLib.inf MpInitLib|UefiCpuPkg/Library/MpInitLib/DxeMpInitLib.inf RegisterCpuFeaturesLib|UefiCpuPkg/Library/RegisterCpuFeaturesLib/DxeRegi= sterCpuFeaturesLib.inf + VmgExitLib|UefiCpuPkg/Library/VmgExitLib/VmgExitLib.inf =20 [LibraryClasses.common.DXE_SMM_DRIVER] SmmServicesTableLib|MdePkg/Library/SmmServicesTableLib/SmmServicesTableL= ib.inf MemoryAllocationLib|MdePkg/Library/SmmMemoryAllocationLib/SmmMemoryAlloc= ationLib.inf HobLib|MdePkg/Library/DxeHobLib/DxeHobLib.inf CpuExceptionHandlerLib|UefiCpuPkg/Library/CpuExceptionHandlerLib/SmmCpuE= xceptionHandlerLib.inf + VmgExitLib|UefiCpuPkg/Library/VmgExitLib/VmgExitLib.inf =20 [LibraryClasses.common.UEFI_APPLICATION] UefiApplicationEntryPoint|MdePkg/Library/UefiApplicationEntryPoint/UefiA= pplicationEntryPoint.inf @@ -143,6 +147,7 @@ [Components.IA32, Components.X64] SmmCpuFeaturesLib|UefiCpuPkg/Library/SmmCpuFeaturesLib/SmmCpuFeature= sLibStm.inf } UefiCpuPkg/Universal/Acpi/S3Resume2Pei/S3Resume2Pei.inf + UefiCpuPkg/Library/VmgExitLib/VmgExitLib.inf =20 [BuildOptions] *_*_*_CC_FLAGS =3D -D DISABLE_NEW_DEPRECATED_INTERFACES diff --git a/UefiCpuPkg/Library/VmgExitLib/VmgExitLib.inf b/UefiCpuPkg/Libr= ary/VmgExitLib/VmgExitLib.inf new file mode 100644 index 000000000000..f1c1af93b297 --- /dev/null +++ b/UefiCpuPkg/Library/VmgExitLib/VmgExitLib.inf @@ -0,0 +1,33 @@ +## @file +# VMGEXIT Support Library. +# +# Copyright (c) 2019, AMD Inc. All rights reserved.
+# SPDX-License-Identifier: BSD-2-Clause-Patent +# +## + +[Defines] + INF_VERSION =3D 0x00010005 + BASE_NAME =3D VmgExitLib + MODULE_UNI_FILE =3D VmgExitLib.uni + FILE_GUID =3D 3cd7368f-ef9b-4a9b-9571-2ed93813677e + MODULE_TYPE =3D BASE + VERSION_STRING =3D 1.0 + LIBRARY_CLASS =3D VmgExitLib + +# +# The following information is for reference only and not required by the = build tools. +# +# VALID_ARCHITECTURES =3D IA32 X64 +# + +[Sources] + VmgExitLib.c + +[Packages] + MdePkg/MdePkg.dec + UefiCpuPkg/UefiCpuPkg.dec + +[LibraryClasses] + BaseLib + diff --git a/UefiCpuPkg/Include/Library/VmgExitLib.h b/UefiCpuPkg/Include/L= ibrary/VmgExitLib.h new file mode 100644 index 000000000000..4b3c6908f1c1 --- /dev/null +++ b/UefiCpuPkg/Include/Library/VmgExitLib.h @@ -0,0 +1,74 @@ +/** @file + Public header file for the VMGEXIT Support library class. + + This library class defines some routines used when invoking the VMGEXIT + instruction in support of SEV-ES. + + Copyright (c) 2019, AMD Inc. All rights reserved.
+ SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#ifndef __VMG_EXIT_LIB_H__ +#define __VMG_EXIT_LIB_H__ + +#include + + +/** + Perform VMGEXIT. + + Sets the necessary fields of the GHCB, invokes the VMGEXIT instruction a= nd + then handles the return actions. + + @param[in] GHCB A pointer to the GHCB + @param[in] ExitCode VMGEXIT code to be assigned to the SwExitCode fie= ld of + the GHCB. + @param[in] ExitInfo1 VMGEXIT information to be assigned to the SwExitI= nfo1 + field of the GHCB. + @param[in] ExitInfo2 VMGEXIT information to be assigned to the SwExitI= nfo2 + field of the GHCB. + + @retval 0 VMGEXIT succeeded. + @retval Others VMGEXIT processing did not succeed. Exception number to + be issued. + +**/ +UINTN +EFIAPI +VmgExit ( + GHCB *Ghcb, + UINT64 ExitCode, + UINT64 ExitInfo1, + UINT64 ExitInfo2 + ); + +/** + Perform pre-VMGEXIT initialization/preparation. + + Performs the necessary steps in preparation for invoking VMGEXIT. + + @param[in] GHCB A pointer to the GHCB + +**/ +VOID +EFIAPI +VmgInit ( + GHCB *Ghcb + ); + +/** + Perform post-VMGEXIT cleanup. + + Performs the necessary steps to cleanup after invoking VMGEXIT. + + @param[in] GHCB A pointer to the GHCB + +**/ +VOID +EFIAPI +VmgDone ( + GHCB *Ghcb + ); + +#endif diff --git a/UefiCpuPkg/Library/VmgExitLib/VmgExitLib.c b/UefiCpuPkg/Librar= y/VmgExitLib/VmgExitLib.c new file mode 100644 index 000000000000..f7e2571cd726 --- /dev/null +++ b/UefiCpuPkg/Library/VmgExitLib/VmgExitLib.c @@ -0,0 +1,75 @@ +/** @file + VMGEXIT Support Library. + + Copyright (c) 2019, AMD Inc. All rights reserved.
+ SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#include +#include +#include + +STATIC +UINTN +VmgExitErrorCheck ( + GHCB *Ghcb + ) +{ + GHCB_EXIT_INFO ExitInfo; + UINTN Reason, Action; + + if (!Ghcb->SaveArea.SwExitInfo1) { + return 0; + } + + ExitInfo.Uint64 =3D Ghcb->SaveArea.SwExitInfo1; + Action =3D ExitInfo.Elements.Lower32Bits; + if (Action =3D=3D 1) { + Reason =3D ExitInfo.Elements.Upper32Bits; + + switch (Reason) { + case UD_EXCEPTION: + case GP_EXCEPTION: + return Reason; + } + } + + ASSERT (0); + return GP_EXCEPTION; +} + +UINTN +EFIAPI +VmgExit ( + GHCB *Ghcb, + UINT64 ExitCode, + UINT64 ExitInfo1, + UINT64 ExitInfo2 + ) +{ + Ghcb->SaveArea.SwExitCode =3D ExitCode; + Ghcb->SaveArea.SwExitInfo1 =3D ExitInfo1; + Ghcb->SaveArea.SwExitInfo2 =3D ExitInfo2; + AsmVmgExit (); + + return VmgExitErrorCheck (Ghcb); +} + +VOID +EFIAPI +VmgInit ( + GHCB *Ghcb + ) +{ + SetMem (&Ghcb->SaveArea, sizeof (Ghcb->SaveArea), 0); +} + +VOID +EFIAPI +VmgDone ( + GHCB *Ghcb + ) +{ +} + diff --git a/UefiCpuPkg/Library/VmgExitLib/VmgExitLib.uni b/UefiCpuPkg/Libr= ary/VmgExitLib/VmgExitLib.uni new file mode 100644 index 000000000000..65db52a05576 --- /dev/null +++ b/UefiCpuPkg/Library/VmgExitLib/VmgExitLib.uni @@ -0,0 +1,15 @@ +// /** @file +// VMGEXIT support library instance. +// +// VMGEXIT support library instance. +// +// Copyright (c) 2019, AMD Inc. All rights reserved.
+// SPDX-License-Identifier: BSD-2-Clause-Patent +// +// **/ + + +#string STR_MODULE_ABSTRACT #language en-US "VMGEXIT Support L= ibrary." + +#string STR_MODULE_DESCRIPTION #language en-US "VMGEXIT Support L= ibrary." + --=20 2.17.1 -=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 (#47648): https://edk2.groups.io/g/devel/message/47648 Mute This Topic: https://groups.io/mt/34203550/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- From nobody Sun May 5 15:05:55 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zoho.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+47649+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 1568922766699451.720384503103; Thu, 19 Sep 2019 12:52:46 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id 575sYY1788612xMObjXdvqlS; Thu, 19 Sep 2019 12:52:46 -0700 X-Received: from NAM03-BY2-obe.outbound.protection.outlook.com (NAM03-BY2-obe.outbound.protection.outlook.com []) by groups.io with SMTP; Thu, 19 Sep 2019 12:52:45 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=aCC/SxD00Yw5lSOC7M34nqsiR5w1CkHxXZi3QZqqRj/LV04jdkmWxy9WjvhAbV8HS/a8lSW6A9HghReH0BP3NBOIMsUDd0eB3z1xMwWesNBdHjCvW+z6O1PXFKSPSD/q2ixybXCr431j7xSTCdKDebUmzZjj4iS9QuyR4OKOv+ASJMeuSIgcy9hvd2yMcEi/Sm7ru10dinxh5iJZqGrYvZJHs9o8b0Rd5bvCc0CdgluVNu8q6UPREc3Ho7AFkiCaP0ecJGxWdgAt18nVMesa/L4WWtypYFxBqA6z/oWLugfNm06HUUt8AhooWm1iwOlvYOWcybm5aNhH2cnL7AEXCg== 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=x9OPEnl2ScYANWjtACOISK8A7iHpfWobNUWidS/TH3Q=; b=FxvdNU7uV72G0x/WFjTkf+hb2zSiDJ6iHqhyrrDYPAhIyCmplSAuZNDd1+ECbXoNoCAd8M15uLyRz9AP++DM6lAK0/yfTq6mbQKsC8wcUaye28lRs8t0I5qF3ImfeVDpqTcGSGQVGhr+nRPc/ihR9TBLr7jOABkeOYmpOJvqWpHh3r1V1eYjnBSdRW4pCcZwa2GTC+wawMFMPzzmAQvJBlExaPt/+1ClxMlzF2+8LY4coQyKK3M6HNdOuK/uF6yel/4iN7JFfgAQwxf1O1VSjioa4nDSf5jLN3QO4HqogR8NjF8S6Wk3aKbQM2VbnOMTlT/+zh5ZtyqTb8uOlDB0LQ== 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 DM6PR12MB3163.namprd12.prod.outlook.com (20.179.104.150) by DM6PR12MB3228.namprd12.prod.outlook.com (20.179.105.96) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2263.13; Thu, 19 Sep 2019 19:52:41 +0000 X-Received: from DM6PR12MB3163.namprd12.prod.outlook.com ([fe80::400e:f0c3:7ca:2fcc]) by DM6PR12MB3163.namprd12.prod.outlook.com ([fe80::400e:f0c3:7ca:2fcc%6]) with mapi id 15.20.2284.009; Thu, 19 Sep 2019 19:52:41 +0000 From: "Lendacky, Thomas" To: "devel@edk2.groups.io" CC: Jordan Justen , Laszlo Ersek , Ard Biesheuvel , Michael D Kinney , Liming Gao , Eric Dong , Ray Ni , "Singh, Brijesh" , Maurice Ma , Guo Dong , Benjamin You Subject: [edk2-devel] [RFC PATCH v2 15/44] UefiCpuPkg/CpuExceptionHandler: Add base support for the #VC exception Thread-Topic: [RFC PATCH v2 15/44] UefiCpuPkg/CpuExceptionHandler: Add base support for the #VC exception Thread-Index: AQHVbyPMwrD6AhJsd0uXbKz2V8364g== Date: Thu, 19 Sep 2019 19:52:41 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: SN4PR0501CA0146.namprd05.prod.outlook.com (2603:10b6:803:2c::24) To DM6PR12MB3163.namprd12.prod.outlook.com (2603:10b6:5:182::22) x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [165.204.78.1] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: e52cbfdf-1ff7-4468-3abf-08d73d3aee63 x-ms-office365-filtering-ht: Tenant x-ms-traffictypediagnostic: DM6PR12MB3228: x-ms-exchange-purlcount: 1 x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:6430; Received-SPF: pass (zoho.com: domain of groups.io designates 66.175.222.12 as permitted sender) client-ip=66.175.222.12; envelope-from=bounce+27952+47649+1787277+3901457@groups.io; helo=web01.groups.io; received-spf: None (protection.outlook.com: amd.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: QMpAOM3RWMTjhKWiKabO+bpzJjklEcNGDAaI9FscjzK6LDaDYLP7cVh/LcNKc5WFByBKvcPB9mBbxY13emu8HifGOviRQmzHe1En5eV1Cs4FnsJ+h1mlLx4Q/+2x7u2c9673Xlc2FwFWwxHQZGg7yyGNDXwI03L3nq51lC6OzCnUpv4cZCCacozLw1pEmWaAacJLnlHqqIxjFSXTbWC/9SAZ6ZYjJy8Dx4P/j4DT8LrZ7ADFEFyutdaDPysM+tn34miP9xO0qNOp9HSV9LAiVivszCgfcZWF7HIqMOHG2y8ip6CL+1LPCmBOR0Lz2xRdEIlGf0d5u+ljjnlVK2OgBYT8MBF/A9G29j8Mw/ltGv2JKsZ/tjk9jC3R5zRQyunPuUEmZnn3qtLJc1U+o+I1kAl0oH0JBzQ8zYGw1QD1NCQ= MIME-Version: 1.0 X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: e52cbfdf-1ff7-4468-3abf-08d73d3aee63 X-MS-Exchange-CrossTenant-originalarrivaltime: 19 Sep 2019 19:52:41.6420 (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: ehvYdI5c75eHAD0AQj3KGvrM79Nb2PpX06+LHz0AAtv4fJceCvdPpeJ48eI+2S3N65gGV2TB7T/086a0E9NYmg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR12MB3228 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: yoc3SP0HLiSqgnRXLYtQvgHjx1787277AA= Content-Language: en-US Content-ID: Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1568922766; bh=32rUsxBS2HwkqLjkHemPp1LIDfEVmVoTOKu5Bh+pUOM=; h=CC:Content-Type:Date:From:Reply-To:Subject:To; b=NqOSWZ6Bo74pSKnG4y/UIsnCSpkW9xMzWlGw0ACh0vscSqg03dqviqwSjRqcJDE3X6A 32hONTTUZa5HyjbONKyxh/GT6UdreVMnxUBBxt6yHKeaip3yrb5S7H0GmSE0McHkzDCxt kSuiG/Ve+eaM5ZZlzh74PMHYV/3FyKJWeaI= 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=3D2198 Add base support to handle #VC exceptions. This includes a stub routine to invoke when a #VC exception occurs and special checks in the common exception handlers to invoke the #VC exception handler routine. Cc: Eric Dong Cc: Ray Ni Cc: Laszlo Ersek Cc: Jordan Justen Cc: Ard Biesheuvel Cc: Maurice Ma Cc: Guo Dong Cc: Benjamin You Signed-off-by: Tom Lendacky --- OvmfPkg/OvmfPkgIa32.dsc | 5 +++ OvmfPkg/OvmfPkgIa32X64.dsc | 5 +++ OvmfPkg/OvmfPkgX64.dsc | 5 +++ UefiPayloadPkg/UefiPayloadPkgIa32.dsc | 2 + UefiPayloadPkg/UefiPayloadPkgIa32X64.dsc | 2 + .../DxeCpuExceptionHandlerLib.inf | 5 +++ .../PeiCpuExceptionHandlerLib.inf | 5 +++ .../SecPeiCpuExceptionHandlerLib.inf | 5 +++ .../CpuExceptionHandlerLib/AMDSevVcCommon.h | 19 ++++++++ .../CpuExceptionCommon.h | 2 + .../CpuExceptionCommon.c | 2 +- .../Ia32/AMDSevVcCommon.c | 13 ++++++ .../PeiDxeAMDSevVcHandler.c | 22 +++++++++ .../PeiDxeSmmCpuException.c | 16 +++++++ .../SecAMDSevVcHandler.c | 45 +++++++++++++++++++ .../SecPeiCpuException.c | 16 +++++++ .../X64/AMDSevVcCommon.c | 28 ++++++++++++ 17 files changed, 196 insertions(+), 1 deletion(-) create mode 100644 UefiCpuPkg/Library/CpuExceptionHandlerLib/AMDSevVcCommo= n.h create mode 100644 UefiCpuPkg/Library/CpuExceptionHandlerLib/Ia32/AMDSevVc= Common.c create mode 100644 UefiCpuPkg/Library/CpuExceptionHandlerLib/PeiDxeAMDSevV= cHandler.c create mode 100644 UefiCpuPkg/Library/CpuExceptionHandlerLib/SecAMDSevVcHa= ndler.c create mode 100644 UefiCpuPkg/Library/CpuExceptionHandlerLib/X64/AMDSevVcC= ommon.c diff --git a/OvmfPkg/OvmfPkgIa32.dsc b/OvmfPkg/OvmfPkgIa32.dsc index 4369cf6d55e5..61f9594b6925 100644 --- a/OvmfPkg/OvmfPkgIa32.dsc +++ b/OvmfPkg/OvmfPkgIa32.dsc @@ -232,6 +232,7 @@ [LibraryClasses.common.SEC] PeiServicesTablePointerLib|MdePkg/Library/PeiServicesTablePointerLibIdt/= PeiServicesTablePointerLibIdt.inf MemoryAllocationLib|MdePkg/Library/PeiMemoryAllocationLib/PeiMemoryAlloc= ationLib.inf CpuExceptionHandlerLib|UefiCpuPkg/Library/CpuExceptionHandlerLib/SecPeiC= puExceptionHandlerLib.inf + VmgExitLib|UefiCpuPkg/Library/VmgExitLib/VmgExitLib.inf =20 [LibraryClasses.common.PEI_CORE] HobLib|MdePkg/Library/PeiHobLib/PeiHobLib.inf @@ -270,6 +271,7 @@ [LibraryClasses.common.PEIM] DebugAgentLib|SourceLevelDebugPkg/Library/DebugAgent/SecPeiDebugAgentLib= .inf !endif CpuExceptionHandlerLib|UefiCpuPkg/Library/CpuExceptionHandlerLib/PeiCpuE= xceptionHandlerLib.inf + VmgExitLib|UefiCpuPkg/Library/VmgExitLib/VmgExitLib.inf MpInitLib|UefiCpuPkg/Library/MpInitLib/PeiMpInitLib.inf QemuFwCfgS3Lib|OvmfPkg/Library/QemuFwCfgS3Lib/PeiQemuFwCfgS3LibFwCfg.inf PcdLib|MdePkg/Library/PeiPcdLib/PeiPcdLib.inf @@ -295,6 +297,7 @@ [LibraryClasses.common.DXE_CORE] DebugAgentLib|SourceLevelDebugPkg/Library/DebugAgent/DxeDebugAgentLib.inf !endif CpuExceptionHandlerLib|UefiCpuPkg/Library/CpuExceptionHandlerLib/DxeCpuE= xceptionHandlerLib.inf + VmgExitLib|UefiCpuPkg/Library/VmgExitLib/VmgExitLib.inf PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf =20 [LibraryClasses.common.DXE_RUNTIME_DRIVER] @@ -345,6 +348,7 @@ [LibraryClasses.common.DXE_DRIVER] PlatformBmPrintScLib|OvmfPkg/Library/PlatformBmPrintScLib/PlatformBmPrin= tScLib.inf QemuBootOrderLib|OvmfPkg/Library/QemuBootOrderLib/QemuBootOrderLib.inf CpuExceptionHandlerLib|UefiCpuPkg/Library/CpuExceptionHandlerLib/DxeCpuE= xceptionHandlerLib.inf + VmgExitLib|UefiCpuPkg/Library/VmgExitLib/VmgExitLib.inf !if $(SMM_REQUIRE) =3D=3D TRUE LockBoxLib|MdeModulePkg/Library/SmmLockBoxLib/SmmLockBoxDxeLib.inf !else @@ -388,6 +392,7 @@ [LibraryClasses.common.DXE_SMM_DRIVER] DebugLib|OvmfPkg/Library/PlatformDebugLibIoPort/PlatformDebugLibIoPort.i= nf !endif CpuExceptionHandlerLib|UefiCpuPkg/Library/CpuExceptionHandlerLib/SmmCpuE= xceptionHandlerLib.inf + VmgExitLib|UefiCpuPkg/Library/VmgExitLib/VmgExitLib.inf !ifdef $(SOURCE_DEBUG_ENABLE) DebugAgentLib|SourceLevelDebugPkg/Library/DebugAgent/SmmDebugAgentLib.inf !endif diff --git a/OvmfPkg/OvmfPkgIa32X64.dsc b/OvmfPkg/OvmfPkgIa32X64.dsc index a74f5028068e..5fcbf8868a19 100644 --- a/OvmfPkg/OvmfPkgIa32X64.dsc +++ b/OvmfPkg/OvmfPkgIa32X64.dsc @@ -237,6 +237,7 @@ [LibraryClasses.common.SEC] PeiServicesTablePointerLib|MdePkg/Library/PeiServicesTablePointerLibIdt/= PeiServicesTablePointerLibIdt.inf MemoryAllocationLib|MdePkg/Library/PeiMemoryAllocationLib/PeiMemoryAlloc= ationLib.inf CpuExceptionHandlerLib|UefiCpuPkg/Library/CpuExceptionHandlerLib/SecPeiC= puExceptionHandlerLib.inf + VmgExitLib|UefiCpuPkg/Library/VmgExitLib/VmgExitLib.inf =20 [LibraryClasses.common.PEI_CORE] HobLib|MdePkg/Library/PeiHobLib/PeiHobLib.inf @@ -275,6 +276,7 @@ [LibraryClasses.common.PEIM] DebugAgentLib|SourceLevelDebugPkg/Library/DebugAgent/SecPeiDebugAgentLib= .inf !endif CpuExceptionHandlerLib|UefiCpuPkg/Library/CpuExceptionHandlerLib/PeiCpuE= xceptionHandlerLib.inf + VmgExitLib|UefiCpuPkg/Library/VmgExitLib/VmgExitLib.inf MpInitLib|UefiCpuPkg/Library/MpInitLib/PeiMpInitLib.inf QemuFwCfgS3Lib|OvmfPkg/Library/QemuFwCfgS3Lib/PeiQemuFwCfgS3LibFwCfg.inf PcdLib|MdePkg/Library/PeiPcdLib/PeiPcdLib.inf @@ -300,6 +302,7 @@ [LibraryClasses.common.DXE_CORE] DebugAgentLib|SourceLevelDebugPkg/Library/DebugAgent/DxeDebugAgentLib.inf !endif CpuExceptionHandlerLib|UefiCpuPkg/Library/CpuExceptionHandlerLib/DxeCpuE= xceptionHandlerLib.inf + VmgExitLib|UefiCpuPkg/Library/VmgExitLib/VmgExitLib.inf PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf =20 [LibraryClasses.common.DXE_RUNTIME_DRIVER] @@ -350,6 +353,7 @@ [LibraryClasses.common.DXE_DRIVER] PlatformBmPrintScLib|OvmfPkg/Library/PlatformBmPrintScLib/PlatformBmPrin= tScLib.inf QemuBootOrderLib|OvmfPkg/Library/QemuBootOrderLib/QemuBootOrderLib.inf CpuExceptionHandlerLib|UefiCpuPkg/Library/CpuExceptionHandlerLib/DxeCpuE= xceptionHandlerLib.inf + VmgExitLib|UefiCpuPkg/Library/VmgExitLib/VmgExitLib.inf !if $(SMM_REQUIRE) =3D=3D TRUE LockBoxLib|MdeModulePkg/Library/SmmLockBoxLib/SmmLockBoxDxeLib.inf !else @@ -393,6 +397,7 @@ [LibraryClasses.common.DXE_SMM_DRIVER] DebugLib|OvmfPkg/Library/PlatformDebugLibIoPort/PlatformDebugLibIoPort.i= nf !endif CpuExceptionHandlerLib|UefiCpuPkg/Library/CpuExceptionHandlerLib/SmmCpuE= xceptionHandlerLib.inf + VmgExitLib|UefiCpuPkg/Library/VmgExitLib/VmgExitLib.inf !ifdef $(SOURCE_DEBUG_ENABLE) DebugAgentLib|SourceLevelDebugPkg/Library/DebugAgent/SmmDebugAgentLib.inf !endif diff --git a/OvmfPkg/OvmfPkgX64.dsc b/OvmfPkg/OvmfPkgX64.dsc index fd714d386e75..40d1caddafc1 100644 --- a/OvmfPkg/OvmfPkgX64.dsc +++ b/OvmfPkg/OvmfPkgX64.dsc @@ -237,6 +237,7 @@ [LibraryClasses.common.SEC] PeiServicesTablePointerLib|MdePkg/Library/PeiServicesTablePointerLibIdt/= PeiServicesTablePointerLibIdt.inf MemoryAllocationLib|MdePkg/Library/PeiMemoryAllocationLib/PeiMemoryAlloc= ationLib.inf CpuExceptionHandlerLib|UefiCpuPkg/Library/CpuExceptionHandlerLib/SecPeiC= puExceptionHandlerLib.inf + VmgExitLib|UefiCpuPkg/Library/VmgExitLib/VmgExitLib.inf =20 [LibraryClasses.common.PEI_CORE] HobLib|MdePkg/Library/PeiHobLib/PeiHobLib.inf @@ -275,6 +276,7 @@ [LibraryClasses.common.PEIM] DebugAgentLib|SourceLevelDebugPkg/Library/DebugAgent/SecPeiDebugAgentLib= .inf !endif CpuExceptionHandlerLib|UefiCpuPkg/Library/CpuExceptionHandlerLib/PeiCpuE= xceptionHandlerLib.inf + VmgExitLib|UefiCpuPkg/Library/VmgExitLib/VmgExitLib.inf MpInitLib|UefiCpuPkg/Library/MpInitLib/PeiMpInitLib.inf QemuFwCfgS3Lib|OvmfPkg/Library/QemuFwCfgS3Lib/PeiQemuFwCfgS3LibFwCfg.inf PcdLib|MdePkg/Library/PeiPcdLib/PeiPcdLib.inf @@ -300,6 +302,7 @@ [LibraryClasses.common.DXE_CORE] DebugAgentLib|SourceLevelDebugPkg/Library/DebugAgent/DxeDebugAgentLib.inf !endif CpuExceptionHandlerLib|UefiCpuPkg/Library/CpuExceptionHandlerLib/DxeCpuE= xceptionHandlerLib.inf + VmgExitLib|UefiCpuPkg/Library/VmgExitLib/VmgExitLib.inf PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf =20 [LibraryClasses.common.DXE_RUNTIME_DRIVER] @@ -350,6 +353,7 @@ [LibraryClasses.common.DXE_DRIVER] PlatformBmPrintScLib|OvmfPkg/Library/PlatformBmPrintScLib/PlatformBmPrin= tScLib.inf QemuBootOrderLib|OvmfPkg/Library/QemuBootOrderLib/QemuBootOrderLib.inf CpuExceptionHandlerLib|UefiCpuPkg/Library/CpuExceptionHandlerLib/DxeCpuE= xceptionHandlerLib.inf + VmgExitLib|UefiCpuPkg/Library/VmgExitLib/VmgExitLib.inf !if $(SMM_REQUIRE) =3D=3D TRUE LockBoxLib|MdeModulePkg/Library/SmmLockBoxLib/SmmLockBoxDxeLib.inf !else @@ -393,6 +397,7 @@ [LibraryClasses.common.DXE_SMM_DRIVER] DebugLib|OvmfPkg/Library/PlatformDebugLibIoPort/PlatformDebugLibIoPort.i= nf !endif CpuExceptionHandlerLib|UefiCpuPkg/Library/CpuExceptionHandlerLib/SmmCpuE= xceptionHandlerLib.inf + VmgExitLib|UefiCpuPkg/Library/VmgExitLib/VmgExitLib.inf !ifdef $(SOURCE_DEBUG_ENABLE) DebugAgentLib|SourceLevelDebugPkg/Library/DebugAgent/SmmDebugAgentLib.inf !endif diff --git a/UefiPayloadPkg/UefiPayloadPkgIa32.dsc b/UefiPayloadPkg/UefiPay= loadPkgIa32.dsc index 11cf17ca0647..8428da45a45a 100644 --- a/UefiPayloadPkg/UefiPayloadPkgIa32.dsc +++ b/UefiPayloadPkg/UefiPayloadPkgIa32.dsc @@ -233,6 +233,7 @@ [LibraryClasses.common.DXE_CORE] DebugAgentLib|SourceLevelDebugPkg/Library/DebugAgent/DxeDebugAgentLib.inf !endif CpuExceptionHandlerLib|UefiCpuPkg/Library/CpuExceptionHandlerLib/DxeCpuE= xceptionHandlerLib.inf + VmgExitLib|UefiCpuPkg/Library/VmgExitLib/VmgExitLib.inf =20 [LibraryClasses.common.DXE_DRIVER] PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf @@ -244,6 +245,7 @@ [LibraryClasses.common.DXE_DRIVER] DebugAgentLib|SourceLevelDebugPkg/Library/DebugAgent/DxeDebugAgentLib.inf !endif CpuExceptionHandlerLib|UefiCpuPkg/Library/CpuExceptionHandlerLib/DxeCpuE= xceptionHandlerLib.inf + VmgExitLib|UefiCpuPkg/Library/VmgExitLib/VmgExitLib.inf MpInitLib|UefiCpuPkg/Library/MpInitLib/DxeMpInitLib.inf =20 [LibraryClasses.common.DXE_RUNTIME_DRIVER] diff --git a/UefiPayloadPkg/UefiPayloadPkgIa32X64.dsc b/UefiPayloadPkg/Uefi= PayloadPkgIa32X64.dsc index 5b7994a62cda..b88aa8ede04f 100644 --- a/UefiPayloadPkg/UefiPayloadPkgIa32X64.dsc +++ b/UefiPayloadPkg/UefiPayloadPkgIa32X64.dsc @@ -233,6 +233,7 @@ [LibraryClasses.common.DXE_CORE] DebugAgentLib|SourceLevelDebugPkg/Library/DebugAgent/DxeDebugAgentLib.inf !endif CpuExceptionHandlerLib|UefiCpuPkg/Library/CpuExceptionHandlerLib/DxeCpuE= xceptionHandlerLib.inf + VmgExitLib|UefiCpuPkg/Library/VmgExitLib/VmgExitLib.inf =20 [LibraryClasses.common.DXE_DRIVER] PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf @@ -244,6 +245,7 @@ [LibraryClasses.common.DXE_DRIVER] DebugAgentLib|SourceLevelDebugPkg/Library/DebugAgent/DxeDebugAgentLib.inf !endif CpuExceptionHandlerLib|UefiCpuPkg/Library/CpuExceptionHandlerLib/DxeCpuE= xceptionHandlerLib.inf + VmgExitLib|UefiCpuPkg/Library/VmgExitLib/VmgExitLib.inf MpInitLib|UefiCpuPkg/Library/MpInitLib/DxeMpInitLib.inf =20 [LibraryClasses.common.DXE_RUNTIME_DRIVER] diff --git a/UefiCpuPkg/Library/CpuExceptionHandlerLib/DxeCpuExceptionHandl= erLib.inf b/UefiCpuPkg/Library/CpuExceptionHandlerLib/DxeCpuExceptionHandle= rLib.inf index e41383573043..dc328e230de3 100644 --- a/UefiCpuPkg/Library/CpuExceptionHandlerLib/DxeCpuExceptionHandlerLib.i= nf +++ b/UefiCpuPkg/Library/CpuExceptionHandlerLib/DxeCpuExceptionHandlerLib.i= nf @@ -26,17 +26,21 @@ [Sources.Ia32] Ia32/ExceptionTssEntryAsm.nasm Ia32/ArchExceptionHandler.c Ia32/ArchInterruptDefs.h + Ia32/AMDSevVcCommon.c =20 [Sources.X64] X64/ExceptionHandlerAsm.nasm X64/ArchExceptionHandler.c X64/ArchInterruptDefs.h + X64/AMDSevVcCommon.c =20 [Sources.common] CpuExceptionCommon.h CpuExceptionCommon.c PeiDxeSmmCpuException.c DxeException.c + PeiDxeAMDSevVcHandler.c + AMDSevVcCommon.h =20 [Pcd] gEfiMdeModulePkgTokenSpaceGuid.PcdCpuStackGuard @@ -57,3 +61,4 @@ [LibraryClasses] PeCoffGetEntryPointLib MemoryAllocationLib DebugLib + VmgExitLib diff --git a/UefiCpuPkg/Library/CpuExceptionHandlerLib/PeiCpuExceptionHandl= erLib.inf b/UefiCpuPkg/Library/CpuExceptionHandlerLib/PeiCpuExceptionHandle= rLib.inf index f31423ac0f91..37dbbdb35711 100644 --- a/UefiCpuPkg/Library/CpuExceptionHandlerLib/PeiCpuExceptionHandlerLib.i= nf +++ b/UefiCpuPkg/Library/CpuExceptionHandlerLib/PeiCpuExceptionHandlerLib.i= nf @@ -26,17 +26,21 @@ [Sources.Ia32] Ia32/ExceptionTssEntryAsm.nasm Ia32/ArchExceptionHandler.c Ia32/ArchInterruptDefs.h + Ia32/AMDSevVcCommon.c =20 [Sources.X64] X64/ExceptionHandlerAsm.nasm X64/ArchExceptionHandler.c X64/ArchInterruptDefs.h + X64/AMDSevVcCommon.c =20 [Sources.common] CpuExceptionCommon.h CpuExceptionCommon.c PeiCpuException.c PeiDxeSmmCpuException.c + PeiDxeAMDSevVcHandler.c + AMDSevVcCommon.h =20 [Packages] MdePkg/MdePkg.dec @@ -52,6 +56,7 @@ [LibraryClasses] HobLib MemoryAllocationLib SynchronizationLib + VmgExitLib =20 [Pcd] gEfiMdeModulePkgTokenSpaceGuid.PcdCpuStackGuard # CONSUMES diff --git a/UefiCpuPkg/Library/CpuExceptionHandlerLib/SecPeiCpuExceptionHa= ndlerLib.inf b/UefiCpuPkg/Library/CpuExceptionHandlerLib/SecPeiCpuException= HandlerLib.inf index 6d25cafe2ca3..8d6dd5295ff6 100644 --- a/UefiCpuPkg/Library/CpuExceptionHandlerLib/SecPeiCpuExceptionHandlerLi= b.inf +++ b/UefiCpuPkg/Library/CpuExceptionHandlerLib/SecPeiCpuExceptionHandlerLi= b.inf @@ -26,16 +26,20 @@ [Sources.Ia32] Ia32/ExceptionTssEntryAsm.nasm Ia32/ArchExceptionHandler.c Ia32/ArchInterruptDefs.h + Ia32/AMDSevVcCommon.c =20 [Sources.X64] X64/ExceptionHandlerAsm.nasm X64/ArchExceptionHandler.c X64/ArchInterruptDefs.h + X64/AMDSevVcCommon.c =20 [Sources.common] CpuExceptionCommon.h CpuExceptionCommon.c SecPeiCpuException.c + SecAMDSevVcHandler.c + AMDSevVcCommon.h =20 [Packages] MdePkg/MdePkg.dec @@ -48,3 +52,4 @@ [LibraryClasses] PrintLib LocalApicLib PeCoffGetEntryPointLib + VmgExitLib diff --git a/UefiCpuPkg/Library/CpuExceptionHandlerLib/AMDSevVcCommon.h b/U= efiCpuPkg/Library/CpuExceptionHandlerLib/AMDSevVcCommon.h new file mode 100644 index 000000000000..94f9e6e5122d --- /dev/null +++ b/UefiCpuPkg/Library/CpuExceptionHandlerLib/AMDSevVcCommon.h @@ -0,0 +1,19 @@ + +#ifndef _AMD_SEV_VC_COMMON_H_ +#define _AMD_SEV_VC_COMMON_H_ + +#include +#include + +UINTN +DoVcException( + EFI_SYSTEM_CONTEXT Context + ); + +UINTN +DoVcCommon( + GHCB *Ghcb, + EFI_SYSTEM_CONTEXT Context + ); + +#endif diff --git a/UefiCpuPkg/Library/CpuExceptionHandlerLib/CpuExceptionCommon.h= b/UefiCpuPkg/Library/CpuExceptionHandlerLib/CpuExceptionCommon.h index 805dd9cbb4ff..0f274e7ea328 100644 --- a/UefiCpuPkg/Library/CpuExceptionHandlerLib/CpuExceptionCommon.h +++ b/UefiCpuPkg/Library/CpuExceptionHandlerLib/CpuExceptionCommon.h @@ -24,6 +24,8 @@ #define CPU_INTERRUPT_NUM 256 #define HOOKAFTER_STUB_SIZE 16 =20 +#define VC_EXCEPTION 29 + // // Exception Error Code of Page-Fault Exception // diff --git a/UefiCpuPkg/Library/CpuExceptionHandlerLib/CpuExceptionCommon.c= b/UefiCpuPkg/Library/CpuExceptionHandlerLib/CpuExceptionCommon.c index 8adbd43fefb4..39e4dd9e9417 100644 --- a/UefiCpuPkg/Library/CpuExceptionHandlerLib/CpuExceptionCommon.c +++ b/UefiCpuPkg/Library/CpuExceptionHandlerLib/CpuExceptionCommon.c @@ -14,7 +14,7 @@ // // 1 means an error code will be pushed, otherwise 0 // -CONST UINT32 mErrorCodeFlag =3D 0x00227d00; +CONST UINT32 mErrorCodeFlag =3D 0x20227d00; =20 // // Define the maximum message length diff --git a/UefiCpuPkg/Library/CpuExceptionHandlerLib/Ia32/AMDSevVcCommon.= c b/UefiCpuPkg/Library/CpuExceptionHandlerLib/Ia32/AMDSevVcCommon.c new file mode 100644 index 000000000000..1b0c44bd6a61 --- /dev/null +++ b/UefiCpuPkg/Library/CpuExceptionHandlerLib/Ia32/AMDSevVcCommon.c @@ -0,0 +1,13 @@ + +#include +#include +#include "AMDSevVcCommon.h" + +UINTN +DoVcCommon ( + GHCB *Ghcb, + EFI_SYSTEM_CONTEXT Context + ) +{ + return GP_EXCEPTION; +} diff --git a/UefiCpuPkg/Library/CpuExceptionHandlerLib/PeiDxeAMDSevVcHandle= r.c b/UefiCpuPkg/Library/CpuExceptionHandlerLib/PeiDxeAMDSevVcHandler.c new file mode 100644 index 000000000000..d32de9efb09e --- /dev/null +++ b/UefiCpuPkg/Library/CpuExceptionHandlerLib/PeiDxeAMDSevVcHandler.c @@ -0,0 +1,22 @@ + +#include +#include +#include +#include "CpuExceptionCommon.h" +#include "AMDSevVcCommon.h" + +UINTN +DoVcException ( + EFI_SYSTEM_CONTEXT Context + ) +{ + MSR_SEV_ES_GHCB_REGISTER Msr; + GHCB *Ghcb; + + Msr.GhcbPhysicalAddress =3D AsmReadMsr64 (MSR_SEV_ES_GHCB); + ASSERT(!Msr.Bits.GhcbNegotiateBit); + + Ghcb =3D Msr.Ghcb; + + return DoVcCommon (Ghcb, Context); +} diff --git a/UefiCpuPkg/Library/CpuExceptionHandlerLib/PeiDxeSmmCpuExceptio= n.c b/UefiCpuPkg/Library/CpuExceptionHandlerLib/PeiDxeSmmCpuException.c index 72c2aeca4c13..0c248e7eb904 100644 --- a/UefiCpuPkg/Library/CpuExceptionHandlerLib/PeiDxeSmmCpuException.c +++ b/UefiCpuPkg/Library/CpuExceptionHandlerLib/PeiDxeSmmCpuException.c @@ -7,6 +7,7 @@ SPDX-License-Identifier: BSD-2-Clause-Patent **/ =20 #include "CpuExceptionCommon.h" +#include "AMDSevVcCommon.h" #include =20 /** @@ -86,6 +87,21 @@ CommonExceptionHandlerWorker ( break; } =20 + if (ExceptionType =3D=3D VC_EXCEPTION) { + UINTN Status; + // + // #VC must be handled for an SEV-ES guest + // + Status =3D DoVcException(SystemContext); + if (Status) { + // Exception not handled - Status contains the desired exception now + ExceptionType =3D Status; + } else { + // Exception handled + return; + } + } + if (ExternalInterruptHandler !=3D NULL && ExternalInterruptHandler[ExceptionType] !=3D NULL) { (ExternalInterruptHandler[ExceptionType]) (ExceptionType, SystemContex= t); diff --git a/UefiCpuPkg/Library/CpuExceptionHandlerLib/SecAMDSevVcHandler.c= b/UefiCpuPkg/Library/CpuExceptionHandlerLib/SecAMDSevVcHandler.c new file mode 100644 index 000000000000..e2a78be56c80 --- /dev/null +++ b/UefiCpuPkg/Library/CpuExceptionHandlerLib/SecAMDSevVcHandler.c @@ -0,0 +1,45 @@ + +#include +#include +#include "CpuExceptionCommon.h" +#include "AMDSevVcCommon.h" + + +#define GHCB_INIT 0x809000 + +UINTN +DoVcException( + EFI_SYSTEM_CONTEXT Context + ) +{ + MSR_SEV_ES_GHCB_REGISTER Msr; + GHCB *Ghcb; + + Msr.GhcbPhysicalAddress =3D AsmReadMsr64 (MSR_SEV_ES_GHCB); + Ghcb =3D Msr.Ghcb; + + if (Msr.Bits.GhcbNegotiateBit) { + if (Msr.GhcbProtocol.SevEsProtocolMin > Msr.GhcbProtocol.SevEsProtocol= Max) { + ASSERT (0); + return GP_EXCEPTION; + } + + if ((Msr.GhcbProtocol.SevEsProtocolMin > GHCB_VERSION_MAX) || + (Msr.GhcbProtocol.SevEsProtocolMax < GHCB_VERSION_MIN)) { + ASSERT (0); + return GP_EXCEPTION; + } + + Msr.GhcbPhysicalAddress =3D GHCB_INIT; + AsmWriteMsr64(MSR_SEV_ES_GHCB, Msr.GhcbPhysicalAddress); + + Ghcb =3D Msr.Ghcb; + SetMem (Ghcb, sizeof (*Ghcb), 0); + + /* Set the version to the maximum that can be supported */ + Ghcb->ProtocolVersion =3D MIN (Msr.GhcbProtocol.SevEsProtocolMax, GHCB= _VERSION_MAX); + Ghcb->GhcbUsage =3D GHCB_STANDARD_USAGE; + } + + return DoVcCommon(Ghcb, Context); +} diff --git a/UefiCpuPkg/Library/CpuExceptionHandlerLib/SecPeiCpuException.c= b/UefiCpuPkg/Library/CpuExceptionHandlerLib/SecPeiCpuException.c index 20148db74cf8..998a90ba61a6 100644 --- a/UefiCpuPkg/Library/CpuExceptionHandlerLib/SecPeiCpuException.c +++ b/UefiCpuPkg/Library/CpuExceptionHandlerLib/SecPeiCpuException.c @@ -8,6 +8,7 @@ SPDX-License-Identifier: BSD-2-Clause-Patent =20 #include #include "CpuExceptionCommon.h" +#include "AMDSevVcCommon.h" =20 CONST UINTN mDoFarReturnFlag =3D 0; =20 @@ -24,6 +25,21 @@ CommonExceptionHandler ( IN EFI_SYSTEM_CONTEXT SystemContext ) { + if (ExceptionType =3D=3D VC_EXCEPTION) { + UINTN Status; + // + // #VC must be handled for an SEV-ES guest + // + Status =3D DoVcException(SystemContext); + if (Status) { + // Exception not handled - Status contains the desired exception now + ExceptionType =3D Status; + } else { + // Exception handled + return; + } + } + // // Initialize the serial port before dumping. // diff --git a/UefiCpuPkg/Library/CpuExceptionHandlerLib/X64/AMDSevVcCommon.c= b/UefiCpuPkg/Library/CpuExceptionHandlerLib/X64/AMDSevVcCommon.c new file mode 100644 index 000000000000..a56dcffe1d5d --- /dev/null +++ b/UefiCpuPkg/Library/CpuExceptionHandlerLib/X64/AMDSevVcCommon.c @@ -0,0 +1,28 @@ + +#include +#include +#include +#include "AMDSevVcCommon.h" + +UINTN +DoVcCommon ( + GHCB *Ghcb, + EFI_SYSTEM_CONTEXT Context + ) +{ + EFI_SYSTEM_CONTEXT_X64 *Regs =3D Context.SystemContextX64; + UINTN ExitCode; + UINTN Status; + + VmgInit (Ghcb); + + ExitCode =3D Regs->ExceptionData; + switch (ExitCode) { + default: + Status =3D VmgExit (Ghcb, SvmExitUnsupported, ExitCode, 0); + } + + VmgDone (Ghcb); + + return Status; +} --=20 2.17.1 -=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 (#47649): https://edk2.groups.io/g/devel/message/47649 Mute This Topic: https://groups.io/mt/34203551/1787277 Mute #vc: https://groups.io/mk?hashtag=3Dvc&subid=3D3901457 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- From nobody Sun May 5 15:05:55 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zoho.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+47650+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 1568922766664424.99275768994744; Thu, 19 Sep 2019 12:52:46 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id vDurYY1788612x2MjMHJYF27; Thu, 19 Sep 2019 12:52:46 -0700 X-Received: from NAM02-CY1-obe.outbound.protection.outlook.com (NAM02-CY1-obe.outbound.protection.outlook.com []) by groups.io with SMTP; Thu, 19 Sep 2019 12:52:45 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=emUzhf4Udmc712jHVSN+lYfx6vJcMtWYYPmCp9i9YHc3BkGWYNEYBYjZ03yucQiP2+skizbBJn3PfaSL/UfO09hDt/ar0osyDu3LEzbFg57YW4JER4QFNhDGTzHDiHEqDnBH+TTiBKc9CJkjbgQVedwXJGGpE0XOkmfLX1cqIo5kTBR+spqJGQgLwMUxZOADMBO1HfbUi32q1VK43tHPnYVXoxDfbaaJa7SWJmi98P2bkQj0GJBUmPgpPM3tXJ7AJxQvZTWC6brzRF+e0mt/4jZGYUoO05bSU4VSEwTf5pkzOUvk2QFRUK8plt/6xqPYmkYOYlidGJQlUGwB9ELF1w== 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=bVdR6wbmyB58t0JfQPiMd/S2iXLE9x6J/7vMfNr7joI=; b=TOx36I3L/B1Hz5YFFgUqycRG/HLViHt2PsjE7jhG9BhZyMn42/52G6kV9EztErOxKHGoUFcUIEM4q9Uq8nIYPVJMlW/4xrmeoxEi2cJZZqWCeZOMst9ix6eXQdRqZYN7d2O8amJAtencuq7yWVSNaYj6At4/d8SBdMDdm9TYJVlcpjg/lt668DYYTDgOS2E4feB6x19ahfA2VTy1IwXCXk0YbxjCqxyG+nfARKzveE9Xqqjo1Q2qhjvCuXRym9ky6zNGbkqTOG5bYf+CNFG+Vee66UFJLeQIhj+MRKChS614eAYSh6ffu6fLxxI4SgQAcuiErTYohjMDar/H7BvDIQ== 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 DM6PR12MB3163.namprd12.prod.outlook.com (20.179.104.150) by DM6PR12MB3228.namprd12.prod.outlook.com (20.179.105.96) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2263.13; Thu, 19 Sep 2019 19:52:42 +0000 X-Received: from DM6PR12MB3163.namprd12.prod.outlook.com ([fe80::400e:f0c3:7ca:2fcc]) by DM6PR12MB3163.namprd12.prod.outlook.com ([fe80::400e:f0c3:7ca:2fcc%6]) with mapi id 15.20.2284.009; Thu, 19 Sep 2019 19:52:42 +0000 From: "Lendacky, Thomas" To: "devel@edk2.groups.io" CC: Jordan Justen , Laszlo Ersek , Ard Biesheuvel , Michael D Kinney , Liming Gao , Eric Dong , Ray Ni , "Singh, Brijesh" Subject: [edk2-devel] [RFC PATCH v2 16/44] OvmfPkg/MemEncryptSevLib: Make MemEncryptSevLib available during SEC Thread-Topic: [RFC PATCH v2 16/44] OvmfPkg/MemEncryptSevLib: Make MemEncryptSevLib available during SEC Thread-Index: AQHVbyPMdWGl1xcl10qMhBqJs8zVYQ== Date: Thu, 19 Sep 2019 19:52:42 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: SN4PR0501CA0146.namprd05.prod.outlook.com (2603:10b6:803:2c::24) To DM6PR12MB3163.namprd12.prod.outlook.com (2603:10b6:5:182::22) x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [165.204.78.1] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 9102b021-8f1e-4d57-be4d-08d73d3aef0b x-ms-office365-filtering-ht: Tenant x-ms-traffictypediagnostic: DM6PR12MB3228: x-ms-exchange-purlcount: 1 x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:5516; Received-SPF: pass (zoho.com: domain of groups.io designates 66.175.222.12 as permitted sender) client-ip=66.175.222.12; envelope-from=bounce+27952+47650+1787277+3901457@groups.io; helo=web01.groups.io; received-spf: None (protection.outlook.com: amd.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: 1JGoqcH+siC4IgrmyOJUximtF50C4emrkNKATrA/eOP5RWKMBKK1E77w1BsLI+ZUATyL0F1phbod39+yeKOK+yCDRgZQ0lwZFIozfMGXJOtETHNterov6R7xGjxGATn0D2CoqK7zjm5TLzpObA5OmUUvw8Zz7z0YInCjt/Sb0HG4DVkyROio51/LcbDIYA7UiEmqJxm484Am5YrMSqVR9/aT2aN1Zuf5lxD4JXJT7rXo0W3J1yzFSugzxcMRUTajdIKXCYmMGyZZzu0mWfslY8Itkn+eftgH1zuPs9xLINxwrZkumuT6mqNs78GAhLmN+wgXIwYZp1ekA7IlS+iHxmaHl6nyP6AOkABmYB/e2g6X55pqVlKttVXLJhn3MQG+/nwleLegidKORXihFkya1f1RVkC+bjyIzZ6r0bmKj4E= MIME-Version: 1.0 X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: 9102b021-8f1e-4d57-be4d-08d73d3aef0b X-MS-Exchange-CrossTenant-originalarrivaltime: 19 Sep 2019 19:52:42.7034 (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: PzPuKMOnOsu08nbXfGGMIyKmvNxK2vzHH4QX6DBo89/nq5GmDO8cugWP+npDVZJw46j7tu0anPg6SLttOE4g2w== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR12MB3228 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: M8yY057WRQyJ9sJw4JAkbFb5x1787277AA= Content-Language: en-US Content-ID: Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1568922766; bh=fRWZbKLht6CHqQYlWd0R15Rbk8MmDe6uFHa0W8rCPSs=; h=CC:Content-Type:Date:From:Reply-To:Subject:To; b=m/P2BQGILjP3ySJx72LUCpzBxYdc51m8Qt1L8g8RvgqQUv46gOk6OQJdDxwM8oVnPDD uWApVuZjYjoQZ5A2k4NrZx5P4VL9DH+McZnL3SaZAlgmiRoskUsu0zoP1giu+AufdXYIF IC5RvsRIrDsF3ETMHtMTFJZx+CNIdbqBfXw= 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=3D2198 The SEC phase of OVMF will need access to the MemEncryptSevLib library, so make the library available during SEC. Cc: Jordan Justen Cc: Laszlo Ersek Cc: Ard Biesheuvel Signed-off-by: Tom Lendacky --- OvmfPkg/Library/BaseMemEncryptSevLib/BaseMemEncryptSevLib.inf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OvmfPkg/Library/BaseMemEncryptSevLib/BaseMemEncryptSevLib.inf = b/OvmfPkg/Library/BaseMemEncryptSevLib/BaseMemEncryptSevLib.inf index 7c44d0952815..755d49cc22dc 100644 --- a/OvmfPkg/Library/BaseMemEncryptSevLib/BaseMemEncryptSevLib.inf +++ b/OvmfPkg/Library/BaseMemEncryptSevLib/BaseMemEncryptSevLib.inf @@ -14,7 +14,7 @@ [Defines] FILE_GUID =3D c1594631-3888-4be4-949f-9c630dbc842b MODULE_TYPE =3D BASE VERSION_STRING =3D 1.0 - LIBRARY_CLASS =3D MemEncryptSevLib|PEIM DXE_DRIVER DXE_= RUNTIME_DRIVER DXE_SMM_DRIVER UEFI_DRIVER + LIBRARY_CLASS =3D MemEncryptSevLib|SEC PEIM DXE_DRIVER = DXE_RUNTIME_DRIVER DXE_SMM_DRIVER UEFI_DRIVER =20 # # The following information is for reference only and not required by the = build --=20 2.17.1 -=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 (#47650): https://edk2.groups.io/g/devel/message/47650 Mute This Topic: https://groups.io/mt/34203552/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- From nobody Sun May 5 15:05:55 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zoho.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+47651+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 1568922767511465.16967412990573; Thu, 19 Sep 2019 12:52:47 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id OirQYY1788612xboGKRCQlKT; Thu, 19 Sep 2019 12:52:46 -0700 X-Received: from NAM03-BY2-obe.outbound.protection.outlook.com (NAM03-BY2-obe.outbound.protection.outlook.com []) by groups.io with SMTP; Thu, 19 Sep 2019 12:52:45 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=ceWlAHV1p9OqF3fzyiwJrAlXmgW0ltnfcS3aTSiK10OkZ/u0VxYtFg5sLNmdBIL6VPOwpk9WrxGkWXmRtlA44DxiFOguda81KBP+i00c99hKHCyAWEFbaSi0MInmv3pOAcHHx6H/WOlrEl3LgxV4eqBx5kLtWBsta2vIbKQRa2Kalja+YIW1wnNjs8T3Y645tukBWQPCBk7tr6Q+ZgNFG1ikhg3qgOIzeAum6cqikTn89MbZXmBFgkAs4zIDzgRnwVE/66VONEAmCPyplPjljypej0pwrozz/SZMjqdczCdTXpxfvw44uRdEQrIXKJfjSGQ5FNbFwYlfBVsDYYMzaA== 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=LGKxBDmFb/OiHHE/v0t1pJALsw007JXDmG5C8e9ICMc=; b=MbUaLVHgumiLbc3fpzgT5aTpp74ipIA5utKKN3EF+/rCQIxesnLCdXAhFS429UFczWez1A+N284wjmFEw6jkb6kExLzx2+oqj6Wu0F33gDDFVAbJtZwhiv+PZuS3U4AAjw0Y0c1aMF7O9cJ38q5hOe1EzBAtsaa2l0oWc1hy360Avq1AzXcbf2sKPtQHaNWDhrB6H1gSnQpzV/3VJUkMqNQIjxHZZXUCr+5sBcUtTWLdeX5c83xdCrng0GbgqZ0mIQr9n0lYEXK19w/zWcKS4ilFRohGF1jv8CWYaLSKOsgvgwi6YToyvMOtPVokGhZVCRXYL5VT0TXQ4+wIlSvONA== 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 DM6PR12MB3163.namprd12.prod.outlook.com (20.179.104.150) by DM6PR12MB3228.namprd12.prod.outlook.com (20.179.105.96) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2263.13; Thu, 19 Sep 2019 19:52:44 +0000 X-Received: from DM6PR12MB3163.namprd12.prod.outlook.com ([fe80::400e:f0c3:7ca:2fcc]) by DM6PR12MB3163.namprd12.prod.outlook.com ([fe80::400e:f0c3:7ca:2fcc%6]) with mapi id 15.20.2284.009; Thu, 19 Sep 2019 19:52:44 +0000 From: "Lendacky, Thomas" To: "devel@edk2.groups.io" CC: Jordan Justen , Laszlo Ersek , Ard Biesheuvel , Michael D Kinney , Liming Gao , Eric Dong , Ray Ni , "Singh, Brijesh" Subject: [edk2-devel] [RFC PATCH v2 17/44] UefiCpuPkg/CpuExceptionHandler: Add #VC exception handling for Sec phase Thread-Topic: [RFC PATCH v2 17/44] UefiCpuPkg/CpuExceptionHandler: Add #VC exception handling for Sec phase Thread-Index: AQHVbyPNOeGdUWdiR0e9W+asMAMu7g== Date: Thu, 19 Sep 2019 19:52:44 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: SN4PR0501CA0146.namprd05.prod.outlook.com (2603:10b6:803:2c::24) To DM6PR12MB3163.namprd12.prod.outlook.com (2603:10b6:5:182::22) x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [165.204.78.1] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 6a6c03b3-49a7-4672-f3c5-08d73d3aefb3 x-ms-office365-filtering-ht: Tenant x-ms-traffictypediagnostic: DM6PR12MB3228: x-ms-exchange-purlcount: 1 x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:8273; Received-SPF: pass (zoho.com: domain of groups.io designates 66.175.222.12 as permitted sender) client-ip=66.175.222.12; envelope-from=bounce+27952+47651+1787277+3901457@groups.io; helo=web01.groups.io; received-spf: None (protection.outlook.com: amd.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: 3EBsvl04oDOHdBHwqu+98HeZBfOeV0Ndyxs5tdwgBvvQnz1N8Yfyuee1Yb4rL/clk0FuP4BUsYOthCmeCvtYMpTaxXD4MGXeRDNfhAXGsU1nsNaLO5iGY0aDBT9h62oeDGTvwM022gSvi07N4ka1EvJnco8kcdzOKvMnt3kI7mI3ju+E9WqU/SpcRgwHM3nZHbyhdih3ZJettxkh7PHcwIoytfs/p9aJ2voMDex3/0nDMPF7woB6cLCbOiKtWJRSwIKwaFfBfCpVzB5w7sstwfJhhTt4ElpeX7ppbfTxgT5bHMrT5oXwfjt+e5WaAV1FX5XBScY3qaSxNJh5OtviwFICcU3M+dD3uZ0gSdTjp6I2QBnT3cViHEap5HgMyFF68TuSTx/I/bzbgcqcTVx9TwgM46q/vr0BSbfCNgXHeuI= MIME-Version: 1.0 X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6a6c03b3-49a7-4672-f3c5-08d73d3aefb3 X-MS-Exchange-CrossTenant-originalarrivaltime: 19 Sep 2019 19:52:44.0666 (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: y0WkdmMH3CCSZgIM4K3Kcm/gXN6fyuIznAxIq+Z+hjYSoM5ggwLMvm5qWFhXHjUgccJE2/akrPDZMv0KBCvvww== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR12MB3228 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: yoBH5FqvGmLcZe9Ypou3Jwi5x1787277AA= Content-Language: en-US Content-ID: Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1568922766; bh=9vQ80LRAs4KPnXYZoghBnUfxBhcGZ822KbDkov3kc2I=; h=CC:Content-Type:Date:From:Reply-To:Subject:To; b=ghfuxJl/Pad0GP8jrsHydiXjvsJzkY3Ae+wx56i/Z0K3+s0EgO2E1QeSn/YQRi6VSBB Wu6+JhIdt6XoaGMitZMg91bHjJ8ZzUQ0SSScmYEiPl7KyLwvzPfB2GwYxJwxUNnkwS6TG aRR29bYUWFRI1lljqUzfauS9ft1P5arwWk4= 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=3D2198 An SEV-ES guest will generate a #VC exception when it encounters a non-automatic exit (NAE) event. It is expected that the #VC exception handler will communicate with the hypervisor using the GHCB to handle the NAE event. NAE events can occur during the Sec phase, so initialize exception handling early in the OVMF Sec support. Add to the basic #VC exception handler to set the GHCB MSR to a pre-allocated GHCB and call a common #VC handler. Cc: Jordan Justen Cc: Laszlo Ersek Cc: Ard Biesheuvel Signed-off-by: Tom Lendacky --- OvmfPkg/Sec/SecMain.inf | 1 + OvmfPkg/Sec/SecMain.c | 29 ++++++++++++++++------------- 2 files changed, 17 insertions(+), 13 deletions(-) diff --git a/OvmfPkg/Sec/SecMain.inf b/OvmfPkg/Sec/SecMain.inf index 63ba4cb555fb..7f53845f5436 100644 --- a/OvmfPkg/Sec/SecMain.inf +++ b/OvmfPkg/Sec/SecMain.inf @@ -50,6 +50,7 @@ [LibraryClasses] PeCoffExtraActionLib ExtractGuidedSectionLib LocalApicLib + CpuExceptionHandlerLib =20 [Ppis] gEfiTemporaryRamSupportPpiGuid # PPI ALWAYS_PRODUCED diff --git a/OvmfPkg/Sec/SecMain.c b/OvmfPkg/Sec/SecMain.c index 3914355cd17b..7f1dfb2e57c1 100644 --- a/OvmfPkg/Sec/SecMain.c +++ b/OvmfPkg/Sec/SecMain.c @@ -24,6 +24,7 @@ #include #include #include +#include =20 #include =20 @@ -737,6 +738,21 @@ SecCoreStartupWithStack ( Table[Index] =3D 0; } =20 + // + // Initialize IDT + // + IdtTableInStack.PeiService =3D NULL; + for (Index =3D 0; Index < SEC_IDT_ENTRY_COUNT; Index ++) { + CopyMem (&IdtTableInStack.IdtTable[Index], &mIdtEntryTemplate, sizeof = (mIdtEntryTemplate)); + } + + IdtDescriptor.Base =3D (UINTN)&IdtTableInStack.IdtTable; + IdtDescriptor.Limit =3D (UINT16)(sizeof (IdtTableInStack.IdtTable) - 1); + + AsmWriteIdtr (&IdtDescriptor); + + InitializeCpuExceptionHandlers (NULL); + ProcessLibraryConstructorList (NULL, NULL); =20 DEBUG ((EFI_D_INFO, @@ -751,19 +767,6 @@ SecCoreStartupWithStack ( // InitializeFloatingPointUnits (); =20 - // - // Initialize IDT - // =20 - IdtTableInStack.PeiService =3D NULL; - for (Index =3D 0; Index < SEC_IDT_ENTRY_COUNT; Index ++) { - CopyMem (&IdtTableInStack.IdtTable[Index], &mIdtEntryTemplate, sizeof = (mIdtEntryTemplate)); - } - - IdtDescriptor.Base =3D (UINTN)&IdtTableInStack.IdtTable; - IdtDescriptor.Limit =3D (UINT16)(sizeof (IdtTableInStack.IdtTable) - 1); - - AsmWriteIdtr (&IdtDescriptor); - #if defined (MDE_CPU_X64) // // ASSERT that the Page Tables were set by the reset vector code to --=20 2.17.1 -=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 (#47651): https://edk2.groups.io/g/devel/message/47651 Mute This Topic: https://groups.io/mt/34203553/1787277 Mute #vc: https://groups.io/mk?hashtag=3Dvc&subid=3D3901457 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- From nobody Sun May 5 15:05:55 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zoho.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+47652+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 156892276808317.932074120813354; Thu, 19 Sep 2019 12:52:48 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id XxFbYY1788612xiT867mYCg1; Thu, 19 Sep 2019 12:52:47 -0700 X-Received: from NAM03-BY2-obe.outbound.protection.outlook.com (NAM03-BY2-obe.outbound.protection.outlook.com [40.107.78.59]) by groups.io with SMTP; Thu, 19 Sep 2019 12:52:46 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=kX1krXRC9xgc3zEkIhzVcMsezHSEmvaDxpIVFmgF7J17O3Aoezz6QQPW0RbKJP1yXa1qWCyKcc1nzjb4Bq9VWO2/CubH3P+ODjIY4ZXBY5kC0SyRJlB0cq4PPWLjmgbINAsf2Dy5IyqPn36KohCzevMtD+5GmqgY8ogsdFsb49GhVRmDqg+QuPxS6E7afJPwqWfWN2fxxQPNGF2CEC5c8ky6PvRVpe4lHWvKDYuLcRyGR/EDeWB3LBuxmPhoirsgid6AsW+yJu6PeyJcS4LGLOrlTVgR2zUKd1VF1xQmqlTuFP2AwwaLWkNxskupz77eADoBegfAxCiQLBYLHU/Uvw== 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=rwxQ9iULABB5wfFKCzKwIgQa8RFvb35XfNPiSuO9b9I=; b=C2/poVLcT66HWnBWfpOR4geBUINkKpOSF+GyROB0xoLcg5rJd8M/LoDQrpZeHgI0rrdSaslLG53vZ09B5h2lXrTPVL4+PoY29ZNbYDUaxwaepZ2gUyDtRjuSprJyLhUC4F44bhzVfvqgoqzi0fTkBSXOu3hg6ocMxJftfX0u61qfFF51Wx6C+SJrKmSDLGsc0Lm6t2uTwn3jlhpsRDcSfIDdWn6Ur4t98VeFC4oHciNWMBLaidOg2/uXn5a8D2nZ1NuM0VpzU1vSfVBfas1BWWjvDjWefNxU94/dNYKkdC9m2H3pWMInd/UUxYHOcU3XfukFcbNCc8csVQVSiDaFvw== 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 DM6PR12MB3163.namprd12.prod.outlook.com (20.179.104.150) by DM6PR12MB3228.namprd12.prod.outlook.com (20.179.105.96) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2263.13; Thu, 19 Sep 2019 19:52:45 +0000 X-Received: from DM6PR12MB3163.namprd12.prod.outlook.com ([fe80::400e:f0c3:7ca:2fcc]) by DM6PR12MB3163.namprd12.prod.outlook.com ([fe80::400e:f0c3:7ca:2fcc%6]) with mapi id 15.20.2284.009; Thu, 19 Sep 2019 19:52:45 +0000 From: "Lendacky, Thomas" To: "devel@edk2.groups.io" CC: Jordan Justen , Laszlo Ersek , Ard Biesheuvel , Michael D Kinney , Liming Gao , Eric Dong , Ray Ni , "Singh, Brijesh" Subject: [edk2-devel] [RFC PATCH v2 18/44] OvmfPkg/Sec: Enable cache early to speed up booting Thread-Topic: [RFC PATCH v2 18/44] OvmfPkg/Sec: Enable cache early to speed up booting Thread-Index: AQHVbyPOUvXgJnyOjkKLsmulOdwS/Q== Date: Thu, 19 Sep 2019 19:52:45 +0000 Message-ID: <4d83b7925ad4f808774f442a2a969cc1daf377fe.1568922729.git.thomas.lendacky@amd.com> References: In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: SN4PR0501CA0146.namprd05.prod.outlook.com (2603:10b6:803:2c::24) To DM6PR12MB3163.namprd12.prod.outlook.com (2603:10b6:5:182::22) x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [165.204.78.1] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 06c6a937-8e3c-47b8-861b-08d73d3af081 x-ms-office365-filtering-ht: Tenant x-ms-traffictypediagnostic: DM6PR12MB3228: x-ms-exchange-purlcount: 1 x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:9508; Received-SPF: pass (zoho.com: domain of groups.io designates 66.175.222.12 as permitted sender) client-ip=66.175.222.12; envelope-from=bounce+27952+47652+1787277+3901457@groups.io; helo=web01.groups.io; received-spf: None (protection.outlook.com: amd.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: dKEa+JtYSKeCGD4zBZbVHE6EXtEWh6mCQkpDWR2sBRGUFQT8eIsAcncVU/tvw2fFdqU09e/oegfzJ50bYSJeuC/IQumRyGvKDBolZyDsPwXf73vP5iyiKX6fYnefBR+sfCASTgkRsUoIpMz4C4P1wuLHFStJB9/cTiutf475rPA4d1fuqlEPXf8AmBYdYipfcjhcQMdFmSBsSpONkzWw4EL8pnHTBGVx8/MvRnHz8WLVrP4QVYYY5Qwz8wN/IerHM06rXUKxfHeYUdi6mkFBwDPW6HKx1WmH0BaO0bw0NGlX5rrV2/LSM4MQ96lS3cbu40Y7i6Os9RgcAIik/ePTuWH1+YkswIwjUP7vbN0x64Np4Zuch8xlpXFO8I8PZE3JR0t/dCmzAxZz1iFmfRElpPbvWSynpptjtTRl2lTgV00= MIME-Version: 1.0 X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: 06c6a937-8e3c-47b8-861b-08d73d3af081 X-MS-Exchange-CrossTenant-originalarrivaltime: 19 Sep 2019 19:52:45.0731 (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: jxEwn1t76k9BK5MHj9ktK8NjD6mTOU3/teOMqjc+QgLJ8pXpxLgIW0jwXsxJMX8yUj3mgcSi+nCfLPL4mvsHdA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR12MB3228 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: psekJYo8FyEKzV8SHmQCsvpWx1787277AA= Content-Language: en-US Content-ID: Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1568922767; bh=AredS7AR0x/HD2q7aH+/MV60g1ZvVZ4aEY7KLQprSUU=; h=CC:Content-Type:Date:From:Reply-To:Subject:To; b=CYkX2HSj7DGdjrXoPuqX8HJZ9XYNyQj3DA49KJGmdLd8Jeeyz0eTeUxNFl5dFeCWCjU rvyZnRmBnHvx0HxzP741czNYxezFtWc8xxmtfhhauCv3+r32PCZDMDozWaj8/sJZCsonF wdpBtSgCbbzknmqk22B1Re+ngdt+fp3lLr4= 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=3D2198 Currently, the OVMF code relies on the hypervisor to enable the cache support on the processor in order to improve the boot speed. However, with SEV-ES, the hypervisor is not allowed to change the CR0 register to enable caching. Update the OVMF Sec support to enable caching in order to improve the boot speed when running as an SEV-ES guest. Cc: Jordan Justen Cc: Laszlo Ersek Cc: Ard Biesheuvel Signed-off-by: Tom Lendacky --- OvmfPkg/Sec/SecMain.inf | 1 + OvmfPkg/Sec/SecMain.c | 10 ++++++++++ 2 files changed, 11 insertions(+) diff --git a/OvmfPkg/Sec/SecMain.inf b/OvmfPkg/Sec/SecMain.inf index 7f53845f5436..fdf00e5d8be3 100644 --- a/OvmfPkg/Sec/SecMain.inf +++ b/OvmfPkg/Sec/SecMain.inf @@ -51,6 +51,7 @@ [LibraryClasses] ExtractGuidedSectionLib LocalApicLib CpuExceptionHandlerLib + MemEncryptSevLib =20 [Ppis] gEfiTemporaryRamSupportPpiGuid # PPI ALWAYS_PRODUCED diff --git a/OvmfPkg/Sec/SecMain.c b/OvmfPkg/Sec/SecMain.c index 7f1dfb2e57c1..20716d484ab0 100644 --- a/OvmfPkg/Sec/SecMain.c +++ b/OvmfPkg/Sec/SecMain.c @@ -25,6 +25,7 @@ #include #include #include +#include =20 #include =20 @@ -755,6 +756,15 @@ SecCoreStartupWithStack ( =20 ProcessLibraryConstructorList (NULL, NULL); =20 + // + // Under SEV-ES, the hypervisor can't modify CR0 and so can't enable + // caching in order to speed up the boot. Enable caching early for + // an SEV-ES guest. + // + if (MemEncryptSevEsIsEnabled()) { + AsmEnableCache (); + } + DEBUG ((EFI_D_INFO, "SecCoreStartupWithStack(0x%x, 0x%x)\n", (UINT32)(UINTN)BootFv, --=20 2.17.1 -=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 (#47652): https://edk2.groups.io/g/devel/message/47652 Mute This Topic: https://groups.io/mt/34203554/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- From nobody Sun May 5 15:05:55 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zoho.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+47653+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 1568922768595583.545590178361; Thu, 19 Sep 2019 12:52:48 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id y5weYY1788612xVgE6G89REX; Thu, 19 Sep 2019 12:52:48 -0700 X-Received: from NAM02-CY1-obe.outbound.protection.outlook.com (NAM02-CY1-obe.outbound.protection.outlook.com [40.107.76.53]) by groups.io with SMTP; Thu, 19 Sep 2019 12:52:47 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Cz/t9iDs3mnrU5PP2Gv+9MzhwImjSL1HwJh/Nu7x1N03+B30K6vjO8ALRf1qZdQoq/w5fzDJcbjIQv5QDDkyvJlyww2FU3GMg/InoPwFCQlNe9eNak/y9TfxYk2Y3ydTJzPkXQEqvzF18C7uZoTCcQfV1Wh4lk+A/p4YYdq3NZE80NltKsGH7BrpvRPGREWsjaqM/H4kWkBrZ+DhZiKqZbPJ29utlzJ2L2+HHmC5NsViSV6KLsESQPS5VqNZOw9mrCt7+41VM1nmxLqnnzMxzGLm+SOyYGYfvTMibGjmafmH7UIFGaheAkZLgmsh5SJyBbEV6vuESmPx1hWtlue9HA== 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=IHi5+NQW2ARRgfnHKuC+sF+ykgk9d7Y2/GqBduxxuuo=; b=YHsVLpe/2osAhoIZWUq428v8zEPWkP0mQYUv7mPbr2HD4EMB4fU2/Zx0xdLuxIdrNtwpcGN6BKa1TtomdHdaew/nHvttXdMGdvXmAr10g+LaJ21uQectKPX0Ln+j4otjAYC0tqF6i13QejDeBTXFILiZr871plyRD1aUy9F6vrIr/v+MgIkUXHsbGGVoKGs3P1RdCrXMsQz3tTeornjQgMHN79YIqBy601zYlnAWHxY4UcLXkJAQohNJ5xgUvPWDFd1B1e+YP5PZasnbXDP/k5CK6ZIZm/yuFeAiRDby5WwNQGXaxyucQ7h+sE2aDWlZ5Vt/tWJ2klvaN2cCCZGEAw== 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 DM6PR12MB3163.namprd12.prod.outlook.com (20.179.104.150) by DM6PR12MB3228.namprd12.prod.outlook.com (20.179.105.96) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2263.13; Thu, 19 Sep 2019 19:52:46 +0000 X-Received: from DM6PR12MB3163.namprd12.prod.outlook.com ([fe80::400e:f0c3:7ca:2fcc]) by DM6PR12MB3163.namprd12.prod.outlook.com ([fe80::400e:f0c3:7ca:2fcc%6]) with mapi id 15.20.2284.009; Thu, 19 Sep 2019 19:52:46 +0000 From: "Lendacky, Thomas" To: "devel@edk2.groups.io" CC: Jordan Justen , Laszlo Ersek , Ard Biesheuvel , Michael D Kinney , Liming Gao , Eric Dong , Ray Ni , "Singh, Brijesh" Subject: [edk2-devel] [RFC PATCH v2 19/44] UefiCpuPkg/CpuExceptionHandler: Add support for IOIO_PROT NAE events Thread-Topic: [RFC PATCH v2 19/44] UefiCpuPkg/CpuExceptionHandler: Add support for IOIO_PROT NAE events Thread-Index: AQHVbyPOtWLr+WHRm0WNi+JyeoEPkg== Date: Thu, 19 Sep 2019 19:52:46 +0000 Message-ID: <22d42aa8b3d16a7a91b5f28e024917910fb62742.1568922729.git.thomas.lendacky@amd.com> References: In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: SN4PR0501CA0146.namprd05.prod.outlook.com (2603:10b6:803:2c::24) To DM6PR12MB3163.namprd12.prod.outlook.com (2603:10b6:5:182::22) x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [165.204.78.1] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: d9b30020-5f17-499f-e7b4-08d73d3af11e x-ms-office365-filtering-ht: Tenant x-ms-traffictypediagnostic: DM6PR12MB3228: x-ms-exchange-purlcount: 1 x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:6790; Received-SPF: pass (zoho.com: domain of groups.io designates 66.175.222.12 as permitted sender) client-ip=66.175.222.12; envelope-from=bounce+27952+47653+1787277+3901457@groups.io; helo=web01.groups.io; received-spf: None (protection.outlook.com: amd.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: zNsDUM74gr+kzEKcz+mNPYf42Hjv0+d/cMYzB1lz2yY8+8+UVlZD+BbeTtRIoUAh+2eYrenMFU4zU1UD3oIytJVmlqNUipOX5g39bV0WN1XfFDMxFHoChe3m9GoLHwLKhxwqb6UKUgQDnoI9FD9N4xFals0umsYQhYK/oJbZrgNOEdC6/Fg6xwk0WQc/g4Ab8d07J6TW2RqugF3La95WoSyMnWfRr298nI/N7D7rbTy6WvCQ3npTuESvZ09USHtDn56YPXLCq1ByQSBjDiBIx8X0c+Xgc4kV/H1o6cRsX/61Q5LbDsvOX43YmLr8d0t6SSzYdF9h4rtnUQgRat8jPkSuUUqFoEUdBb2jGZoOwN7XUdiaXDqXLbl6Cozi4y2wCOgOxy5ddUnwe1iZmCIg9Zd2snzvihySZp6X2ybJNQU= MIME-Version: 1.0 X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: d9b30020-5f17-499f-e7b4-08d73d3af11e X-MS-Exchange-CrossTenant-originalarrivaltime: 19 Sep 2019 19:52:46.1545 (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: GBfAxr4XLJGLP+WsXVsr+vT6UESobw+kC2N8UxMzNTp+lGrRJZ+NnTyS1P5Z/lwS8xDpiTjHtyrXjHlB9Q8G3Q== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR12MB3228 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: DuoEfnwbn15ZTnIUGCMRuEEmx1787277AA= Content-Language: en-US Content-ID: Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1568922768; bh=yCsG/m4QjdCVFZS5su4Z1UxagwXCLYorFvQ41FNxykg=; h=CC:Content-Type:Date:From:Reply-To:Subject:To; b=gEvT//G5Nfc35MbGcRN3qIa0PVZhvRQ6N8MVY7qZqNONumdVN8vzElz8QO6Hx5ssi+O lOg7YTiT8P8WA0Iu/91zGQnb+KvfCttaQ1mWV0lL5B6QRjOrT+W9rQ5mSYECxQMb9K+eX oeMFvSxL0kjFE5UmS/22Pyk/bUpZYyHfo6Q= 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=3D2198 Under SEV-ES, a IOIO_PROT intercept generates a #VC exception. VMGEXIT must be used to allow the hypervisor to handle this intercept. Add support to construct the required GHCB values to support a IOIO_PROT NAE event. Parse the instruction that generated the #VC exception, setting the required register values in the GHCB and creating the proper SW_EXITINFO1 value in the GHCB. Cc: Eric Dong Cc: Ray Ni Cc: Laszlo Ersek Signed-off-by: Tom Lendacky --- .../X64/AMDSevVcCommon.c | 434 +++++++++++++++++- 1 file changed, 433 insertions(+), 1 deletion(-) diff --git a/UefiCpuPkg/Library/CpuExceptionHandlerLib/X64/AMDSevVcCommon.c= b/UefiCpuPkg/Library/CpuExceptionHandlerLib/X64/AMDSevVcCommon.c index a56dcffe1d5d..16091fe38f83 100644 --- a/UefiCpuPkg/Library/CpuExceptionHandlerLib/X64/AMDSevVcCommon.c +++ b/UefiCpuPkg/Library/CpuExceptionHandlerLib/X64/AMDSevVcCommon.c @@ -4,6 +4,425 @@ #include #include "AMDSevVcCommon.h" =20 +typedef enum { + LongMode64Bit =3D 0, + LongModeCompat32Bit, + LongModeCompat16Bit, +} SEV_ES_INSTRUCTION_MODE; + +typedef enum { + Size8Bits =3D 0, + Size16Bits, + Size32Bits, + Size64Bits, +} SEV_ES_INSTRUCTION_SIZE; + +typedef enum { + SegmentEs =3D 0, + SegmentCs, + SegmentSs, + SegmentDs, + SegmentFs, + SegmentGs, +} SEV_ES_INSTRUCTION_SEGMENT; + +typedef enum { + RepNone =3D 0, + RepZ, + RepNZ, +} SEV_ES_INSTRUCTION_REP; + +typedef union { + struct { + UINT8 B:1; + UINT8 X:1; + UINT8 R:1; + UINT8 W:1; + UINT8 REX:4; + } Bits; + + UINT8 Uint8; +} SEV_ES_INSTRUCTION_REX_PREFIX; + +typedef union { + struct { + UINT8 Rm:3; + UINT8 Reg:3; + UINT8 Mod:2; + } Bits; + + UINT8 Uint8; +} SEV_ES_INSTRUCTION_MODRM; + +typedef union { + struct { + UINT8 Base:3; + UINT8 Index:3; + UINT8 Scale:2; + } Bits; + + UINT8 Uint8; +} SEV_ES_INSTRUCTION_SIB; + +typedef struct { + struct { + UINT8 Rm; + UINT8 Reg; + UINT8 Mod; + } ModRm; + + struct { + UINT8 Base; + UINT8 Index; + UINT8 Scale; + } Sib; + + UINTN RegData; + UINTN RmData; +} SEV_ES_INSTRUCTION_OPCODE_EXT; + +typedef struct { + GHCB *Ghcb; + + SEV_ES_INSTRUCTION_MODE Mode; + SEV_ES_INSTRUCTION_SIZE DataSize; + SEV_ES_INSTRUCTION_SIZE AddrSize; + BOOLEAN SegmentSpecified; + SEV_ES_INSTRUCTION_SEGMENT Segment; + SEV_ES_INSTRUCTION_REP RepMode; + + UINT8 *Begin; + UINT8 *End; + + UINT8 *Prefixes; + UINT8 *OpCodes; + UINT8 *Displacement; + UINT8 *Immediate; + + SEV_ES_INSTRUCTION_REX_PREFIX RexPrefix; + + BOOLEAN ModRmPresent; + SEV_ES_INSTRUCTION_MODRM ModRm; + + BOOLEAN SibPresent; + SEV_ES_INSTRUCTION_SIB Sib; + + UINT8 PrefixSize; + UINT8 OpCodeSize; + UINT8 DisplacementSize; + UINT8 ImmediateSize; + + SEV_ES_INSTRUCTION_OPCODE_EXT Ext; +} SEV_ES_INSTRUCTION_DATA; + +typedef +UINTN +(*NAE_EXIT) ( + GHCB *Ghcb, + EFI_SYSTEM_CONTEXT_X64 *Regs, + SEV_ES_INSTRUCTION_DATA *InstructionData + ); + + +STATIC +BOOLEAN +GhcbIsRegValid ( + GHCB *Ghcb, + GHCB_REGISTER Reg + ) +{ + UINT32 RegIndex =3D Reg / 8; + UINT32 RegBit =3D Reg & 0x07; + + return (Ghcb->SaveArea.ValidBitmap[RegIndex] & (1 << RegBit)); +} + +STATIC +VOID +GhcbSetRegValid ( + GHCB *Ghcb, + GHCB_REGISTER Reg + ) +{ + UINT32 RegIndex =3D Reg / 8; + UINT32 RegBit =3D Reg & 0x07; + + Ghcb->SaveArea.ValidBitmap[RegIndex] |=3D (1 << RegBit); +} + +STATIC +VOID +DecodePrefixes ( + EFI_SYSTEM_CONTEXT_X64 *Regs, + SEV_ES_INSTRUCTION_DATA *InstructionData + ) +{ + SEV_ES_INSTRUCTION_MODE Mode; + SEV_ES_INSTRUCTION_SIZE ModeDataSize; + SEV_ES_INSTRUCTION_SIZE ModeAddrSize; + UINT8 *Byte; + + /*TODO: Determine current mode - 64-bit for now */ + Mode =3D LongMode64Bit; + ModeDataSize =3D Size32Bits; + ModeAddrSize =3D Size64Bits; + + InstructionData->Mode =3D Mode; + InstructionData->DataSize =3D ModeDataSize; + InstructionData->AddrSize =3D ModeAddrSize; + + InstructionData->Prefixes =3D InstructionData->Begin; + + Byte =3D InstructionData->Prefixes; + for ( ; ; Byte++, InstructionData->PrefixSize++) { + switch (*Byte) { + case 0x26: + case 0x2E: + case 0x36: + case 0x3E: + if (Mode !=3D LongMode64Bit) { + InstructionData->SegmentSpecified =3D TRUE; + InstructionData->Segment =3D (*Byte >> 3) & 3; + } + break; + + case 0x40 ... 0x4F: + InstructionData->RexPrefix.Uint8 =3D *Byte; + if (*Byte & 0x08) + InstructionData->DataSize =3D Size64Bits; + break; + + case 0x64: + InstructionData->SegmentSpecified =3D TRUE; + InstructionData->Segment =3D *Byte & 7; + break; + + case 0x66: + if (!InstructionData->RexPrefix.Uint8) { + InstructionData->DataSize =3D + (Mode =3D=3D LongMode64Bit) ? Size16Bits : + (Mode =3D=3D LongModeCompat32Bit) ? Size16Bits : + (Mode =3D=3D LongModeCompat16Bit) ? Size32Bits : 0; + } + break; + + case 0x67: + InstructionData->AddrSize =3D + (Mode =3D=3D LongMode64Bit) ? Size32Bits : + (Mode =3D=3D LongModeCompat32Bit) ? Size16Bits : + (Mode =3D=3D LongModeCompat16Bit) ? Size32Bits : 0; + break; + + case 0xF0: + break; + + case 0xF2: + InstructionData->RepMode =3D RepZ; + break; + + case 0xF3: + InstructionData->RepMode =3D RepNZ; + break; + + default: + InstructionData->OpCodes =3D Byte; + InstructionData->OpCodeSize =3D (*Byte =3D=3D 0x0F) ? 2 : 1; + + InstructionData->End =3D Byte + InstructionData->OpCodeSize; + InstructionData->Displacement =3D InstructionData->End; + InstructionData->Immediate =3D InstructionData->End; + return; + } + } +} + +UINT64 +InstructionLength ( + SEV_ES_INSTRUCTION_DATA *InstructionData + ) +{ + return (UINT64) (InstructionData->End - InstructionData->Begin); +} + +STATIC +VOID +InitInstructionData ( + SEV_ES_INSTRUCTION_DATA *InstructionData, + GHCB *Ghcb, + EFI_SYSTEM_CONTEXT_X64 *Regs + ) +{ + SetMem (InstructionData, sizeof (*InstructionData), 0); + InstructionData->Ghcb =3D Ghcb; + InstructionData->Begin =3D (UINT8 *) Regs->Rip; + InstructionData->End =3D (UINT8 *) Regs->Rip; + + DecodePrefixes (Regs, InstructionData); +} + +STATIC +UINTN +UnsupportedExit ( + GHCB *Ghcb, + EFI_SYSTEM_CONTEXT_X64 *Regs, + SEV_ES_INSTRUCTION_DATA *InstructionData + ) +{ + UINTN Status; + + Status =3D VmgExit (Ghcb, SvmExitUnsupported, Regs->ExceptionData, 0); + ASSERT (0); + + return Status; +} + +#define IOIO_TYPE_STR (1 << 2) +#define IOIO_TYPE_IN 1 +#define IOIO_TYPE_INS (IOIO_TYPE_IN | IOIO_TYPE_STR) +#define IOIO_TYPE_OUT 0 +#define IOIO_TYPE_OUTS (IOIO_TYPE_OUT | IOIO_TYPE_STR) + +#define IOIO_REP (1 << 3) + +#define IOIO_ADDR_64 (1 << 9) +#define IOIO_ADDR_32 (1 << 8) +#define IOIO_ADDR_16 (1 << 7) + +#define IOIO_DATA_32 (1 << 6) +#define IOIO_DATA_16 (1 << 5) +#define IOIO_DATA_8 (1 << 4) + +#define IOIO_SEG_ES (0 << 10) +#define IOIO_SEG_DS (3 << 10) + +STATIC +UINT64 +IoioExitInfo ( + EFI_SYSTEM_CONTEXT_X64 *Regs, + SEV_ES_INSTRUCTION_DATA *InstructionData + ) +{ + UINT64 ExitInfo =3D 0; + + switch (*(InstructionData->OpCodes)) { + // IN immediate opcodes + case 0xE4: + case 0xE5: + InstructionData->ImmediateSize =3D 1; + InstructionData->End++; + ExitInfo |=3D IOIO_TYPE_IN; + ExitInfo |=3D ((*(InstructionData->OpCodes + 1)) << 16); + break; + + // OUT immediate opcodes + case 0xE6: + case 0xE7: + InstructionData->ImmediateSize =3D 1; + InstructionData->End++; + ExitInfo |=3D IOIO_TYPE_OUT; + ExitInfo |=3D ((*(InstructionData->OpCodes + 1)) << 16) | IOIO_TYPE_OU= T; + break; + + // IN register opcodes + case 0xEC: + case 0xED: + ExitInfo |=3D IOIO_TYPE_IN; + ExitInfo |=3D ((Regs->Rdx & 0xffff) << 16); + break; + + // OUT register opcodes + case 0xEE: + case 0xEF: + ExitInfo |=3D IOIO_TYPE_OUT; + ExitInfo |=3D ((Regs->Rdx & 0xffff) << 16); + break; + + default: + return 0; + } + + switch (*(InstructionData->OpCodes)) { + case 0xE4: + case 0xE6: + case 0xEC: + case 0xEE: + // Single-byte opcodes + ExitInfo |=3D IOIO_DATA_8; + break; + + default: + // Length determined by instruction parsing + ExitInfo |=3D (InstructionData->DataSize =3D=3D Size16Bits) ? IOIO_DAT= A_16 + : IOIO_DATA_32; + } + + switch (InstructionData->AddrSize) { + case Size16Bits: + ExitInfo |=3D IOIO_ADDR_16; + break; + + case Size32Bits: + ExitInfo |=3D IOIO_ADDR_32; + break; + + case Size64Bits: + ExitInfo |=3D IOIO_ADDR_64; + break; + + default: + break; + } + + if (InstructionData->RepMode) { + ExitInfo |=3D IOIO_REP; + } + + return ExitInfo; +} + +STATIC +UINTN +IoioExit ( + GHCB *Ghcb, + EFI_SYSTEM_CONTEXT_X64 *Regs, + SEV_ES_INSTRUCTION_DATA *InstructionData + ) +{ + UINT64 ExitInfo1; + UINTN Status; + + ExitInfo1 =3D IoioExitInfo (Regs, InstructionData); + if (!ExitInfo1) { + VmgExit (Ghcb, SvmExitUnsupported, SvmExitIoioProt, 0); + ASSERT (0); + } + + if (!(ExitInfo1 & IOIO_TYPE_IN)) { + Ghcb->SaveArea.Rax =3D Regs->Rax; + GhcbSetRegValid (Ghcb, GhcbRax); + } + + //FIXME: This is likely needed for the merging cases (size<32 bits) + // Pass in zero and perform merge here (only for non-string) + Ghcb->SaveArea.Rax =3D Regs->Rax; + GhcbSetRegValid (Ghcb, GhcbRax); + + Status =3D VmgExit (Ghcb, SvmExitIoioProt, ExitInfo1, 0); + if (Status) { + return Status; + } + + if (ExitInfo1 & IOIO_TYPE_IN) { + if (!GhcbIsRegValid (Ghcb, GhcbRax)) { + VmgExit (Ghcb, SvmExitUnsupported, SvmExitIoioProt, 0); + ASSERT (0); + } + Regs->Rax =3D Ghcb->SaveArea.Rax; + } + + return 0; +} + UINTN DoVcCommon ( GHCB *Ghcb, @@ -11,6 +430,8 @@ DoVcCommon ( ) { EFI_SYSTEM_CONTEXT_X64 *Regs =3D Context.SystemContextX64; + SEV_ES_INSTRUCTION_DATA InstructionData; + NAE_EXIT NaeExit; UINTN ExitCode; UINTN Status; =20 @@ -18,8 +439,19 @@ DoVcCommon ( =20 ExitCode =3D Regs->ExceptionData; switch (ExitCode) { + case SvmExitIoioProt: + NaeExit =3D IoioExit; + break; + default: - Status =3D VmgExit (Ghcb, SvmExitUnsupported, ExitCode, 0); + NaeExit =3D UnsupportedExit; + } + + InitInstructionData (&InstructionData, Ghcb, Regs); + + Status =3D NaeExit (Ghcb, Regs, &InstructionData); + if (!Status) { + Regs->Rip +=3D InstructionLength(&InstructionData); } =20 VmgDone (Ghcb); --=20 2.17.1 -=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 (#47653): https://edk2.groups.io/g/devel/message/47653 Mute This Topic: https://groups.io/mt/34203555/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- From nobody Sun May 5 15:05:55 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zoho.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+47654+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 1568922769651157.71581883688862; Thu, 19 Sep 2019 12:52:49 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id 6cUWYY1788612xcbKeUAk8Or; Thu, 19 Sep 2019 12:52:49 -0700 X-Received: from NAM03-DM3-obe.outbound.protection.outlook.com (NAM03-DM3-obe.outbound.protection.outlook.com [40.107.80.58]) by groups.io with SMTP; Thu, 19 Sep 2019 12:52:48 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=B276WVOq/h+dymrPBzf8brotqpCdcdRQzeoyIm+15LGPgODc/HPHf+P9mc6KMs/0mal7qN88qEEm7Ul10bvDJWMell+ngNKag00BgTff2fZMkUNobZjQMcqDFeU03Xkuk8p8kcpsKWuuLTjSs0RhjdRdTLXSS/5NCPQgRCU6uRUQCkMwx3VM+O7CVC+MRRCNNpyJeoU2r7B9M+vvg14A7d3BcXOwYmHmz8CVQQ/o630MwEolpG9jrchVNOVogxix40YQCBIg+e1cnWOS10tLWTZ2M/ngwWlgtOa3dGCBOtjR5iWwutcHxNJoEN7vwlryWIzLlmWn9K/hByD3YpJiVg== 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=1BiXoz/mKHdBOV+PwpjoGiso67enKYubp2tWAHLPNM4=; b=DeDT4k1/a4DrPF4Tpg+V+66HMLK8qqyizIJlaLI1ytyxRlJE7Kfer7pjijpcuf1QnrvFyYx8IpZfVUfj2+vVrv4sHw46Cbogy5l5x6zBglVz7nxZISGQmCAImiGgtG6zlZV/uKFHuz0XNVBCgBl30c4SE2XJ+0XfSoL+hREpyYdQDHNnzd6wiXGfX+eKbkLNLyR4HymNVZzz/rWf3JadQbE2+mZvHlaY8KPw3/jGTXz/Wh/zbI+qAdqyy4ekJpmmu5LgBBXSuHyu4FanGlWsCicrQcbhopL+QmLwwCuI4obwMOo2tHlcKniiSPDpUNajtejBOKeYDkogpUFo3kKsaw== 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 DM6PR12MB3163.namprd12.prod.outlook.com (20.179.104.150) by DM6PR12MB2890.namprd12.prod.outlook.com (20.179.71.152) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2263.23; Thu, 19 Sep 2019 19:52:47 +0000 X-Received: from DM6PR12MB3163.namprd12.prod.outlook.com ([fe80::400e:f0c3:7ca:2fcc]) by DM6PR12MB3163.namprd12.prod.outlook.com ([fe80::400e:f0c3:7ca:2fcc%6]) with mapi id 15.20.2284.009; Thu, 19 Sep 2019 19:52:47 +0000 From: "Lendacky, Thomas" To: "devel@edk2.groups.io" CC: Jordan Justen , Laszlo Ersek , Ard Biesheuvel , Michael D Kinney , Liming Gao , Eric Dong , Ray Ni , "Singh, Brijesh" Subject: [edk2-devel] [RFC PATCH v2 20/44] UefiCpuPkg/CpuExceptionHandler: Support string IO for IOIO_PROT NAE events Thread-Topic: [RFC PATCH v2 20/44] UefiCpuPkg/CpuExceptionHandler: Support string IO for IOIO_PROT NAE events Thread-Index: AQHVbyPPqAY2l7HhN0OoT/MjuqYE9w== Date: Thu, 19 Sep 2019 19:52:47 +0000 Message-ID: <95667186978d220e5703c10d98d28cda35e6701f.1568922729.git.thomas.lendacky@amd.com> References: In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: SN4PR0501CA0146.namprd05.prod.outlook.com (2603:10b6:803:2c::24) To DM6PR12MB3163.namprd12.prod.outlook.com (2603:10b6:5:182::22) x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [165.204.78.1] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 31cb9e42-4c89-4e80-b05d-08d73d3af1cb x-ms-office365-filtering-ht: Tenant x-ms-traffictypediagnostic: DM6PR12MB2890: x-ms-exchange-purlcount: 1 x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:7691; Received-SPF: pass (zoho.com: domain of groups.io designates 66.175.222.12 as permitted sender) client-ip=66.175.222.12; envelope-from=bounce+27952+47654+1787277+3901457@groups.io; helo=web01.groups.io; received-spf: None (protection.outlook.com: amd.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: cNCe77zdbqryESMFBHehDdchNhDw/3ofq5QN1OV3YmGO/OQK4wngHQXPPBAaTTV09nw6RlKW7oK33eS3EGWVxxEPV95WRz5TWdFdMrvMVIRgT2UmhwHkLVmmezFB0i7fBY4n6xWtkEsBsypra/4lkmvOl3+jlkgbGDhVfXp+eeg20zPI95X9XR4NwAiKMD00W8zkannSRDUjJPBvMo6vvJZFCa2otnPp/0bAZos9hJ4RXpPsRXDWv73+iJE7YXnvAXIrTOwp1iYHzQsf9ZIjVg4YX0m78fK4AfHtc1s1YSXIMvUREgeWVUynLrfqm+0haRRSXtuRWsgpBacPSspImbtznUcUY7/DOqqM6r+P5YLyHpUstNtnBc9QfYVSRaYmweN2P6X28/r0YYOSLV5/e8nPUkuP3Lzp8FmdqpZ+0Zo= MIME-Version: 1.0 X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: 31cb9e42-4c89-4e80-b05d-08d73d3af1cb X-MS-Exchange-CrossTenant-originalarrivaltime: 19 Sep 2019 19:52:47.3218 (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: UnWykx13Zgn1aTaKcw1m7scDdUEaNuxq8+JOwVeEOp99vOYYL3ssz4xAwSsMl0+CBaGtMGCVDRZVFqwcRwihrg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR12MB2890 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: yPaUcn7CKiYQ2btn9DljCMe7x1787277AA= Content-Language: en-US Content-ID: <22301F714477CF4AAB090D677E330D8B@namprd12.prod.outlook.com> Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1568922769; bh=9ySc5/lzRq56CbrdWAJRhIlvOywern8h9RtEr65YG8k=; h=CC:Content-Type:Date:From:Reply-To:Subject:To; b=U7dv81xBxbUTC5Jm9UREy9CvV9JxYPyXeu6eczpZs3f0QAxndJXPzuGOtiNMbkS/ox9 kikhye3nWiWnRfDlCziPaOtusTlBo1AD3M3Y2qRJ517OWMwtqkGUdWgM6Dz51IbwcvnJp v9UnWqaaowIz8+FcfIkWM8Cl745lkaBC1QM= 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=3D2198 Add support to the #VC exception handler to handle string IO. This requires expanding the IO instruction parsing to recognize string based IO instructions as well as preparing an un-encrypted buffer to be used to transfer (either to or from the guest) the string contents for the IO operation. The SW_EXITINFO2 and SW_SCRATCH fields of the GHCB are set appropriately for the operation. Multiple VMGEXIT invocations may be needed to complete the string IO operation. Cc: Eric Dong Cc: Ray Ni Cc: Laszlo Ersek Signed-off-by: Tom Lendacky --- .../X64/AMDSevVcCommon.c | 82 ++++++++++++++++--- 1 file changed, 70 insertions(+), 12 deletions(-) diff --git a/UefiCpuPkg/Library/CpuExceptionHandlerLib/X64/AMDSevVcCommon.c= b/UefiCpuPkg/Library/CpuExceptionHandlerLib/X64/AMDSevVcCommon.c index 16091fe38f83..ce5514fd0fb6 100644 --- a/UefiCpuPkg/Library/CpuExceptionHandlerLib/X64/AMDSevVcCommon.c +++ b/UefiCpuPkg/Library/CpuExceptionHandlerLib/X64/AMDSevVcCommon.c @@ -305,6 +305,22 @@ IoioExitInfo ( UINT64 ExitInfo =3D 0; =20 switch (*(InstructionData->OpCodes)) { + // INS opcodes + case 0x6C: + case 0x6D: + ExitInfo |=3D IOIO_TYPE_INS; + ExitInfo |=3D IOIO_SEG_ES; + ExitInfo |=3D ((Regs->Rdx & 0xffff) << 16); + break; + + // OUTS opcodes + case 0x6E: + case 0x6F: + ExitInfo |=3D IOIO_TYPE_OUTS; + ExitInfo |=3D IOIO_SEG_DS; + ExitInfo |=3D ((Regs->Rdx & 0xffff) << 16); + break; + // IN immediate opcodes case 0xE4: case 0xE5: @@ -342,6 +358,8 @@ IoioExitInfo ( } =20 switch (*(InstructionData->OpCodes)) { + case 0x6C: + case 0x6E: case 0xE4: case 0xE6: case 0xEC: @@ -388,8 +406,9 @@ IoioExit ( SEV_ES_INSTRUCTION_DATA *InstructionData ) { - UINT64 ExitInfo1; - UINTN Status; + UINT64 ExitInfo1, ExitInfo2; + UINTN Status; + BOOLEAN String; =20 ExitInfo1 =3D IoioExitInfo (Regs, InstructionData); if (!ExitInfo1) { @@ -407,17 +426,56 @@ IoioExit ( Ghcb->SaveArea.Rax =3D Regs->Rax; GhcbSetRegValid (Ghcb, GhcbRax); =20 - Status =3D VmgExit (Ghcb, SvmExitIoioProt, ExitInfo1, 0); - if (Status) { - return Status; - } - - if (ExitInfo1 & IOIO_TYPE_IN) { - if (!GhcbIsRegValid (Ghcb, GhcbRax)) { - VmgExit (Ghcb, SvmExitUnsupported, SvmExitIoioProt, 0); - ASSERT (0); + String =3D (ExitInfo1 & IOIO_TYPE_STR) ? TRUE : FALSE; + if (String) { + UINTN IoBytes, VmgExitBytes; + UINTN GhcbCount, OpCount; + + Status =3D 0; + + IoBytes =3D (ExitInfo1 >> 4) & 0x7; + GhcbCount =3D sizeof (Ghcb->SharedBuffer) / IoBytes; + + OpCount =3D (ExitInfo1 & IOIO_REP) ? Regs->Rcx : 1; + while (OpCount) { + ExitInfo2 =3D MIN (OpCount, GhcbCount); + VmgExitBytes =3D ExitInfo2 * IoBytes; + + if (!(ExitInfo1 & IOIO_TYPE_IN)) { + CopyMem (Ghcb->SharedBuffer, (VOID *) Regs->Rsi, VmgExitBytes); + Regs->Rsi +=3D VmgExitBytes; + } + + Ghcb->SaveArea.SwScratch =3D (UINT64) Ghcb->SharedBuffer; + Status =3D VmgExit (Ghcb, SvmExitIoioProt, ExitInfo1, ExitInfo2); + if (Status) { + return Status; + } + + if (ExitInfo1 & IOIO_TYPE_IN) { + CopyMem ((VOID *) Regs->Rdi, Ghcb->SharedBuffer, VmgExitBytes); + Regs->Rdi +=3D VmgExitBytes; + } + + if (ExitInfo1 & IOIO_REP) { + Regs->Rcx -=3D ExitInfo2; + } + + OpCount -=3D ExitInfo2; + } + } else { + Status =3D VmgExit (Ghcb, SvmExitIoioProt, ExitInfo1, 0); + if (Status) { + return Status; + } + + if (ExitInfo1 & IOIO_TYPE_IN) { + if (!GhcbIsRegValid (Ghcb, GhcbRax)) { + VmgExit (Ghcb, SvmExitUnsupported, SvmExitIoioProt, 0); + ASSERT (0); + } + Regs->Rax =3D Ghcb->SaveArea.Rax; } - Regs->Rax =3D Ghcb->SaveArea.Rax; } =20 return 0; --=20 2.17.1 -=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 (#47654): https://edk2.groups.io/g/devel/message/47654 Mute This Topic: https://groups.io/mt/34203556/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- From nobody Sun May 5 15:05:55 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zoho.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+47655+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 1568922771075305.19276863105006; Thu, 19 Sep 2019 12:52:51 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id bjNXYY1788612x43FkzNbo7W; Thu, 19 Sep 2019 12:52:50 -0700 X-Received: from NAM03-BY2-obe.outbound.protection.outlook.com (NAM03-BY2-obe.outbound.protection.outlook.com [40.107.78.57]) by groups.io with SMTP; Thu, 19 Sep 2019 12:52:49 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=hxz2XhjsT5rxOgJDnpqb6XP1mYjBRF9XLhqcUc2E35RzG2TIIYdfadNxTVJCrAy5BSsjTvTuXXK8tWLOxYHC/2Dt9NsnhPT8zP7hr1smobHY9KHjvjCmJQn085gjhoLmeLOEJLhVASm5mouv+of1Zb+xI6YQ5hf6rojkYSvILYOThjV0i9j9wjg9GcWRKgW7abCmtF5F1tqwDxsnRaA9VzwWFMfSsjU8F2YHl4o7p8TK+qrZdk+VUJ0X2l2wg1dSYWjLVcUx6BZUbfSnuRS7Tl+yo0V603eZjTt0B62YXGiGPbKZ7fzxKr7c6VKt4LhAB/UOtjK656LtaTxUVIByKg== 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=BFsWp4wKhdW5TFigaa6fEcY1iuCs7yqCoEvw/+B2Ukg=; b=j+O0bX7SqE9ztnVz53iEayr4aeRYiEGRaXrKqU80C38MqpmKSEAr+vzpmzK7DDs/S8J/ZMkRof+NxySUpCQUi4sLsWlOKwIa9igmwPGAJSUnf8w2905T8A8Mr+xO0Qsi3YyjGxVr3LgZCsyhsKuziGaBDwgz0IQOhessSmzeydF6ACm+PlefodaIGOWZQ/2Z7YYCahe+gYZ8mrzNDYVZ10k1LXxXPu+4uGQcO/G8P/NqfvO8tjYgxDo7Zbmfd4QcpUMT3km4kUl3x6SEdFfDLbHtJ/PfsVBSogbfWblECbRv8dsmktCIYWtJSYfTTZgHIad74sT+v54ie8lhvAfpHQ== 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 DM6PR12MB3163.namprd12.prod.outlook.com (20.179.104.150) by DM6PR12MB3228.namprd12.prod.outlook.com (20.179.105.96) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2263.13; Thu, 19 Sep 2019 19:52:48 +0000 X-Received: from DM6PR12MB3163.namprd12.prod.outlook.com ([fe80::400e:f0c3:7ca:2fcc]) by DM6PR12MB3163.namprd12.prod.outlook.com ([fe80::400e:f0c3:7ca:2fcc%6]) with mapi id 15.20.2284.009; Thu, 19 Sep 2019 19:52:48 +0000 From: "Lendacky, Thomas" To: "devel@edk2.groups.io" CC: Jordan Justen , Laszlo Ersek , Ard Biesheuvel , Michael D Kinney , Liming Gao , Eric Dong , Ray Ni , "Singh, Brijesh" Subject: [edk2-devel] [RFC PATCH v2 21/44] MdePkg: Add support for the XGETBV instruction Thread-Topic: [RFC PATCH v2 21/44] MdePkg: Add support for the XGETBV instruction Thread-Index: AQHVbyPQn9lGvqvv6EGd5fRiEOXTKQ== Date: Thu, 19 Sep 2019 19:52:48 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: SN4PR0501CA0146.namprd05.prod.outlook.com (2603:10b6:803:2c::24) To DM6PR12MB3163.namprd12.prod.outlook.com (2603:10b6:5:182::22) x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [165.204.78.1] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: e45d9153-6019-41b4-9ba3-08d73d3af27a x-ms-office365-filtering-ht: Tenant x-ms-traffictypediagnostic: DM6PR12MB3228: x-ms-exchange-purlcount: 1 x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:6430; Received-SPF: pass (zoho.com: domain of groups.io designates 66.175.222.12 as permitted sender) client-ip=66.175.222.12; envelope-from=bounce+27952+47655+1787277+3901457@groups.io; helo=web01.groups.io; received-spf: None (protection.outlook.com: amd.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: Zhl/aWkU1KoqXVNmr21yGOf594mqyv0utbkoEFhSzLhxnmUML+bnZkWc0tMamiLKLGfHBFJ+OEx9m0OYJGdcSuWPLt5olBHe7VRqH/ldMU/7LyWIz23ld0n8LiDppjamUt9WW2EMZaMNqTqHTtNApNztj4bHjjAoFJzGzsXQGXq9Rii4wR/twTydstmXC1chScpFNkWmEZadajg6C+3n/+39HnMfGConVU2Ls7+jOW7suoMsnBU31TcCCled05jJO5kTwQzepiJ0Rlbbtcl6nyOthqmBKCORBhSNjWjfh/HnebTPROsJhfcszIMqDs0F/8vK8goUWSy0ab8dAyg2s3fs1xpIYk1U4d6JvBVu68/7o5E7ozZRDQBUFiCGH9RS9+1fNGsJ5qHaELpKQpfs3yCnbw80ZWMoOH25v9HMZXI= MIME-Version: 1.0 X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: e45d9153-6019-41b4-9ba3-08d73d3af27a X-MS-Exchange-CrossTenant-originalarrivaltime: 19 Sep 2019 19:52:48.3982 (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: ko6KYhCqWRTW6kfEK/zygULt6RRkdLkDJRAw+W7MyO6HImafXKd9uo+1EzLI5KvbLK4cPCOv/V8iaeVPQDxx6w== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR12MB3228 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: Gos2Sd8TqEb3Dh2x0v95w2FHx1787277AA= Content-Language: en-US Content-ID: Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1568922770; bh=ij6WwK4w3FThrRtmu5v4JaCUzYHEYmpSY1f/m+9K2cE=; h=CC:Content-Type:Date:From:Reply-To:Subject:To; b=k5aq6aK6oGigGFd55ihft9NTyI2RHCymAsaDVPa5SDN82pb1imnKLPU7DITph/+WtHv k6LhLHxA6a9h3PZkkFRCiCwU60A8y1N6CQOUw/9PQCcQz7FKjhfCYiDa9B5aTjmGtniI7 tzGo6yF39trCFqrHVTKma6PiMY7WYHU+NWg= 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=3D2198 Under SEV-ES, a CPUID instruction requires the current value of the XCR0 register. In order to retrieve that value, the XGETBV instruction needs to be executed. Provide the necessary support to execute the XGETBV instruction. Cc: Michael D Kinney Cc: Liming Gao Signed-off-by: Tom Lendacky --- MdePkg/Library/BaseLib/BaseLib.inf | 2 ++ MdePkg/Include/Library/BaseLib.h | 16 ++++++++++++ MdePkg/Library/BaseLib/Ia32/GccInline.c | 28 ++++++++++++++++++++ MdePkg/Library/BaseLib/X64/GccInline.c | 30 ++++++++++++++++++++++ MdePkg/Library/BaseLib/Ia32/XGetBv.nasm | 31 ++++++++++++++++++++++ MdePkg/Library/BaseLib/X64/XGetBv.nasm | 34 +++++++++++++++++++++++++ 6 files changed, 141 insertions(+) create mode 100644 MdePkg/Library/BaseLib/Ia32/XGetBv.nasm create mode 100644 MdePkg/Library/BaseLib/X64/XGetBv.nasm diff --git a/MdePkg/Library/BaseLib/BaseLib.inf b/MdePkg/Library/BaseLib/Ba= seLib.inf index 14b3f5721101..ea3e284bf8bf 100644 --- a/MdePkg/Library/BaseLib/BaseLib.inf +++ b/MdePkg/Library/BaseLib/BaseLib.inf @@ -153,6 +153,7 @@ [Sources.Ia32] Ia32/EnableCache.c | MSFT Ia32/DisableCache.c | MSFT Ia32/VmgExit.nasm | MSFT + Ia32/XGetBv.nasm | MSFT =20 =20 Ia32/GccInline.c | GCC @@ -288,6 +289,7 @@ [Sources.X64] X64/ReadCr0.nasm| MSFT X64/ReadEflags.nasm| MSFT X64/VmgExit.nasm | MSFT + X64/XGetBv.nasm | MSFT =20 =20 X64/Non-existing.c diff --git a/MdePkg/Include/Library/BaseLib.h b/MdePkg/Include/Library/Base= Lib.h index 80bd5cf57a72..362bc2e05dbc 100644 --- a/MdePkg/Include/Library/BaseLib.h +++ b/MdePkg/Include/Library/BaseLib.h @@ -7893,6 +7893,22 @@ AsmVmgExit ( VOID ); =20 +/** + Executes a XGETBV instruction + + Executes a XGETBV instruction. This function is only available on IA-32 = and + x64. + + @param[in] Index Extended control register index + + @retval The current value of the extended control regist= er +**/ +UINT64 +EFIAPI +AsmXGetBv ( + IN UINT32 Index + ); + =20 /** Patch the immediate operand of an IA32 or X64 instruction such that the = byte, diff --git a/MdePkg/Library/BaseLib/Ia32/GccInline.c b/MdePkg/Library/BaseL= ib/Ia32/GccInline.c index 55d2e12bcdc9..9db5e48d9899 100644 --- a/MdePkg/Library/BaseLib/Ia32/GccInline.c +++ b/MdePkg/Library/BaseLib/Ia32/GccInline.c @@ -1780,3 +1780,31 @@ AsmVmgExit ( } =20 =20 +/** + Executes a XGETBV instruction + + Executes a XGETBV instruction. This function is only available on IA-32 = and + x64. + + @param[in] Index Extended control register index + + @retval The current value of the extended control regist= er +**/ +UINT64 +EFIAPI +AsmXGetBv ( + IN UINT32 Index + ) +{ + UINT64 Data; + + __asm__ __volatile__ ( + "xgetbv" + : "=3DA" (Data) + : "c" (Index) + ); + + return Data; +} + + diff --git a/MdePkg/Library/BaseLib/X64/GccInline.c b/MdePkg/Library/BaseLi= b/X64/GccInline.c index 17539caa0798..0169382978ac 100644 --- a/MdePkg/Library/BaseLib/X64/GccInline.c +++ b/MdePkg/Library/BaseLib/X64/GccInline.c @@ -1815,3 +1815,33 @@ AsmVmgExit ( } =20 =20 +/** + Executes a XGETBV instruction + + Executes a XGETBV instruction. This function is only available on IA-32 = and + x64. + + @param[in] Index Extended control register index + + @retval The current value of the extended control regist= er +**/ +UINT64 +EFIAPI +AsmXGetBv ( + IN UINT32 Index + ) +{ + UINT32 LowData; + UINT32 HighData; + + __asm__ __volatile__ ( + "xgetbv" + : "=3Da" (LowData), + "=3Dd" (HighData) + : "c" (Index) + ); + + return (((UINT64)HighData) << 32) | LowData; +} + + diff --git a/MdePkg/Library/BaseLib/Ia32/XGetBv.nasm b/MdePkg/Library/BaseL= ib/Ia32/XGetBv.nasm new file mode 100644 index 000000000000..8d14ba03d4a8 --- /dev/null +++ b/MdePkg/Library/BaseLib/Ia32/XGetBv.nasm @@ -0,0 +1,31 @@ +;-------------------------------------------------------------------------= ----- +; +; Copyright (c) 2019, Advanced Micro Device, Inc. All rights reserved.
+; SPDX-License-Identifier: BSD-2-Clause-Patent +; +; Module Name: +; +; XGetBv.Asm +; +; Abstract: +; +; AsmXgetBv function +; +; Notes: +; +;-------------------------------------------------------------------------= ----- + + SECTION .text + +;-------------------------------------------------------------------------= ----- +; UINT64 +; EFIAPI +; AsmXGetBv ( +; IN UINT32 Index +; ); +;-------------------------------------------------------------------------= ----- +global ASM_PFX(AsmXGetBv) +ASM_PFX(AsmXGetBv): + mov ecx, [esp + 4] + xgetbv + ret diff --git a/MdePkg/Library/BaseLib/X64/XGetBv.nasm b/MdePkg/Library/BaseLi= b/X64/XGetBv.nasm new file mode 100644 index 000000000000..239ecb58ab13 --- /dev/null +++ b/MdePkg/Library/BaseLib/X64/XGetBv.nasm @@ -0,0 +1,34 @@ +;-------------------------------------------------------------------------= ----- +; +; Copyright (c) 2019, Advanced Micro Device, Inc. All rights reserved.
+; SPDX-License-Identifier: BSD-2-Clause-Patent +; +; Module Name: +; +; XGetBv.Asm +; +; Abstract: +; +; AsmXgetBv function +; +; Notes: +; +;-------------------------------------------------------------------------= ----- + + DEFAULT REL + SECTION .text + +;-------------------------------------------------------------------------= ----- +; UINT64 +; EFIAPI +; AsmXGetBv ( +; IN UINT32 Index +; ); +;-------------------------------------------------------------------------= ----- +global ASM_PFX(AsmXGetBv) +ASM_PFX(AsmXGetBv): + xgetbv + shl rdx, 0x20 + or rax, rdx + ret + --=20 2.17.1 -=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 (#47655): https://edk2.groups.io/g/devel/message/47655 Mute This Topic: https://groups.io/mt/34203557/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- From nobody Sun May 5 15:05:55 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zoho.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+47656+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 1568922771996936.8950821898479; Thu, 19 Sep 2019 12:52:51 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id 7n5zYY1788612xiBtHYljij8; Thu, 19 Sep 2019 12:52:51 -0700 X-Received: from NAM02-CY1-obe.outbound.protection.outlook.com (NAM02-CY1-obe.outbound.protection.outlook.com [40.107.76.49]) by groups.io with SMTP; Thu, 19 Sep 2019 12:52:51 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=USkvWwCAQmmXNEKMRm2tpFFfqkTwhpJr9cVa0YbXGFHJYsR5/S4Ko1u/kM2r9FvnDxPJQVbTTcKhA9xVyLUwOIjSxZifaW+hMb8X2my1w/4/b8pN0Y+dVrPutRH7PjPjK5qpN497G3Y3H6Pxdl1BUvBPjIN/UVSq/tPyeoYsnVX/PUL5M1mAnXwWDXgOWclKwOLQs7DwcBMKIJKQmwh6qQD+Q0RKBPwhGpPrYxFPY+L8LR7vHpv1iPNpRCE4vc8w4M67bHQCAN1rD9pS1n46flDIy09X5maMYQ/8izK7OqZ+hKrySKfaKvt8BfzOjM9/28+4uCVpdcgHC8h2pC0wow== 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=P4SgyvLye74Drs3ZI69Q4qShAxBWgxZ4grw0N+Wr8ik=; b=jJ8BGrDcjYc17jEDGh2ec7O07oaf33EexB04EgEWWarH/uzVLXgytfktwnWqI2ve+FAqATaFI/4eFMAabocF2HLU6khSxsHoHpm3tKqd/XlW2y+Dds5BJpcN3BIbSpsMwgNWeGLOJR6ih1APY+QoC8hGvDv4PtPyZIkGAK+mTZ0iODIoGeecwrEaIDzwquTRyLnCHCgIQLkrESry7nW77VLBetFl5WVn+ej1Da1XKVpTgBmvvD6LZJq9byxKm9+2lIj+86aO2pzAPVDK3nMOpWxCANczf1AkkQk7iIftOl5j6hlDiJF0zsMmnMD/o8hTNh9l0h74TSH4f1bg/k1/gg== 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 DM6PR12MB3163.namprd12.prod.outlook.com (20.179.104.150) by DM6PR12MB3228.namprd12.prod.outlook.com (20.179.105.96) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2263.13; Thu, 19 Sep 2019 19:52:49 +0000 X-Received: from DM6PR12MB3163.namprd12.prod.outlook.com ([fe80::400e:f0c3:7ca:2fcc]) by DM6PR12MB3163.namprd12.prod.outlook.com ([fe80::400e:f0c3:7ca:2fcc%6]) with mapi id 15.20.2284.009; Thu, 19 Sep 2019 19:52:49 +0000 From: "Lendacky, Thomas" To: "devel@edk2.groups.io" CC: Jordan Justen , Laszlo Ersek , Ard Biesheuvel , Michael D Kinney , Liming Gao , Eric Dong , Ray Ni , "Singh, Brijesh" Subject: [edk2-devel] [RFC PATCH v2 22/44] UefiCpuPkg/CpuExceptionHandler: Add support for CPUID NAE events Thread-Topic: [RFC PATCH v2 22/44] UefiCpuPkg/CpuExceptionHandler: Add support for CPUID NAE events Thread-Index: AQHVbyPQg7wDiqlcekGwYsk3fq6D4w== Date: Thu, 19 Sep 2019 19:52:49 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: SN4PR0501CA0146.namprd05.prod.outlook.com (2603:10b6:803:2c::24) To DM6PR12MB3163.namprd12.prod.outlook.com (2603:10b6:5:182::22) x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [165.204.78.1] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 4e8731fa-ab63-49e3-25a5-08d73d3af343 x-ms-office365-filtering-ht: Tenant x-ms-traffictypediagnostic: DM6PR12MB3228: x-ms-exchange-purlcount: 1 x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:6108; Received-SPF: pass (zoho.com: domain of groups.io designates 66.175.222.12 as permitted sender) client-ip=66.175.222.12; envelope-from=bounce+27952+47656+1787277+3901457@groups.io; helo=web01.groups.io; received-spf: None (protection.outlook.com: amd.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: mfp1h2Y9aEKZOJCXEL9NGwDPImcz7FM+huT604T61YMsY3CPpyXhd5Ml5T0+fEDAlTc2zR4jWRIFCHlNYgC9El532Xr4QrUtKYbP5dl75CmA1iHH7I8oRrncQldNWxGHupQNdC6grzMwGC32CsEW42wbyRPXLRlrc7I0eY8llOO/mjSSCMA8kcdta//bWNT5yWlNaCZphN7I3S1xMX8Of22mcZ42IR+BVDcyN+xkuWALTEBDwpTS1x6AL3pmdg1N4GqEMza7qAjXbUQvieGH/i9FHd3F5hfMOwZ3lTyS6Jw/OzLOzVGXV1G8W7RioXx9QdaDMV5wV+xmbCX0RdT8MiuUAXut8daDmGJJ/dAC3wMNJBZC4AQ02u8uAJC3QwVFaT9PcR0yHD6lMDdZ7RM248xpyea1zCI/nGsvdH/SrEQ= MIME-Version: 1.0 X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: 4e8731fa-ab63-49e3-25a5-08d73d3af343 X-MS-Exchange-CrossTenant-originalarrivaltime: 19 Sep 2019 19:52:49.7564 (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: PQbEDyrw/2k1Y9PPVC3/w03CDddVNXUP3BN3/AA1bmGtaI1J8V/VVg8B1KdAsnG/RCt8gBO9dYrz/yIpbMjz3w== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR12MB3228 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: GOzBOOpPVTS6vbJ2Timz18Bhx1787277AA= Content-Language: en-US Content-ID: <8BB5DCCC3441D04F946E36136BF1459D@namprd12.prod.outlook.com> Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1568922771; bh=KD87uYB0c+aw7MXk2Uk3m/NcRV5nrp8cOqoIyk5T7m8=; h=CC:Content-Type:Date:From:Reply-To:Subject:To; b=O7NSc/yL6uQsFuRMTCz56/Im7aPON3pYb4JPllqyUy1FS40kOUdyWEMO++wxhKVB1k8 PaWerVcgGhSnH1O/jakzr1KNXmRksnMsQzrawEhezoFSixcXA1JFcad9LpH5ZSxtx3MvM ZBH3AokrRlkg7M9NyWfJJaCtPnbLeb9kkzw= 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=3D2198 Under SEV-ES, a CPUID intercept generates a #VC exception. VMGEXIT must be used to allow the hypervisor to handle this intercept. Add support to construct the required GHCB values to support a CPUID NAE event. Additionally, CPUID 0x0000_000d requires XCR0 to be supplied in the GHCB, so add support to issue the XGETBV instruction. Cc: Eric Dong Cc: Ray Ni Cc: Laszlo Ersek Signed-off-by: Tom Lendacky --- .../X64/AMDSevVcCommon.c | 45 +++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/UefiCpuPkg/Library/CpuExceptionHandlerLib/X64/AMDSevVcCommon.c= b/UefiCpuPkg/Library/CpuExceptionHandlerLib/X64/AMDSevVcCommon.c index ce5514fd0fb6..29119ba863d3 100644 --- a/UefiCpuPkg/Library/CpuExceptionHandlerLib/X64/AMDSevVcCommon.c +++ b/UefiCpuPkg/Library/CpuExceptionHandlerLib/X64/AMDSevVcCommon.c @@ -4,6 +4,8 @@ #include #include "AMDSevVcCommon.h" =20 +#define CR4_OSXSAVE (1 << 18) + typedef enum { LongMode64Bit =3D 0, LongModeCompat32Bit, @@ -481,6 +483,45 @@ IoioExit ( return 0; } =20 +STATIC +UINTN +CpuidExit ( + GHCB *Ghcb, + EFI_SYSTEM_CONTEXT_X64 *Regs, + SEV_ES_INSTRUCTION_DATA *InstructionData + ) +{ + UINTN Status; + + Ghcb->SaveArea.Rax =3D Regs->Rax; + GhcbSetRegValid (Ghcb, GhcbRax); + Ghcb->SaveArea.Rcx =3D Regs->Rcx; + GhcbSetRegValid (Ghcb, GhcbRcx); + if (Regs->Rax =3D=3D 0x0000000d) { + Ghcb->SaveArea.XCr0 =3D (AsmReadCr4 () & CR4_OSXSAVE) ? AsmXGetBv (0) = : 1; + GhcbSetRegValid (Ghcb, GhcbXCr0); + } + + Status =3D VmgExit (Ghcb, SvmExitCpuid, 0, 0); + if (Status) { + return Status; + } + + if (!GhcbIsRegValid (Ghcb, GhcbRax) || + !GhcbIsRegValid (Ghcb, GhcbRbx) || + !GhcbIsRegValid (Ghcb, GhcbRcx) || + !GhcbIsRegValid (Ghcb, GhcbRdx)) { + VmgExit (Ghcb, SvmExitUnsupported, SvmExitCpuid, 0); + ASSERT (0); + } + Regs->Rax =3D Ghcb->SaveArea.Rax; + Regs->Rbx =3D Ghcb->SaveArea.Rbx; + Regs->Rcx =3D Ghcb->SaveArea.Rcx; + Regs->Rdx =3D Ghcb->SaveArea.Rdx; + + return 0; +} + UINTN DoVcCommon ( GHCB *Ghcb, @@ -497,6 +538,10 @@ DoVcCommon ( =20 ExitCode =3D Regs->ExceptionData; switch (ExitCode) { + case SvmExitCpuid: + NaeExit =3D CpuidExit; + break; + case SvmExitIoioProt: NaeExit =3D IoioExit; break; --=20 2.17.1 -=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 (#47656): https://edk2.groups.io/g/devel/message/47656 Mute This Topic: https://groups.io/mt/34203559/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- From nobody Sun May 5 15:05:55 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zoho.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+47657+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 1568922772979742.9077417370692; Thu, 19 Sep 2019 12:52:52 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id PaOnYY1788612x0uOsMbTc1J; Thu, 19 Sep 2019 12:52:52 -0700 X-Received: from NAM02-CY1-obe.outbound.protection.outlook.com (NAM02-CY1-obe.outbound.protection.outlook.com [40.107.76.50]) by groups.io with SMTP; Thu, 19 Sep 2019 12:52:52 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Zi2Tqzox2Tkf/Xff9efcqFf2FFn7yCZubRF6SyboSyTw5aCtWslwFyQEA4hY5dU3USktThtBOEPXqg7mfQO7YMNYAcnR3BMbF0vsCFjnyBJzeBSrYXIMzofv0mEf1A9H2TNdoCeH9++Led5J6h2DUJnQ1tEaIsSrQu/wYALWCjDuK1df3+oW0WhqCqf22/a7WnpEITlmO8bE2eR9ryZ0WovQ8Yf12UopWR7wXXgGW5gSy9Vo5isL/y6DvglSFjczMDWaJgsqifSViR1PlMS4ikgdKg/FzOuayND9JupaD1uIT9b6gbNHMEi9W+XPqjCI17DTJI4um+CeF0JICl4rBQ== 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=0FZE6GbvXuNTQ15XeXAtxjUk7TiNySG6RPQP2bjVSd0=; b=na4OKHgiJ0EOSg7fKjFmk8vi8X/rYf0yOVrlhMhlRhbnrG9t4MtwkFi/pviK3FgSH8KTLVqa2yRu12YosClxtz8mbj5ExqIw8YTajDCIULi3Z5vAX+zxZ3kMh2gRDgvk7Zt2GuGY2ImeMI1U6TudvS+nT0y/5wsKDgGn+C5XsfUo7sGvDzzUFEj/TXZUYrY2p/R1W1JFhbGyw++DVtEeCzY/yFJc+ME7iVO59DVHCmDoAD3BzKtlCMkOuRnnTajWxROxbqh+ZSm29siMaK6Z1njG8XH8ulbY32L/5BK+8l4gwQpUx2MMXCmdASalzvtyumF7E/FMOjeFNBV9Ks3wrQ== 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 DM6PR12MB3163.namprd12.prod.outlook.com (20.179.104.150) by DM6PR12MB3228.namprd12.prod.outlook.com (20.179.105.96) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2263.13; Thu, 19 Sep 2019 19:52:50 +0000 X-Received: from DM6PR12MB3163.namprd12.prod.outlook.com ([fe80::400e:f0c3:7ca:2fcc]) by DM6PR12MB3163.namprd12.prod.outlook.com ([fe80::400e:f0c3:7ca:2fcc%6]) with mapi id 15.20.2284.009; Thu, 19 Sep 2019 19:52:50 +0000 From: "Lendacky, Thomas" To: "devel@edk2.groups.io" CC: Jordan Justen , Laszlo Ersek , Ard Biesheuvel , Michael D Kinney , Liming Gao , Eric Dong , Ray Ni , "Singh, Brijesh" Subject: [edk2-devel] [RFC PATCH v2 23/44] UefiCpuPkg/CpuExceptionHandler: Add support for MSR_PROT NAE events Thread-Topic: [RFC PATCH v2 23/44] UefiCpuPkg/CpuExceptionHandler: Add support for MSR_PROT NAE events Thread-Index: AQHVbyPRGRB3SH6iw0G/RYA62qqL5w== Date: Thu, 19 Sep 2019 19:52:50 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: SN4PR0501CA0146.namprd05.prod.outlook.com (2603:10b6:803:2c::24) To DM6PR12MB3163.namprd12.prod.outlook.com (2603:10b6:5:182::22) x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [165.204.78.1] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 3c416291-91f6-4290-04b0-08d73d3af3e6 x-ms-office365-filtering-ht: Tenant x-ms-traffictypediagnostic: DM6PR12MB3228: x-ms-exchange-purlcount: 1 x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:6790; Received-SPF: pass (zoho.com: domain of groups.io designates 66.175.222.12 as permitted sender) client-ip=66.175.222.12; envelope-from=bounce+27952+47657+1787277+3901457@groups.io; helo=web01.groups.io; received-spf: None (protection.outlook.com: amd.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: h90bW8g+FSgyFNi9o7wGRndNfnEDiDlbOkfZOVgkmTL92zdBjCIRidTnk4/VIEIMHsZHH5NGpJb9hshMQ/Kg0EUkm1hQrv5eDDScEbajAvynSdaH01y9K7NNLlZ6TvQYUVBdPB7e9OkibJL9+qPyKd924D7IQkr827FyYUHgRJhB4kf0fsLOObEhDDL/X0x5GkaGUZSWgIbu/9GPmFJ2Pe2DhoVFs6XKjQYsR27c+XDd4S2c6L4UObeBIS05HhqCyZqE6dB3DWlqFz3Nyv7Gh8BCaMKWQ9R/KMtL32roWu8GdK3Z4YzbhKAvP2COK6qvGUzZY0lRYZS0+Yo5QbYBAvChWRFHSmdXSCKzUYvzr72hPKN8hA9nJ10khqpvyZjrMQ8M8Ibgq5IJ7utf0Ap9spIx6LFlyGjWgVPQDNSgE54= MIME-Version: 1.0 X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: 3c416291-91f6-4290-04b0-08d73d3af3e6 X-MS-Exchange-CrossTenant-originalarrivaltime: 19 Sep 2019 19:52:50.8048 (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: rKhRL+dXiijS4/CbJn/orF7anOHE4HE4B+ylq7uxX5jYH5RwIxhN9akvg8p7S7tKmd8y60U3+qj/aj370mUvRA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR12MB3228 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: 4josDsC69elWvb1O7juunMQIx1787277AA= Content-Language: en-US Content-ID: <03A5C9DB0B9AE74F8046100CE67A4647@namprd12.prod.outlook.com> Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1568922772; bh=pgcZfxMzKtr7hDLR9CbgAZ1rg6euQa76XASHM5sHKaA=; h=CC:Content-Type:Date:From:Reply-To:Subject:To; b=dBOSdwdA3IA/Z9f9hJHFUmBpk/OgCN4QOQllAC78czmY9Fvia2BcgSuBqTa2QbPsOeZ 6l65fdv/fzGfpbNZKNr1L8MsNdW+p5On2PSUGHnTFF5AstwNC5N8scemh9Eks2JS4FevW AskzUIZI4PYfqCPE6/MKhsHWAwj2qpaBiJI= 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=3D2198 Under SEV-ES, a MSR_PROT intercept generates a #VC exception. VMGEXIT must be used to allow the hypervisor to handle this intercept. Add support to construct the required GHCB values to support an MSR_PROT NAE event. Parse the instruction that generated the #VC exception to determine whether it is RDMSR or WRMSR, setting the required register register values in the GHCB and creating the proper SW_EXIT_INFO1 value in the GHCB. Cc: Eric Dong Cc: Ray Ni Cc: Laszlo Ersek Signed-off-by: Tom Lendacky --- .../X64/AMDSevVcCommon.c | 52 +++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/UefiCpuPkg/Library/CpuExceptionHandlerLib/X64/AMDSevVcCommon.c= b/UefiCpuPkg/Library/CpuExceptionHandlerLib/X64/AMDSevVcCommon.c index 29119ba863d3..748883419752 100644 --- a/UefiCpuPkg/Library/CpuExceptionHandlerLib/X64/AMDSevVcCommon.c +++ b/UefiCpuPkg/Library/CpuExceptionHandlerLib/X64/AMDSevVcCommon.c @@ -278,6 +278,54 @@ UnsupportedExit ( return Status; } =20 +STATIC +UINTN +MsrExit ( + GHCB *Ghcb, + EFI_SYSTEM_CONTEXT_X64 *Regs, + SEV_ES_INSTRUCTION_DATA *InstructionData + ) +{ + UINT64 ExitInfo1; + UINTN Status; + + ExitInfo1 =3D 0; + + switch (*(InstructionData->OpCodes + 1)) { + case 0x30: // WRMSR + ExitInfo1 =3D 1; + Ghcb->SaveArea.Rax =3D Regs->Rax; + GhcbSetRegValid (Ghcb, GhcbRax); + Ghcb->SaveArea.Rdx =3D Regs->Rdx; + GhcbSetRegValid (Ghcb, GhcbRdx); + /* Fallthrough */ + case 0x32: // RDMSR + Ghcb->SaveArea.Rcx =3D Regs->Rcx; + GhcbSetRegValid (Ghcb, GhcbRcx); + break; + default: + VmgExit (Ghcb, SvmExitUnsupported, SvmExitMsr, 0); + ASSERT (0); + } + + Status =3D VmgExit (Ghcb, SvmExitMsr, ExitInfo1, 0); + if (Status) { + return Status; + } + + if (!ExitInfo1) { + if (!GhcbIsRegValid (Ghcb, GhcbRax) || + !GhcbIsRegValid (Ghcb, GhcbRdx)) { + VmgExit (Ghcb, SvmExitUnsupported, SvmExitMsr, 0); + ASSERT (0); + } + Regs->Rax =3D Ghcb->SaveArea.Rax; + Regs->Rdx =3D Ghcb->SaveArea.Rdx; + } + + return 0; +} + #define IOIO_TYPE_STR (1 << 2) #define IOIO_TYPE_IN 1 #define IOIO_TYPE_INS (IOIO_TYPE_IN | IOIO_TYPE_STR) @@ -546,6 +594,10 @@ DoVcCommon ( NaeExit =3D IoioExit; break; =20 + case SvmExitMsr: + NaeExit =3D MsrExit; + break; + default: NaeExit =3D UnsupportedExit; } --=20 2.17.1 -=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 (#47657): https://edk2.groups.io/g/devel/message/47657 Mute This Topic: https://groups.io/mt/34203560/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- From nobody Sun May 5 15:05:55 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zoho.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+47658+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 1568922774766577.225866724434; Thu, 19 Sep 2019 12:52:54 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id yuOaYY1788612xmu3J1x2Do3; Thu, 19 Sep 2019 12:52:53 -0700 X-Received: from NAM03-BY2-obe.outbound.protection.outlook.com (NAM03-BY2-obe.outbound.protection.outlook.com [40.107.78.57]) by groups.io with SMTP; Thu, 19 Sep 2019 12:52:53 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=KeK1kr00uR6tz5IKMzU/VRQFppGdW/MGGhRUvsQOx2xvZuXvMY4zdw8pxhgTV1gmcc1P+Z0tf6tFBgiulhGOKfsaPLMn6ZKIb7+wQgsq8D3jsJEq8rkm00EBaM4yC4XX4EoE8JvqKgUgsG9LUuaosDfJCEHO3AmVtVkRRvflIepSTJm7adi6AbfCt6IOrDkYOpkrbXduhvOF54tOM/2+4wlGQNY4d6eS4x/Y40KVRcLyGkAiaVGomS8huewLzPYRbUCTKh6WqM+cWm4rp55FoO/Km+wPfDiTOM7KJLhwIv33CU8mu8dlYVZv4WG1ZeWdqxwFmEq1CZvA4PaKSTKVcw== 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=D83X3F1MNHerDyvUD7Yf19+P9PnEPm79UFvqjBMxd0o=; b=DN3bRtR9PPQV3vQGcvTHqVe6z9kmHAjEKwvOfjnFawzk+Z6I7d8GC3EGYIvnaIi5LHWwlKN+rT23zu4w8E4dquQyNrWcOf9fQbEcpED1avtjpk5ae2oIhraPLFT1gmlYC5rGX6W4cedUDZcHJ+e/5rcCbQZnvNi2w6erTb/Pj3zNTNQTsnAYOGoMVMagTCSHQbyBKfVuBD2oQPpsfs30046GVFptcYhQ4AkBVBGkZtdAE6i16cO8lgFzBD2YOdt8Ncna0+PhvTIBPvD2OeaKAesrlZH8H0BqyV8OiBBSknoociVNqfNKqrQD/9yp971nESOmCHZ88bUvdvsl75jnDA== 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 DM6PR12MB3163.namprd12.prod.outlook.com (20.179.104.150) by DM6PR12MB3228.namprd12.prod.outlook.com (20.179.105.96) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2263.13; Thu, 19 Sep 2019 19:52:52 +0000 X-Received: from DM6PR12MB3163.namprd12.prod.outlook.com ([fe80::400e:f0c3:7ca:2fcc]) by DM6PR12MB3163.namprd12.prod.outlook.com ([fe80::400e:f0c3:7ca:2fcc%6]) with mapi id 15.20.2284.009; Thu, 19 Sep 2019 19:52:52 +0000 From: "Lendacky, Thomas" To: "devel@edk2.groups.io" CC: Jordan Justen , Laszlo Ersek , Ard Biesheuvel , Michael D Kinney , Liming Gao , Eric Dong , Ray Ni , "Singh, Brijesh" Subject: [edk2-devel] [RFC PATCH v2 24/44] UefiCpuPkg/CpuExceptionHandler: Add support for NPF NAE events (MMIO) Thread-Topic: [RFC PATCH v2 24/44] UefiCpuPkg/CpuExceptionHandler: Add support for NPF NAE events (MMIO) Thread-Index: AQHVbyPSB9A8YEgc+km6EXi+Rfimnw== Date: Thu, 19 Sep 2019 19:52:51 +0000 Message-ID: <47fc4526590445d18093cf6fcda057da2c909412.1568922729.git.thomas.lendacky@amd.com> References: In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: SN4PR0501CA0146.namprd05.prod.outlook.com (2603:10b6:803:2c::24) To DM6PR12MB3163.namprd12.prod.outlook.com (2603:10b6:5:182::22) x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [165.204.78.1] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: da2b485e-6b1e-4ce9-58d7-08d73d3af489 x-ms-office365-filtering-ht: Tenant x-ms-traffictypediagnostic: DM6PR12MB3228: x-ms-exchange-purlcount: 1 x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:7219; Received-SPF: pass (zoho.com: domain of groups.io designates 66.175.222.12 as permitted sender) client-ip=66.175.222.12; envelope-from=bounce+27952+47658+1787277+3901457@groups.io; helo=web01.groups.io; received-spf: None (protection.outlook.com: amd.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: jUHXgZUC+VYq3i7c2Q4NgAkv22lU4Vz2NUzjtmUZmO/O1zIQmESN2BFHJkBCkT9JsXypsWjxbjHW7x/mJKlon78vPNqFcdVn2FGMed69DkJrMjUX/XBHocq+jVDQoCbHkiuts7Z0QkIMWpxEM4GrB4cHsDBSfVU4oKgwjOB9q0CovKWZrkuJ7gZvxJ/e9G4kl+whBKFaef6S/7lAaYrFtnCpf9SWPDqjbdwG2YNe8Hn+wO9+uJJZmJEQvLpGj+DhOMhXx9TDQtMdwz3UWHZUbiDQ2+n/WC78X2A09k/IVnL472eeWHn3PYFGqKgZva8JjvrlY+X7NZWMctdlotDXonBjZunidHrSsntBGhKzOk86j/sDlTR2WLlmI3j395a9tJMI8Vn2cow+kc93WWILdom/YujlmsI/lFlSGuNKlmI= MIME-Version: 1.0 X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: da2b485e-6b1e-4ce9-58d7-08d73d3af489 X-MS-Exchange-CrossTenant-originalarrivaltime: 19 Sep 2019 19:52:51.8502 (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: SnB4TXPDd16IBdIs95MtDJi3XW57NKkRKn48WPjH6iD/RbCFuPmQTJY5+eHH3eJBzrS1A9YEn/7Jlzwb8kZU1g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR12MB3228 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: rxZz8wiV4exJEQtOAQvqCk69x1787277AA= Content-Language: en-US Content-ID: Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1568922773; bh=B9YTpDNTLDBxs9A3SqxJsl0inOYUh9XFywBwRWw/6Tw=; h=CC:Content-Type:Date:From:Reply-To:Subject:To; b=dVeFBZlZR9NN33FHf3Q4m7/qhFV7gSQSOVElrICS/jR54lJBwLzG/RVDnigID7T3VKM N7wnZv8nV7yiX0ElwTzACnuJpZ2JEhIKAN+DmL7FP5GvGkPTkrSBUEzXyxjTEdNQ3j4DN HukMiUeNwmEtSoVRIq7975NQAdv2BgB26Hs= 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=3D2198 Under SEV-ES, a NPF intercept for an NPT entry with a reserved bit set generates a #VC exception. This condition is assumed to be an MMIO access. VMGEXIT must be used to allow the hypervisor to handle this intercept. Add support to construct the required GHCB values to support a NPF NAE event for MMIO. Parse the instruction that generated the #VC exception, setting the required register values in the GHCB and creating the proper SW_EXIT_INFO1, SW_EXITINFO2 and SW_SCRATCH values in the GHCB. Cc: Eric Dong Cc: Ray Ni Cc: Laszlo Ersek Signed-off-by: Tom Lendacky --- .../X64/AMDSevVcCommon.c | 285 +++++++++++++++++- 1 file changed, 283 insertions(+), 2 deletions(-) diff --git a/UefiCpuPkg/Library/CpuExceptionHandlerLib/X64/AMDSevVcCommon.c= b/UefiCpuPkg/Library/CpuExceptionHandlerLib/X64/AMDSevVcCommon.c index 748883419752..aac460c388e3 100644 --- a/UefiCpuPkg/Library/CpuExceptionHandlerLib/X64/AMDSevVcCommon.c +++ b/UefiCpuPkg/Library/CpuExceptionHandlerLib/X64/AMDSevVcCommon.c @@ -79,8 +79,8 @@ typedef struct { UINT8 Scale; } Sib; =20 - UINTN RegData; - UINTN RmData; + INTN RegData; + INTN RmData; } SEV_ES_INSTRUCTION_OPCODE_EXT; =20 typedef struct { @@ -152,6 +152,198 @@ GhcbSetRegValid ( Ghcb->SaveArea.ValidBitmap[RegIndex] |=3D (1 << RegBit); } =20 +STATIC +INT64 * +GetRegisterPointer ( + EFI_SYSTEM_CONTEXT_X64 *Regs, + UINT8 Register + ) +{ + UINT64 *Reg; + + switch (Register) { + case 0: + Reg =3D &Regs->Rax; + break; + case 1: + Reg =3D &Regs->Rcx; + break; + case 2: + Reg =3D &Regs->Rdx; + break; + case 3: + Reg =3D &Regs->Rbx; + break; + case 4: + Reg =3D &Regs->Rsp; + break; + case 5: + Reg =3D &Regs->Rbp; + break; + case 6: + Reg =3D &Regs->Rsi; + break; + case 7: + Reg =3D &Regs->Rdi; + break; + case 8: + Reg =3D &Regs->R8; + break; + case 9: + Reg =3D &Regs->R9; + break; + case 10: + Reg =3D &Regs->R10; + break; + case 11: + Reg =3D &Regs->R11; + break; + case 12: + Reg =3D &Regs->R12; + break; + case 13: + Reg =3D &Regs->R13; + break; + case 14: + Reg =3D &Regs->R14; + break; + case 15: + Reg =3D &Regs->R15; + break; + default: + Reg =3D NULL; + } + ASSERT (Reg); + + return (INT64 *) Reg; +} + +STATIC +VOID +UpdateForDisplacement ( + SEV_ES_INSTRUCTION_DATA *InstructionData, + UINTN Size + ) +{ + InstructionData->DisplacementSize =3D Size; + InstructionData->Immediate +=3D Size; + InstructionData->End +=3D Size; +} + +STATIC +BOOLEAN +IsRipRelative ( + SEV_ES_INSTRUCTION_DATA *InstructionData + ) +{ + SEV_ES_INSTRUCTION_OPCODE_EXT *Ext =3D &InstructionData->Ext; + + return ((InstructionData =3D=3D LongMode64Bit) && + (Ext->ModRm.Mod =3D=3D 0) && + (Ext->ModRm.Rm =3D=3D 5) && + (InstructionData->SibPresent =3D=3D FALSE)); +} + +STATIC +UINTN +GetEffectiveMemoryAddress ( + EFI_SYSTEM_CONTEXT_X64 *Regs, + SEV_ES_INSTRUCTION_DATA *InstructionData + ) +{ + SEV_ES_INSTRUCTION_OPCODE_EXT *Ext =3D &InstructionData->Ext; + INTN EffectiveAddress =3D 0; + + if (IsRipRelative (InstructionData)) { + /* RIP-relative displacement is a 32-bit signed value */ + INT32 RipRelative =3D *(INT32 *) InstructionData->Displacement; + + UpdateForDisplacement (InstructionData, 4); + return (UINTN) ((INTN) Regs->Rip + RipRelative); + } + + switch (Ext->ModRm.Mod) { + case 1: + UpdateForDisplacement (InstructionData, 1); + EffectiveAddress +=3D (INT8) (*(INT8 *) (InstructionData->Displacement= )); + break; + case 2: + switch (InstructionData->AddrSize) { + case Size16Bits: + UpdateForDisplacement (InstructionData, 2); + EffectiveAddress +=3D (INT16) (*(INT16 *) (InstructionData->Displace= ment)); + break; + default: + UpdateForDisplacement (InstructionData, 4); + EffectiveAddress +=3D (INT32) (*(INT32 *) (InstructionData->Displace= ment)); + break; + } + break; + } + + if (InstructionData->SibPresent) { + if (Ext->Sib.Index !=3D 4) { + EffectiveAddress +=3D (*GetRegisterPointer (Regs, Ext->Sib.Index) <<= Ext->Sib.Scale); + } + + if ((Ext->Sib.Base !=3D 5) || Ext->ModRm.Mod) { + EffectiveAddress +=3D *GetRegisterPointer (Regs, Ext->Sib.Base); + } else { + UpdateForDisplacement (InstructionData, 4); + EffectiveAddress +=3D (INT32) (*(INT32 *) (InstructionData->Displace= ment)); + } + } else { + EffectiveAddress +=3D *GetRegisterPointer (Regs, Ext->ModRm.Rm); + } + + return (UINTN) EffectiveAddress; +} + +STATIC +VOID +DecodeModRm ( + EFI_SYSTEM_CONTEXT_X64 *Regs, + SEV_ES_INSTRUCTION_DATA *InstructionData + ) +{ + SEV_ES_INSTRUCTION_REX_PREFIX *RexPrefix =3D &InstructionData->RexPrefi= x; + SEV_ES_INSTRUCTION_OPCODE_EXT *Ext =3D &InstructionData->Ext; + SEV_ES_INSTRUCTION_MODRM *ModRm =3D &InstructionData->ModRm; + SEV_ES_INSTRUCTION_SIB *Sib =3D &InstructionData->Sib; + + InstructionData->ModRmPresent =3D TRUE; + ModRm->Uint8 =3D *(InstructionData->End); + + InstructionData->Displacement++; + InstructionData->Immediate++; + InstructionData->End++; + + Ext->ModRm.Mod =3D ModRm->Bits.Mod; + Ext->ModRm.Reg =3D (RexPrefix->Bits.R << 3) | ModRm->Bits.Reg; + Ext->ModRm.Rm =3D (RexPrefix->Bits.B << 3) | ModRm->Bits.Rm; + + Ext->RegData =3D *GetRegisterPointer (Regs, Ext->ModRm.Reg); + + if (Ext->ModRm.Mod =3D=3D 3) { + Ext->RmData =3D *GetRegisterPointer (Regs, Ext->ModRm.Rm); + } else { + if (ModRm->Bits.Rm =3D=3D 4) { + InstructionData->SibPresent =3D TRUE; + Sib->Uint8 =3D *(InstructionData->End); + + InstructionData->Displacement++; + InstructionData->Immediate++; + InstructionData->End++; + + Ext->Sib.Scale =3D Sib->Bits.Scale; + Ext->Sib.Index =3D (RexPrefix->Bits.X << 3) | Sib->Bits.Index; + Ext->Sib.Base =3D (RexPrefix->Bits.B << 3) | Sib->Bits.Base; + } + + Ext->RmData =3D GetEffectiveMemoryAddress (Regs, InstructionData); + } +} + STATIC VOID DecodePrefixes ( @@ -262,6 +454,91 @@ InitInstructionData ( DecodePrefixes (Regs, InstructionData); } =20 +STATIC +UINTN +MmioExit ( + GHCB *Ghcb, + EFI_SYSTEM_CONTEXT_X64 *Regs, + SEV_ES_INSTRUCTION_DATA *InstructionData + ) +{ + UINT64 ExitInfo1, ExitInfo2; + UINTN Status; + UINTN Bytes; + INTN *Register; + + Bytes =3D 0; + + switch (*(InstructionData->OpCodes)) { + /* MMIO write */ + case 0x88: + Bytes =3D 1; + case 0x89: + DecodeModRm (Regs, InstructionData); + Bytes =3D (Bytes) ? Bytes + : (InstructionData->DataSize =3D=3D Size16Bits) ? 2 + : (InstructionData->DataSize =3D=3D Size32Bits) ? 4 + : (InstructionData->DataSize =3D=3D Size64Bits) ? 8 + : 0; + + if (InstructionData->Ext.ModRm.Mod =3D=3D 3) { + /* NPF on two register operands??? */ + VmgExit (Ghcb, SvmExitUnsupported, SvmExitNpf, 0); + ASSERT (0); + } + + ExitInfo1 =3D InstructionData->Ext.RmData; + ExitInfo2 =3D Bytes; + CopyMem (Ghcb->SharedBuffer, &InstructionData->Ext.RegData, Bytes); + + Ghcb->SaveArea.SwScratch =3D (UINT64) Ghcb->SharedBuffer; + Status =3D VmgExit (Ghcb, SvmExitMmioWrite, ExitInfo1, ExitInfo2); + if (Status) { + return Status; + } + break; + + /* MMIO read */ + case 0x8A: + Bytes =3D 1; + case 0x8B: + DecodeModRm (Regs, InstructionData); + Bytes =3D (Bytes) ? Bytes + : (InstructionData->DataSize =3D=3D Size16Bits) ? 2 + : (InstructionData->DataSize =3D=3D Size32Bits) ? 4 + : (InstructionData->DataSize =3D=3D Size64Bits) ? 8 + : 0; + if (InstructionData->Ext.ModRm.Mod =3D=3D 3) { + /* NPF on two register operands??? */ + VmgExit (Ghcb, SvmExitUnsupported, SvmExitNpf, 0); + ASSERT (0); + } + + ExitInfo1 =3D InstructionData->Ext.RmData; + ExitInfo2 =3D Bytes; + + Ghcb->SaveArea.SwScratch =3D (UINT64) Ghcb->SharedBuffer; + Status =3D VmgExit (Ghcb, SvmExitMmioRead, ExitInfo1, ExitInfo2); + if (Status) { + return Status; + } + + Register =3D GetRegisterPointer (Regs, InstructionData->Ext.ModRm.Reg); + if (Bytes =3D=3D 4) { + /* Zero-extend for 32-bit operation */ + *Register =3D 0; + } + CopyMem (Register, Ghcb->SharedBuffer, Bytes); + break; + + default: + Status =3D GP_EXCEPTION; + ASSERT (0); + } + + return Status; +} + STATIC UINTN UnsupportedExit ( @@ -598,6 +875,10 @@ DoVcCommon ( NaeExit =3D MsrExit; break; =20 + case SvmExitNpf: + NaeExit =3D MmioExit; + break; + default: NaeExit =3D UnsupportedExit; } --=20 2.17.1 -=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 (#47658): https://edk2.groups.io/g/devel/message/47658 Mute This Topic: https://groups.io/mt/34203561/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- From nobody Sun May 5 15:05:55 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zoho.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+47659+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 1568922775077917.5451655852165; Thu, 19 Sep 2019 12:52:55 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id ZZdTYY1788612xTdohBlbI7G; Thu, 19 Sep 2019 12:52:54 -0700 X-Received: from NAM02-CY1-obe.outbound.protection.outlook.com (NAM02-CY1-obe.outbound.protection.outlook.com [40.107.76.89]) by groups.io with SMTP; Thu, 19 Sep 2019 12:52:54 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Kl9WW4F04qXpZks59nvA4LgCISH/tvBGBVKc55YRZar9mwvD7dfNwtiYzsRn90TH8m4TUDYb/pOJJaH4+4XjJrekyBUqHz/72yQVqbAFgtg5A7QLUv+BwuUMSpz4T0g6Um874ScfTKSPz0lEMrmD8WFlPasjBF6KBS/VnL3o+ilw7jyzeX6eAoQKYsJ+o7UnlVzksqNjXNrmn0XlyHFD67jiZpo82RzK74v6za2MIMBuA+tdM2vq1TP9Ke+YG9uUQKmqcRnOB/ZEIYMOZIobCY7rADe1CYi39hoIC3F2wJWHTxq6RHHFyuSNpR2TuahzPFx22rn8Hufaf5/lX+x33g== 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=ZgFnw5tFs/6MsZq6zozMczB2OyMQyk63WUnL0AlxTkQ=; b=AUqsZGuyKHf5sPxdeMVNgWIuRIcm5m/Ns6qn1P8WpQ9QmTc1xfK9xUOTzzu6SE+wZEHg1D62Xo5aoc7V65EFdIOZnfvbFdWRO7SKTydLDy77ck3jj/HXULooM3wg3+NEHAq4Oi6udZJBWKdjcu0RZaAyMfJHQcXq+3EYKhGKy84K47dszFOoA2HzJIC+E+vbddnbcWfE9j61sHah44HMiCj1qKA4uALgSKtBQl966lI8lXDxu35u/RgaktwtLIfwnGp4ZalYHbL/aG7DCuAFcQEERz/sf2yQHisYLOWCbwmrhXE5Pv8/GYZGQPP8sAtfr9GO7ZgERG755gTDFAt+fA== 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 DM6PR12MB3163.namprd12.prod.outlook.com (20.179.104.150) by DM6PR12MB3228.namprd12.prod.outlook.com (20.179.105.96) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2263.13; Thu, 19 Sep 2019 19:52:53 +0000 X-Received: from DM6PR12MB3163.namprd12.prod.outlook.com ([fe80::400e:f0c3:7ca:2fcc]) by DM6PR12MB3163.namprd12.prod.outlook.com ([fe80::400e:f0c3:7ca:2fcc%6]) with mapi id 15.20.2284.009; Thu, 19 Sep 2019 19:52:53 +0000 From: "Lendacky, Thomas" To: "devel@edk2.groups.io" CC: Jordan Justen , Laszlo Ersek , Ard Biesheuvel , Michael D Kinney , Liming Gao , Eric Dong , Ray Ni , "Singh, Brijesh" Subject: [edk2-devel] [RFC PATCH v2 25/44] UefiCpuPkg/CpuExceptionHandler: Add support for WBINVD NAE events Thread-Topic: [RFC PATCH v2 25/44] UefiCpuPkg/CpuExceptionHandler: Add support for WBINVD NAE events Thread-Index: AQHVbyPSDVowdtqWjk6OrO/HmwGS7A== Date: Thu, 19 Sep 2019 19:52:52 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: SN4PR0501CA0146.namprd05.prod.outlook.com (2603:10b6:803:2c::24) To DM6PR12MB3163.namprd12.prod.outlook.com (2603:10b6:5:182::22) x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [165.204.78.1] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 0f58dfd5-fea4-474f-4da8-08d73d3af52b x-ms-office365-filtering-ht: Tenant x-ms-traffictypediagnostic: DM6PR12MB3228: x-ms-exchange-purlcount: 1 x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:2000; Received-SPF: pass (zoho.com: domain of groups.io designates 66.175.222.12 as permitted sender) client-ip=66.175.222.12; envelope-from=bounce+27952+47659+1787277+3901457@groups.io; helo=web01.groups.io; received-spf: None (protection.outlook.com: amd.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: rp6mJmQHZNPCy94QfY3unZaJ16W3I6CB6rD9Ycw35LP4qvi3ECt+q1jEYTrxHz5CnK4Bl+b3T5YtQ5LRxRxrR2Ipc5VP15ujbm9DGhYL47Z7DDsQmgp/L+J9rScaG4+OCVW89OQ2zq2ojHJm6/WJFGL9TPWkFNKixIpznXRzr5MMvp3+5ChNLCE1L4KmfzM35eSRD+dqZiaj6zl9Cz1jqDE3n/2z6BGdMwAt+a8K379vN1wNPx1ohBzWB98J1duYXl5vUpkqWUahG2yd71efqULNBGuW1pnu6N/3SqTKQEB2nkryGN2qZf25l5i24juR7AJLzad2L2UhMHxLnhUsTXJn1cURo4DsI/esRXcj9ZqhRlOnJAczC4KjMvH+b2lGsn5KNfC1Lwy18l3/E2jed6hnBaLBebWn3Df0k11pM68= MIME-Version: 1.0 X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: 0f58dfd5-fea4-474f-4da8-08d73d3af52b X-MS-Exchange-CrossTenant-originalarrivaltime: 19 Sep 2019 19:52:52.9036 (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: GaxcCtjrCPqIenuFuobqUYww+VQ/Fmq2vFwbvVWxgjOf8cWzGdueK/+MS+V6JaCaxGmEJm82jeeRPVbgqJh6Jw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR12MB3228 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: XPSzm5CkeFXCnn7Uo4jjchbWx1787277AA= Content-Language: en-US Content-ID: <74280DA801D63143BA9DB131D089250D@namprd12.prod.outlook.com> Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1568922774; bh=JseWnzG/081AQpXot3PuJzkU9hiz6uML0svUELiwYMQ=; h=CC:Content-Type:Date:From:Reply-To:Subject:To; b=d8Es485Lmri2jeL6z8TD1jY2lFc3nyi57Y1BjPZV8HcQM9V6TsQLsO/w790xvQ2ZRe0 ag0rNGfGj6RDvbKcMEaZGhGpa8cEA399ussd+Yh2Awn64QSOyafpsXQ6irPwnSX5alMbl sITbwE2ED4LSii3xMRVuUd01/OlJ2Nq0eYY= 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=3D2198 Under SEV-ES, a WBINVD intercept generates a #VC exception. VMGEXIT must be used to allow the hypervisor to handle this intercept. Cc: Eric Dong Cc: Ray Ni Cc: Laszlo Ersek Signed-off-by: Tom Lendacky --- .../X64/AMDSevVcCommon.c | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/UefiCpuPkg/Library/CpuExceptionHandlerLib/X64/AMDSevVcCommon.c= b/UefiCpuPkg/Library/CpuExceptionHandlerLib/X64/AMDSevVcCommon.c index aac460c388e3..f8966cc3eca0 100644 --- a/UefiCpuPkg/Library/CpuExceptionHandlerLib/X64/AMDSevVcCommon.c +++ b/UefiCpuPkg/Library/CpuExceptionHandlerLib/X64/AMDSevVcCommon.c @@ -555,6 +555,24 @@ UnsupportedExit ( return Status; } =20 +STATIC +UINTN +WbinvdExit ( + GHCB *Ghcb, + EFI_SYSTEM_CONTEXT_X64 *Regs, + SEV_ES_INSTRUCTION_DATA *InstructionData + ) +{ + UINTN Status; + + Status =3D VmgExit (Ghcb, SvmExitWbinvd, 0, 0); + if (Status) { + return Status; + } + + return 0; +} + STATIC UINTN MsrExit ( @@ -875,6 +893,10 @@ DoVcCommon ( NaeExit =3D MsrExit; break; =20 + case SvmExitWbinvd: + NaeExit =3D WbinvdExit; + break; + case SvmExitNpf: NaeExit =3D MmioExit; break; --=20 2.17.1 -=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 (#47659): https://edk2.groups.io/g/devel/message/47659 Mute This Topic: https://groups.io/mt/34203562/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- From nobody Sun May 5 15:05:55 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zoho.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+47660+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 156892277683439.16060640518026; Thu, 19 Sep 2019 12:52:56 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id eil9YY1788612xFvEIoWXlP5; Thu, 19 Sep 2019 12:52:55 -0700 X-Received: from NAM02-CY1-obe.outbound.protection.outlook.com (NAM02-CY1-obe.outbound.protection.outlook.com [40.107.76.57]) by groups.io with SMTP; Thu, 19 Sep 2019 12:52:55 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=QaAZlf+tx6KvdL8uKhxgGH791Fg5UqjK0Wi2ig+A7ctmMNYaFcYHdPZAXEAueH6k2Hfmok8EFEGzXt3+DADS5W5SU48nNJxuaeIqLqQJ8L9oieje5eFMUdbs9kVRszFZNRIpC5CVpt+O+/hBSVIllTej1PwuDMcyg5Fa1tVOvek+DwlHehbF9cCaRdCjiPDxO8Qn+O3l0cj0Yso0FhTHO+MoZJruaOOhQDfuX8BuHdhEq/mtevl8uYFbFAIc5K29uP8FQuUNjHul4gtupo9thl/JX3qb5RF2qXvdALiwxJy8e5lwJZ6XGznsGOm5oBnO8yyDG+z0TSxsgcdwCG3N7A== 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=gU2y5wgsJ6fs6OPq3/UHgkRPgACKXUGYcwVAeB/U29w=; b=JkUteS0HO4ZPqyrRjFWeIgdmvorx9vvgfir+q02wG/MgMhhyw4TED3RJXnryPAaGBVG43/EjDpdis/1/lgNqXmrrOV2vvYAjckA2qVsqbq1LgpJWT+4oP/MSdB8/fPGqGJ03m9SngXHS20tlhN8cw1D7SkFFJw+qFgv6otsJNpSS4LlF4NWS4JpsH4pj3owuWeb0PKvfRO2uYO0mFUSc+Isjr4AycY0qYNdzBROZDzwO6qSp7ZWEREwNs1hKeEPClwieR5YUzDwty2xWPKkbjguNc+6lEiMuOx5auyP+T9yqrnM6j3lEkuveGDOEUlXWHTNDysCSAzGVF+0O7XVf4Q== 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 DM6PR12MB3163.namprd12.prod.outlook.com (20.179.104.150) by DM6PR12MB3228.namprd12.prod.outlook.com (20.179.105.96) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2263.13; Thu, 19 Sep 2019 19:52:54 +0000 X-Received: from DM6PR12MB3163.namprd12.prod.outlook.com ([fe80::400e:f0c3:7ca:2fcc]) by DM6PR12MB3163.namprd12.prod.outlook.com ([fe80::400e:f0c3:7ca:2fcc%6]) with mapi id 15.20.2284.009; Thu, 19 Sep 2019 19:52:54 +0000 From: "Lendacky, Thomas" To: "devel@edk2.groups.io" CC: Jordan Justen , Laszlo Ersek , Ard Biesheuvel , Michael D Kinney , Liming Gao , Eric Dong , Ray Ni , "Singh, Brijesh" Subject: [edk2-devel] [RFC PATCH v2 26/44] UefiCpuPkg/CpuExceptionHandler: Add support for RDTSC NAE events Thread-Topic: [RFC PATCH v2 26/44] UefiCpuPkg/CpuExceptionHandler: Add support for RDTSC NAE events Thread-Index: AQHVbyPTGlN05ZqztkidfTKhfjD/EQ== Date: Thu, 19 Sep 2019 19:52:53 +0000 Message-ID: <58a9030898bd50bd2d5268a26ccd0d3963e1a3b2.1568922729.git.thomas.lendacky@amd.com> References: In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: SN4PR0501CA0146.namprd05.prod.outlook.com (2603:10b6:803:2c::24) To DM6PR12MB3163.namprd12.prod.outlook.com (2603:10b6:5:182::22) x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [165.204.78.1] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 68bee565-b3f1-46e1-c084-08d73d3af5c9 x-ms-office365-filtering-ht: Tenant x-ms-traffictypediagnostic: DM6PR12MB3228: x-ms-exchange-purlcount: 1 x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:2000; Received-SPF: pass (zoho.com: domain of groups.io designates 66.175.222.12 as permitted sender) client-ip=66.175.222.12; envelope-from=bounce+27952+47660+1787277+3901457@groups.io; helo=web01.groups.io; received-spf: None (protection.outlook.com: amd.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: 8knpqZFCnHMnYpLIR1ulDJG46bCae+tXZtw9y9cAE0N4vx59bDwImZKjctd/JXTaQLKMLgycqxSGrjTW3nfaKSorxGtwxRjiG5CN0MO/hf9EK6S0ewPrWjPmB+ruq92CKGLiZ/RoB8dV/FtFn9qCurqAaeHvsujlT6v249ERZJzRW8JHiM786yvn6foyE2Ylu8uSGhA/aZpxE9mJ4QCx+FlN7XI5y/DDv6vV43VdX0frfeqKvmho4T9h+Do4bsrPEj3t+qnYUYw2E6NbDx+wt9yncSnUBh1wFenOOScZV4fu+sMEm1lFa1ecstP1ujkhO/LjL5dNBlb2DHsLmazNHziEJOG1BWYI8JaYwchbqxArZgvmDZAFnyfqJ+n36UoolEIEnnkCalKAQvUGVO/oB4GzAFACto66Yqw20yCzIVs= MIME-Version: 1.0 X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: 68bee565-b3f1-46e1-c084-08d73d3af5c9 X-MS-Exchange-CrossTenant-originalarrivaltime: 19 Sep 2019 19:52:53.9260 (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: JvbJCumFVWzjg/EWGbjWVdfwj3LroC/n/hVYq0NvxnPTD02Lyg5uaRv7CzgNtqSIBj+YbckP3uyNsN7FdjSigg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR12MB3228 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: JSVFHhPnnrJQMzklzOKbujcQx1787277AA= Content-Language: en-US Content-ID: <906AD48AC58E9B42867A216AB1681FBF@namprd12.prod.outlook.com> Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1568922775; bh=Pm0ktJLXJwNjN/anVMeaympj56+YqLq0bSoG6oT/xBo=; h=CC:Content-Type:Date:From:Reply-To:Subject:To; b=rBsnLvwbvVn47MdGsy4uUzR9vGj1cC7TVwDoBbX+qZz0ScPbanDlzFnEMG//d/ETTdB t6ueWR9Q0AoN7yKeWNsF+uw6bWv+jtiR5rcOZy2qZm+rB3ZqxtZsDXqjNSbPC+h9D83kI ZTttqrhmqD/IJsmTgkPA7LzxNLFD6IPvD2A= 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=3D2198 Under SEV-ES, a RDTSC intercept generates a #VC exception. VMGEXIT must be used to allow the hypervisor to handle this intercept. Cc: Eric Dong Cc: Ray Ni Cc: Laszlo Ersek Signed-off-by: Tom Lendacky --- .../X64/AMDSevVcCommon.c | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/UefiCpuPkg/Library/CpuExceptionHandlerLib/X64/AMDSevVcCommon.c= b/UefiCpuPkg/Library/CpuExceptionHandlerLib/X64/AMDSevVcCommon.c index f8966cc3eca0..1f6a1f9a30ce 100644 --- a/UefiCpuPkg/Library/CpuExceptionHandlerLib/X64/AMDSevVcCommon.c +++ b/UefiCpuPkg/Library/CpuExceptionHandlerLib/X64/AMDSevVcCommon.c @@ -865,6 +865,32 @@ CpuidExit ( return 0; } =20 +STATIC +UINTN +RdtscExit ( + GHCB *Ghcb, + EFI_SYSTEM_CONTEXT_X64 *Regs, + SEV_ES_INSTRUCTION_DATA *InstructionData + ) +{ + UINTN Status; + + Status =3D VmgExit (Ghcb, SvmExitRdtsc, 0, 0); + if (Status) { + return Status; + } + + if (!GhcbIsRegValid (Ghcb, GhcbRax) || + !GhcbIsRegValid (Ghcb, GhcbRdx)) { + VmgExit (Ghcb, SvmExitUnsupported, SvmExitRdtsc, 0); + ASSERT (0); + } + Regs->Rax =3D Ghcb->SaveArea.Rax; + Regs->Rdx =3D Ghcb->SaveArea.Rdx; + + return 0; +} + UINTN DoVcCommon ( GHCB *Ghcb, @@ -881,6 +907,10 @@ DoVcCommon ( =20 ExitCode =3D Regs->ExceptionData; switch (ExitCode) { + case SvmExitRdtsc: + NaeExit =3D RdtscExit; + break; + case SvmExitCpuid: NaeExit =3D CpuidExit; break; --=20 2.17.1 -=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 (#47660): https://edk2.groups.io/g/devel/message/47660 Mute This Topic: https://groups.io/mt/34203563/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- From nobody Sun May 5 15:05:55 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zoho.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+47661+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 1568922777510960.0170541986272; Thu, 19 Sep 2019 12:52:57 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id 4sv9YY1788612x7ocXQa7dvy; Thu, 19 Sep 2019 12:52:56 -0700 X-Received: from NAM03-BY2-obe.outbound.protection.outlook.com (NAM03-BY2-obe.outbound.protection.outlook.com [40.107.78.78]) by groups.io with SMTP; Thu, 19 Sep 2019 12:52:56 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=bD2Z9OdZVodJ93oMqNGzYH+zlKj7zwqT7MZg5FzWQtkb7iK9Id97JBiKQKvpIzYQKDGhSSx/KIfRr6Du3K68mVwPucApuNb+bDkFbClCK0/XrnIRdP1Fj7QYWQveG/CitWlHaaRVnETSRi9nia8NJlM5iziQsxIEBkP8Pktc9Tm28NZPGXz3/ImUXsqRBGHdvOmUeQ2asqCWUXDihkvfNLP3/h1edrVKM9/tBsgglBp+IN6gYWyx1ZdI+wM1/6vy13AA8eRLMVkEl0lpCXhK9+mFrZ6bPdUVMfKUXNkIPeVHttQK6bH3Aa2mMRIgDoPbBEYYNorucL15ZJgXtMZl7A== 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=VjynJNW0AmLV9t+V38eXADPgNKBxtUq57f8fvp1EP1Q=; b=gCqGdcKG6q+41RldywgRalsMLF2rsJU+OxQ/N0/6x6pJuAaL8QIw7eE4DZ1cdeon8KLVaRA8b4YGyxa3KH7IPNQxfubegsEz9l0tHh3U+hkmSiMvADNdaGr8XimHSUfJ3jwE/f0sknYEV2qL8GtEjlND2YC1cjjvMA8qLMA6pNbYYQTrOHUj9o3VH6+OvkcjQ7+SBSGP+KRD1WQJqkpAtQPSaFiF0E2zdr0JcEtH5MLzty8sVnwI4qs2srpwN1ldRgZwu6hfOTxRYkfwxcwgcSkSHN0SFRUVkZIQtvwCD5XITSO4qbndXsbnuOVb43smQ44Y2x2SHwH+d6ZBMfgUIQ== 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 DM6PR12MB3163.namprd12.prod.outlook.com (20.179.104.150) by DM6PR12MB3228.namprd12.prod.outlook.com (20.179.105.96) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2263.13; Thu, 19 Sep 2019 19:52:55 +0000 X-Received: from DM6PR12MB3163.namprd12.prod.outlook.com ([fe80::400e:f0c3:7ca:2fcc]) by DM6PR12MB3163.namprd12.prod.outlook.com ([fe80::400e:f0c3:7ca:2fcc%6]) with mapi id 15.20.2284.009; Thu, 19 Sep 2019 19:52:55 +0000 From: "Lendacky, Thomas" To: "devel@edk2.groups.io" CC: Jordan Justen , Laszlo Ersek , Ard Biesheuvel , Michael D Kinney , Liming Gao , Eric Dong , Ray Ni , "Singh, Brijesh" Subject: [edk2-devel] [RFC PATCH v2 27/44] UefiCpuPkg/CpuExceptionHandler: Add support for RDPMC NAE events Thread-Topic: [RFC PATCH v2 27/44] UefiCpuPkg/CpuExceptionHandler: Add support for RDPMC NAE events Thread-Index: AQHVbyPUPRi3LlSKTkyMrgwk1jLBWg== Date: Thu, 19 Sep 2019 19:52:54 +0000 Message-ID: <9db048b65455e17fc9c4a339ef5520037a9f2ede.1568922729.git.thomas.lendacky@amd.com> References: In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: SN4PR0501CA0146.namprd05.prod.outlook.com (2603:10b6:803:2c::24) To DM6PR12MB3163.namprd12.prod.outlook.com (2603:10b6:5:182::22) x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [165.204.78.1] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 54e32e48-22b7-49b3-ee4a-08d73d3af663 x-ms-office365-filtering-ht: Tenant x-ms-traffictypediagnostic: DM6PR12MB3228: x-ms-exchange-purlcount: 1 x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:2000; Received-SPF: pass (zoho.com: domain of groups.io designates 66.175.222.12 as permitted sender) client-ip=66.175.222.12; envelope-from=bounce+27952+47661+1787277+3901457@groups.io; helo=web01.groups.io; received-spf: None (protection.outlook.com: amd.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: EM7/CaqOI7OR2BaEj7os+IojuR+aacax04kZ1AZXPIBey7aoXzb8dnYst5qWk/ZacKV7dGuHzagY3Cc86e+LUbywbkt1V7jkAkgxaMiK8xC5RYIGlHU/P7s2ej0wnNfKIJIrB3/B+hzJx6CLTUCw4R9HI/rgryhBGmlzO0O9sUC2BAw7xsM7St+pLuKhM8YW1J5+MHj1sZoUDbKwJU/P2dIL1/+k6221MpRfmSP5ZTp/PEPeyu/8FznXYc/h6s5twP4u+MB30PuCHVXfoBM3VP3eVTwdI0WJlTrxy8p5U/sYxcK2X3eOcGJVQw8P39kDijRkFY2MewRmcw5Ijg/HD7VP+MNyWvYkrpu7Aq/2vgfF5LNeb0iODmQ/tNlxdP6OBzc/M3reIq6d5YTmF2mtkNEARJqvIN55aOw/urJ/1+s= MIME-Version: 1.0 X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: 54e32e48-22b7-49b3-ee4a-08d73d3af663 X-MS-Exchange-CrossTenant-originalarrivaltime: 19 Sep 2019 19:52:54.9644 (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: khDbQilhI6a7OmdI1YFg1ATOsLo3fg4hCnFddHpv8/hntjfb3fRkAWEisHa+F4GMpkjVizZOP4QpLtIIFKRstw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR12MB3228 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: dxzFh4HVVYv2sRyPfvMM0KNJx1787277AA= Content-Language: en-US Content-ID: Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1568922776; bh=x3g3Xqs2f12Vd8k5pbhECnvqDivmfwtUKOofjda9620=; h=CC:Content-Type:Date:From:Reply-To:Subject:To; b=HTWfgyTYLXucYELVpCnK7D/9cfTkrIjT9HNAnA8BeVtrm8Ne1iQOfgXU/z/vWzkOvhX I0/uHCo5FkwZGwXKTqG4kIcpGR/v6dS3BzPUUrxQhTBLGF+0tceGA5wobaADkcbab3PQ/ N3pVWZO/4RCf+7JSUHOZsIlXIyd68f5JUik= 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=3D2198 Under SEV-ES, a RDPMC intercept generates a #VC exception. VMGEXIT must be used to allow the hypervisor to handle this intercept. Cc: Eric Dong Cc: Ray Ni Cc: Laszlo Ersek Signed-off-by: Tom Lendacky --- .../X64/AMDSevVcCommon.c | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/UefiCpuPkg/Library/CpuExceptionHandlerLib/X64/AMDSevVcCommon.c= b/UefiCpuPkg/Library/CpuExceptionHandlerLib/X64/AMDSevVcCommon.c index 1f6a1f9a30ce..a6534e1a59bb 100644 --- a/UefiCpuPkg/Library/CpuExceptionHandlerLib/X64/AMDSevVcCommon.c +++ b/UefiCpuPkg/Library/CpuExceptionHandlerLib/X64/AMDSevVcCommon.c @@ -865,6 +865,35 @@ CpuidExit ( return 0; } =20 +STATIC +UINTN +RdpmcExit ( + GHCB *Ghcb, + EFI_SYSTEM_CONTEXT_X64 *Regs, + SEV_ES_INSTRUCTION_DATA *InstructionData + ) +{ + UINTN Status; + + Ghcb->SaveArea.Rcx =3D Regs->Rcx; + GhcbSetRegValid (Ghcb, GhcbRcx); + + Status =3D VmgExit (Ghcb, SvmExitRdpmc, 0, 0); + if (Status) { + return Status; + } + + if (!GhcbIsRegValid (Ghcb, GhcbRax) || + !GhcbIsRegValid (Ghcb, GhcbRdx)) { + VmgExit (Ghcb, SvmExitUnsupported, SvmExitRdpmc, 0); + ASSERT (0); + } + Regs->Rax =3D Ghcb->SaveArea.Rax; + Regs->Rdx =3D Ghcb->SaveArea.Rdx; + + return 0; +} + STATIC UINTN RdtscExit ( @@ -911,6 +940,10 @@ DoVcCommon ( NaeExit =3D RdtscExit; break; =20 + case SvmExitRdpmc: + NaeExit =3D RdpmcExit; + break; + case SvmExitCpuid: NaeExit =3D CpuidExit; break; --=20 2.17.1 -=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 (#47661): https://edk2.groups.io/g/devel/message/47661 Mute This Topic: https://groups.io/mt/34203564/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- From nobody Sun May 5 15:05:55 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zoho.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+47662+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 1568922777994117.00393339317202; Thu, 19 Sep 2019 12:52:57 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id 1kCvYY1788612x9tNwk1ITRh; Thu, 19 Sep 2019 12:52:57 -0700 X-Received: from NAM03-BY2-obe.outbound.protection.outlook.com (NAM03-BY2-obe.outbound.protection.outlook.com [40.107.78.55]) by groups.io with SMTP; Thu, 19 Sep 2019 12:52:57 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=EcYbFs608TETLDICmEafPXBM1Je/psMqSzOQBpIHZh/dirEFYRlFTJOiMZPR+ebyVQ7DahbYLGyei+ITLYu1d1W7OcmpmyDfX1eERGuYj4oNdwRyNkCt1dFDNfsUw44NQCdjIotkUQh59ZV+7h4P6f66g8egROKL1L7YS3mJJDtcvQ2M6fJJlZfALoNdLfLJfHtgUergSRdFoWNv+u84PZUyxKy5AJHSr6eu+pve+vYtnN+09ziBKy6/9fRuWAEFlB3R9UQrBNhKr6KRkE17mCqbbKMOO8zGOImBUctrw2bxpgWMY6EMTNbZGiAcxgPoYN4T56UfqkxBqaw56V5XOA== 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=DV1stvOZd4mxtshdylnnwQZu3Ld/Vv4HZEZGhdIqmeQ=; b=ShxDGOQgSqzY41WrlCFQ33jI+QhogIhD3w7+QZImT2q5MFGVbOB+rcGhFwlAhN26mYr6vfw/3GDPV2venI0qJrC3jzMrmt5maruIm2XeBePHDQ2D/GgNIVZaJFWvltekeibP2YHJ56u0tMfvzXrK170rRS1VyXYUmbZCtQGATPUYfmRa5JZ8/a85V4JrhfNa0FZx303D171bpUclQIi6tncAt5tOI4gyl0ANkd5vRnCnYeGd61rx6QknsN/2zBjX7FIQ4zdlRx4NfdWF+Y63FBtMJpiOJ7zUaKKmjW8MsFNb73MyOdiBbjg6Np7yYz9hxx9JXUb5soAA1cJox3q7sw== 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 DM6PR12MB3163.namprd12.prod.outlook.com (20.179.104.150) by DM6PR12MB3228.namprd12.prod.outlook.com (20.179.105.96) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2263.13; Thu, 19 Sep 2019 19:52:56 +0000 X-Received: from DM6PR12MB3163.namprd12.prod.outlook.com ([fe80::400e:f0c3:7ca:2fcc]) by DM6PR12MB3163.namprd12.prod.outlook.com ([fe80::400e:f0c3:7ca:2fcc%6]) with mapi id 15.20.2284.009; Thu, 19 Sep 2019 19:52:56 +0000 From: "Lendacky, Thomas" To: "devel@edk2.groups.io" CC: Jordan Justen , Laszlo Ersek , Ard Biesheuvel , Michael D Kinney , Liming Gao , Eric Dong , Ray Ni , "Singh, Brijesh" Subject: [edk2-devel] [RFC PATCH v2 28/44] UefiCpuPkg/CpuExceptionHandler: Add support for INVD NAE events Thread-Topic: [RFC PATCH v2 28/44] UefiCpuPkg/CpuExceptionHandler: Add support for INVD NAE events Thread-Index: AQHVbyPUp8zJOTDtVE+ScIhRAEPhkg== Date: Thu, 19 Sep 2019 19:52:55 +0000 Message-ID: <7c463aa5fea42e15c689c1a5ffc382e2500f8706.1568922729.git.thomas.lendacky@amd.com> References: In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: SN4PR0501CA0146.namprd05.prod.outlook.com (2603:10b6:803:2c::24) To DM6PR12MB3163.namprd12.prod.outlook.com (2603:10b6:5:182::22) x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [165.204.78.1] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: f2c24f90-8ff6-4e7d-0e9f-08d73d3af704 x-ms-office365-filtering-ht: Tenant x-ms-traffictypediagnostic: DM6PR12MB3228: x-ms-exchange-purlcount: 1 x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:2000; Received-SPF: pass (zoho.com: domain of groups.io designates 66.175.222.12 as permitted sender) client-ip=66.175.222.12; envelope-from=bounce+27952+47662+1787277+3901457@groups.io; helo=web01.groups.io; received-spf: None (protection.outlook.com: amd.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: dRMcgEfRBXiH2vtOLh3UcAnrCxlttT5W+hBHX5wONX5205qkVDY2HNBHoOdZLHmkiHmm1bG4BrGEVyfqVUJZ7jrN6AImPyk3R2xXBzYE/k/561ZMF8z9K9r47cl6oOZ1tXWf8e3+p/dPCn6G23UDZMiNi/LF38DF02RKFru0oK9Cf+HlZQgR862JqWLUwCCuUWgWXxDtb7lTC6h7PYNnaKhXim44mCiL9bB5ZV6GvWPh65FAU/FyP0OSp1jtE+E3xNsDG0RYKKbnw05w+ahIPVP2KI/qpc0gv17siWJHIxoLOViV5gWqBgXWL+rQ4IEOy0XSabbuymqMlLQsyymwbckX6JSNw7F5gEgUl/pZAT8dSFXJ2j5WHQFBjF6JEaCm5Gybqenm4/RgE6VLORUbeSMZMFg466gw2M3XstS02/8= MIME-Version: 1.0 X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: f2c24f90-8ff6-4e7d-0e9f-08d73d3af704 X-MS-Exchange-CrossTenant-originalarrivaltime: 19 Sep 2019 19:52:55.9879 (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: jxBAkRQ0SESOiyAw8Kd7i4HlZFNwZEHHlny0K8pChxtqUyK+ZGcnHsrreOotfU0C9uTR/QTR4v7YR4B/j27gBw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR12MB3228 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: 0rRc819HC3A7ESW7LKAuDBFyx1787277AA= Content-Language: en-US Content-ID: <98BF0B4DF30A674EB8E7269F15095DA5@namprd12.prod.outlook.com> Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1568922777; bh=HzrWyKaTxaV+0O8DrWFSQBl67sId7iBYhl/Q7YElfa0=; h=CC:Content-Type:Date:From:Reply-To:Subject:To; b=OBKrcl+QKsvVSaAM3bIs/LMLlwK1La1YBXIW2GvFkOT3igQtXosmKHccUyNeoGnQl9y n12Aa2vTlNY+BleSJjlXKIB3vabw5pPlSyflcSPO82LaseJ99XLnt6sEsqYzwWmTzKmWR Gz0qY0Tr5KPeE4OyaTTW+eVAxywuagiXN3U= 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=3D2198 Under SEV-ES, a INVD intercept generates a #VC exception. VMGEXIT must be used to allow the hypervisor to handle this intercept. Cc: Eric Dong Cc: Ray Ni Cc: Laszlo Ersek Signed-off-by: Tom Lendacky --- .../X64/AMDSevVcCommon.c | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/UefiCpuPkg/Library/CpuExceptionHandlerLib/X64/AMDSevVcCommon.c= b/UefiCpuPkg/Library/CpuExceptionHandlerLib/X64/AMDSevVcCommon.c index a6534e1a59bb..a4a840401398 100644 --- a/UefiCpuPkg/Library/CpuExceptionHandlerLib/X64/AMDSevVcCommon.c +++ b/UefiCpuPkg/Library/CpuExceptionHandlerLib/X64/AMDSevVcCommon.c @@ -826,6 +826,24 @@ IoioExit ( return 0; } =20 +STATIC +UINTN +InvdExit ( + GHCB *Ghcb, + EFI_SYSTEM_CONTEXT_X64 *Regs, + SEV_ES_INSTRUCTION_DATA *InstructionData + ) +{ + UINTN Status; + + Status =3D VmgExit (Ghcb, SvmExitInvd, 0, 0); + if (Status) { + return Status; + } + + return 0; +} + STATIC UINTN CpuidExit ( @@ -948,6 +966,10 @@ DoVcCommon ( NaeExit =3D CpuidExit; break; =20 + case SvmExitInvd: + NaeExit =3D InvdExit; + break; + case SvmExitIoioProt: NaeExit =3D IoioExit; break; --=20 2.17.1 -=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 (#47662): https://edk2.groups.io/g/devel/message/47662 Mute This Topic: https://groups.io/mt/34203565/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- From nobody Sun May 5 15:05:55 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zoho.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+47663+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 1568922780937260.62094213257717; Thu, 19 Sep 2019 12:53:00 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id yk8aYY1788612xji0NVasUos; Thu, 19 Sep 2019 12:52:59 -0700 X-Received: from NAM03-BY2-obe.outbound.protection.outlook.com (NAM03-BY2-obe.outbound.protection.outlook.com [40.107.78.44]) by groups.io with SMTP; Thu, 19 Sep 2019 12:52:59 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=GAmssqNYZIbYnMEb8REDcWdAroa0lOFosILx0cJ1psxicGJXUTFFKDbDq3wTq3hNmeBOoMUFx8wxGBf82UTSwsJjhasN67DqeCSoNvgmUVu477EUrr4yhptaoKdy4q6LMYiDlYscm5HwA+gB+HGJial5UYYFbLJvHPZCTWIm2rTciGYxz3V6uPfQnWOuq1uGIn2eYvHfD8OFS0fZxk7ovxz/pDMwwibkqBkUIEjx6MLho01pQhh4vLvF3k972F1bTVwpU6Wa95u7LG7y2wDi+tPTbaXPKfKBkKMRC01J+kQmMFklezHCO1iu4mpqBOAqwch+Nu5m4xYAiM0llepEgg== 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=kGBnb/5ZdIbMsSo1qbDxvtik1M4UYAeSUkPqZUyEcMY=; b=YpL77q/ngdguXiY/9uMczOishF/V5NjkWCYgsWn0pPvGGDV642QQqpYF6dhfBnoZSucmN6ImELaXZcUVbI+pJfAca49LnbJUdjMZrWJ5snEWvHm9ABY0gnybN2D77UC//V7DHAochArpKUAnecuAjctP8PNuko1N72mFflGtxOkTL9r8KsmGcT7SQZ3WhGpUnN5TLPqRuxjCfwjElabScQRXereQ6zr5Rff3oyVXvDKMgH9FIOB5atdrLQ129UOf9qHm/xAWNO+U6L42iXfusju0OVvkfmO5QHMUnDBikb3lIIBWo1NxDr+CL4CwD9x3zaO0no0I6x2XDEO1j0UpBw== 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 DM6PR12MB3163.namprd12.prod.outlook.com (20.179.104.150) by DM6PR12MB3228.namprd12.prod.outlook.com (20.179.105.96) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2263.13; Thu, 19 Sep 2019 19:52:57 +0000 X-Received: from DM6PR12MB3163.namprd12.prod.outlook.com ([fe80::400e:f0c3:7ca:2fcc]) by DM6PR12MB3163.namprd12.prod.outlook.com ([fe80::400e:f0c3:7ca:2fcc%6]) with mapi id 15.20.2284.009; Thu, 19 Sep 2019 19:52:57 +0000 From: "Lendacky, Thomas" To: "devel@edk2.groups.io" CC: Jordan Justen , Laszlo Ersek , Ard Biesheuvel , Michael D Kinney , Liming Gao , Eric Dong , Ray Ni , "Singh, Brijesh" Subject: [edk2-devel] [RFC PATCH v2 29/44] UefiCpuPkg/CpuExceptionHandler: Add support for VMMCALL NAE events Thread-Topic: [RFC PATCH v2 29/44] UefiCpuPkg/CpuExceptionHandler: Add support for VMMCALL NAE events Thread-Index: AQHVbyPVH4iDMyS01EqNJgBCNVh10g== Date: Thu, 19 Sep 2019 19:52:57 +0000 Message-ID: <2420d90bcf44aa6a449af94e7188c540e88c331e.1568922729.git.thomas.lendacky@amd.com> References: In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: SN4PR0501CA0146.namprd05.prod.outlook.com (2603:10b6:803:2c::24) To DM6PR12MB3163.namprd12.prod.outlook.com (2603:10b6:5:182::22) x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [165.204.78.1] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 5764d24d-6ad4-4233-36c7-08d73d3af7ef x-ms-office365-filtering-ht: Tenant x-ms-traffictypediagnostic: DM6PR12MB3228: x-ms-exchange-purlcount: 1 x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:2000; Received-SPF: pass (zoho.com: domain of groups.io designates 66.175.222.12 as permitted sender) client-ip=66.175.222.12; envelope-from=bounce+27952+47663+1787277+3901457@groups.io; helo=web01.groups.io; received-spf: None (protection.outlook.com: amd.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: Al/5yoSoaMagMHA+222Os90ZWFuG0nYT9dPeyEg+U2X2+tLM+1nD2TBxkskQFPkMCYGt1KXm5+HObsLv4eLHCJUeOTyqOMOCgV+AhSZou8V5AQ24fcnwgPrtVDUxGV/FLQqOOj6DpTiVulWHSoaUjF3P6BfHGcsPOPyOyP9qe+aJ6SgPy/2CzEInFLs3mEV7BuVF47dNVojrrzO45SV4pooeJOQ3UOMjSrORFOosaP5MerPKWlTwPNpZsuw0ZCCDVN6lKoFukOljT7UARbgGOGMpCBC+w3LPZSCcKcSh0wa8pZzBjnNqVcr3r2cd5V0p9h2K1jfo4YXGff3Hr8zuEZuuV8zpALWERIbo4Y8klxhnQ47eyYwMcEaVoBKTIE/+CBmui5OBk000ZFCNixJLJrQHn/vWYs+udhSsz4rI1f8= MIME-Version: 1.0 X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5764d24d-6ad4-4233-36c7-08d73d3af7ef X-MS-Exchange-CrossTenant-originalarrivaltime: 19 Sep 2019 19:52:57.5660 (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: q6dGfhyhxDVkmNsNMZA7fK6jfPPbqkqKBU0bSqmRtAdD4CVZ2LRApv16/L8XFwWN5CKyS+CmSrNGBFT+nCTH5A== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR12MB3228 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: 6OHolCBKuaB5F52fvRjFoCU6x1787277AA= Content-Language: en-US Content-ID: <5BACCAEECAEB394CBF822FB2BBA869E1@namprd12.prod.outlook.com> Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1568922779; bh=nLN8KTo4GsQteV6HJDwk7nWV3nSZ1FFIt3l5ehq4n/g=; h=CC:Content-Type:Date:From:Reply-To:Subject:To; b=bpS4g3SyufJmjpw9BtfHdgeOcEaDjGfLYR8AGLnPVAuZ4duBppQ30iTRKvU/byzvRit VAh5WqCzjFqY7mDxlII3I2J4VQGrrCoqqKZgXVsE7l3+WhAmPn4B9905RPInkTEA0uuNs TON/CvidRGbZAwSQG20p02IN8RppHeJcv2k= 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=3D2198 Under SEV-ES, a VMMCALL intercept generates a #VC exception. VMGEXIT must be used to allow the hypervisor to handle this intercept. Cc: Eric Dong Cc: Ray Ni Cc: Laszlo Ersek Signed-off-by: Tom Lendacky --- .../X64/AMDSevVcCommon.c | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/UefiCpuPkg/Library/CpuExceptionHandlerLib/X64/AMDSevVcCommon.c= b/UefiCpuPkg/Library/CpuExceptionHandlerLib/X64/AMDSevVcCommon.c index a4a840401398..e9449deaa98b 100644 --- a/UefiCpuPkg/Library/CpuExceptionHandlerLib/X64/AMDSevVcCommon.c +++ b/UefiCpuPkg/Library/CpuExceptionHandlerLib/X64/AMDSevVcCommon.c @@ -573,6 +573,37 @@ WbinvdExit ( return 0; } =20 +STATIC +UINTN +VmmCallExit ( + GHCB *Ghcb, + EFI_SYSTEM_CONTEXT_X64 *Regs, + SEV_ES_INSTRUCTION_DATA *InstructionData + ) +{ + UINTN Status; + + DecodeModRm (Regs, InstructionData); + + Ghcb->SaveArea.Rax =3D Regs->Rax; + GhcbSetRegValid (Ghcb, GhcbRax); + Ghcb->SaveArea.Cpl =3D (UINT8) (Regs->Cs & 0x3); + GhcbSetRegValid (Ghcb, GhcbCpl); + + Status =3D VmgExit (Ghcb, SvmExitVmmCall, 0, 0); + if (Status) { + return Status; + } + + if (!GhcbIsRegValid (Ghcb, GhcbRax)) { + VmgExit (Ghcb, SvmExitUnsupported, SvmExitVmmCall, 0); + ASSERT (0); + } + Regs->Rax =3D Ghcb->SaveArea.Rax; + + return 0; +} + STATIC UINTN MsrExit ( @@ -978,6 +1009,10 @@ DoVcCommon ( NaeExit =3D MsrExit; break; =20 + case SvmExitVmmCall: + NaeExit =3D VmmCallExit; + break; + case SvmExitWbinvd: NaeExit =3D WbinvdExit; break; --=20 2.17.1 -=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 (#47663): https://edk2.groups.io/g/devel/message/47663 Mute This Topic: https://groups.io/mt/34203568/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- From nobody Sun May 5 15:05:55 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zoho.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+47664+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 1568922811105972.4688416251057; Thu, 19 Sep 2019 12:53:31 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id PLfeYY1788612xCkpcmPGNan; Thu, 19 Sep 2019 12:53:30 -0700 X-Received: from NAM03-DM3-obe.outbound.protection.outlook.com (NAM03-DM3-obe.outbound.protection.outlook.com [40.107.80.79]) by groups.io with SMTP; Thu, 19 Sep 2019 12:53:30 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=jZztJe80YB0co/Cc5mGSnYjo3Hw9tzkcgat8cpbMjjrmZHHMLyrVARcjuC4G2Rr7MBsASNq6dOX8k3r34uozqFpX4lO8WSRJpBsN/eIEcKnZxjC6sj+tJs/+fbLRrP9oBMhm/9zRhr8CkUKOBqHr+g6Dgr93FgGynxFrpfES2r5BojFxpgn9zTJLGHaaLRb+6Zxk4HoJ+bUWy7NxfR6SJKbtStvkVY2E7KAqKWSsCFYWMkvanZQpr1TN/xg+PMH/Dl80v4IdJiY6WOpCJK438Dtc4uFi3wsfLewLbdVvpM9ELfeOVPNJqB9MjzeNwURXxbtSDPa9CZ9kq+Wd86L2DQ== 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=Fo9U2n+Ko2Ct2DfxTtv0a6w+dhsZ795hCQx7yDSBHkM=; b=fyxf7QE93HxaJU83BXcsGRcNJp790JM68XiAYdp7RPd9U4oVBunHPVYckWYzPWdxGD6g4f2pRuH+14fQjYEQFZE6A8x5NiZCm3EhnYSPXm2sUlQZi5SfiBEBX+Zhgn/Hk30dTGvFJPqnJb3+3vZNuXV48mjt5jdXUIgPGd5nBH8/qJrItQExbju/QPfRkckOWkDE1JOQFk6Co4PXgWNcBglUQSpGfA3bIJDx3wbLChhkaiHjlbhEjKshv9A0gr424/YX6c0yxwHmb5KUNyMO79hhNsTxg2KPx8u1Jx3DVUumni5BayakQKE5HfmVUTnX2X6m0xyhGF/S14wOmMqM3Q== 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 DM6PR12MB3163.namprd12.prod.outlook.com (20.179.104.150) by DM6PR12MB2890.namprd12.prod.outlook.com (20.179.71.152) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2263.23; Thu, 19 Sep 2019 19:53:28 +0000 X-Received: from DM6PR12MB3163.namprd12.prod.outlook.com ([fe80::400e:f0c3:7ca:2fcc]) by DM6PR12MB3163.namprd12.prod.outlook.com ([fe80::400e:f0c3:7ca:2fcc%6]) with mapi id 15.20.2284.009; Thu, 19 Sep 2019 19:53:28 +0000 From: "Lendacky, Thomas" To: "devel@edk2.groups.io" CC: Jordan Justen , Laszlo Ersek , Ard Biesheuvel , Michael D Kinney , Liming Gao , Eric Dong , Ray Ni , "Singh, Brijesh" Subject: [edk2-devel] [RFC PATCH v2 30/44] UefiCpuPkg/CpuExceptionHandler: Add support for RDTSCP NAE events Thread-Topic: [RFC PATCH v2 30/44] UefiCpuPkg/CpuExceptionHandler: Add support for RDTSCP NAE events Thread-Index: AQHVbyPWXvtZbV6yf0+kK4wWy74VBQ== Date: Thu, 19 Sep 2019 19:52:58 +0000 Message-ID: <1a82e1f44980e43600796bee3acd8c84cc55e5a3.1568922729.git.thomas.lendacky@amd.com> References: In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: SN4PR0501CA0146.namprd05.prod.outlook.com (2603:10b6:803:2c::24) To DM6PR12MB3163.namprd12.prod.outlook.com (2603:10b6:5:182::22) x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [165.204.78.1] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 110ccfb7-67fc-4c8f-e912-08d73d3af8a5 x-ms-office365-filtering-ht: Tenant x-ms-traffictypediagnostic: DM6PR12MB2890: x-ms-exchange-purlcount: 1 x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:2000; Received-SPF: pass (zoho.com: domain of groups.io designates 66.175.222.12 as permitted sender) client-ip=66.175.222.12; envelope-from=bounce+27952+47664+1787277+3901457@groups.io; helo=web01.groups.io; received-spf: None (protection.outlook.com: amd.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: TAHX3pugmipyiQFKhhMdE8N1J+ERoCMQIQDMDTztvo1DvVt3lJdYbWL69OfznCcMJshy+zWW2WvGuAPrIykvqc4x7++Ipog0cAIXXstf29kY8wL1tRm0npyP5L4adYWKeh5eRoWI5ZJXEEwRCeQpCPnq5LVuVdx977pinsX/JO5eEqMXbZcgSMXa9y+zcUHQABVEucWJIeIFVEA0dHR78WN+yegr6guP3HSfsT+ipqnQt0KjXrAAcK9g72rw50f/2OcWzQMHrTsI52bpXVLeJJGUltmivD6AENFNkZrzITd6XbY+w/rIGP6hbRrbQGnG43yOzu5UGTecc2apRlLwbFoXzrzku9m0bvigvftA/P2AEGejf/p9BNftOdF/ZXotao3bFHj9+m/0hFrLXHKHk3K5rTIfOgz+hdvs4IBHA9I= MIME-Version: 1.0 X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: 110ccfb7-67fc-4c8f-e912-08d73d3af8a5 X-MS-Exchange-CrossTenant-originalarrivaltime: 19 Sep 2019 19:52:58.7543 (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: gDaVmaeiMS7Qs7qcPeiLZPWcj6kBBEbo278ws6TFezcKOZZWhhaBhEDLsZeL2zSCb4C9WsHVugw1RQG27p/vcA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR12MB2890 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: g73I7su1XDi0QOfynlbj5KDNx1787277AA= Content-Language: en-US Content-ID: <9760F07079484F4091B9F52866C64C23@namprd12.prod.outlook.com> Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1568922810; bh=Uxyw8fDSFkYlcHlriD6YHAXfYNUHk3dvhC7Arn6QieQ=; h=CC:Content-Type:Date:From:Reply-To:Subject:To; b=NoCFcNbAimh5J9fDF3C5dmBM7KAg6cDxPivX2p75U23clueLYjUgAzKAaFuEjGjM3jC 5RgNKxBj7Q0pyxrZtYgBBgs1yfQz4yn6Jl4pcpWsPQpE4K21TqD9a+P5ZN4a+ratfrNbD RhMe6xAGyQWhITrAYXFqSvu5m3syr4xiBRQ= 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=3D2198 Under SEV-ES, a RDTSCP intercept generates a #VC exception. VMGEXIT must be used to allow the hypervisor to handle this intercept. Cc: Eric Dong Cc: Ray Ni Cc: Laszlo Ersek Signed-off-by: Tom Lendacky --- .../X64/AMDSevVcCommon.c | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/UefiCpuPkg/Library/CpuExceptionHandlerLib/X64/AMDSevVcCommon.c= b/UefiCpuPkg/Library/CpuExceptionHandlerLib/X64/AMDSevVcCommon.c index e9449deaa98b..c8efc5c4c106 100644 --- a/UefiCpuPkg/Library/CpuExceptionHandlerLib/X64/AMDSevVcCommon.c +++ b/UefiCpuPkg/Library/CpuExceptionHandlerLib/X64/AMDSevVcCommon.c @@ -573,6 +573,36 @@ WbinvdExit ( return 0; } =20 +STATIC +UINTN +RdtscpExit ( + GHCB *Ghcb, + EFI_SYSTEM_CONTEXT_X64 *Regs, + SEV_ES_INSTRUCTION_DATA *InstructionData + ) +{ + UINTN Status; + + DecodeModRm (Regs, InstructionData); + + Status =3D VmgExit (Ghcb, SvmExitRdtscp, 0, 0); + if (Status) { + return Status; + } + + if (!GhcbIsRegValid (Ghcb, GhcbRax) || + !GhcbIsRegValid (Ghcb, GhcbRcx) || + !GhcbIsRegValid (Ghcb, GhcbRdx)) { + VmgExit (Ghcb, SvmExitUnsupported, SvmExitRdtscp, 0); + ASSERT (0); + } + Regs->Rax =3D Ghcb->SaveArea.Rax; + Regs->Rcx =3D Ghcb->SaveArea.Rcx; + Regs->Rdx =3D Ghcb->SaveArea.Rdx; + + return 0; +} + STATIC UINTN VmmCallExit ( @@ -1013,6 +1043,10 @@ DoVcCommon ( NaeExit =3D VmmCallExit; break; =20 + case SvmExitRdtscp: + NaeExit =3D RdtscpExit; + break; + case SvmExitWbinvd: NaeExit =3D WbinvdExit; break; --=20 2.17.1 -=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 (#47664): https://edk2.groups.io/g/devel/message/47664 Mute This Topic: https://groups.io/mt/34203576/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- From nobody Sun May 5 15:05:55 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zoho.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+47665+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 1568922811883654.8894124218655; Thu, 19 Sep 2019 12:53:31 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id aaPIYY1788612xPYMdlOto5x; Thu, 19 Sep 2019 12:53:31 -0700 X-Received: from NAM03-DM3-obe.outbound.protection.outlook.com (NAM03-DM3-obe.outbound.protection.outlook.com []) by groups.io with SMTP; Thu, 19 Sep 2019 12:53:30 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=b2pSiHDrmoAa0rxedPNaodjXCDAc5tN6WYJaVNAuUPGp8XS7Cj5VWCmKCxEBLFn8n2LWoRP36MGQ0uvEcwtVk9dcaSjNL4EUG6BA4RveemjQ2A7OQvoV97eT/+JUsJKwC7bw09BzcjrzNNTdXHCZy4vYp0chsNF0gqPLQ5vOoCJtPqFFF4VjZOklcAxDFUl9j4zmTxlR7YRVdo4RjdAMOBGC7Sko4axUNr8lBFJI+uYB0F2rDDPb7mrhhOOnfJH2ZrNWM7kOBn7vBSDX/29rImtpzGNmvlhPKRe+Wzrt4VRVYTaGP2HsjMEgH8e7j+oRo71+aB5FKvs0zqvgm4Ilsw== 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=4I3SxFxRjRvB9PRpB/1RQ/KcnxNWWKtQnYAPfgwq+KE=; b=ib3uJNeiPjyJCoShaDzkwmDD0DlMO+0baFId4hQc+JXtDLx1NEIIi61vZzHmIjVL/gNF4vY8XmuxR/vHDhFWqUmKLxER8afcLxSQYtKj52qZYs28KrKBxTXVR/UdsE0uFwOCVhBf5KdIDkkXbL8AJme/0qnFQh9JMWt3rT2sljahcE16zPxBqlUh7S+i+Y+ANEdQp9Z8slSqr7Jd10yTMsbuSMxu+OYDzfd88Zu50fIf9DxoFOdiuCZxusbWPNbwlRaHFhsTUCK8O0N1OwKZaqRFH+Gg8LBCkOeFVDVxPKCLSe0xWbD0HoiHLy63gWLZTA+0JMQfFoVYre5B5uaBrw== 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 DM6PR12MB3163.namprd12.prod.outlook.com (20.179.104.150) by DM6PR12MB2890.namprd12.prod.outlook.com (20.179.71.152) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2263.23; Thu, 19 Sep 2019 19:53:29 +0000 X-Received: from DM6PR12MB3163.namprd12.prod.outlook.com ([fe80::400e:f0c3:7ca:2fcc]) by DM6PR12MB3163.namprd12.prod.outlook.com ([fe80::400e:f0c3:7ca:2fcc%6]) with mapi id 15.20.2284.009; Thu, 19 Sep 2019 19:53:29 +0000 From: "Lendacky, Thomas" To: "devel@edk2.groups.io" CC: Jordan Justen , Laszlo Ersek , Ard Biesheuvel , Michael D Kinney , Liming Gao , Eric Dong , Ray Ni , "Singh, Brijesh" Subject: [edk2-devel] [RFC PATCH v2 31/44] UefiCpuPkg/CpuExceptionHandler: Add support for MONITOR/MONITORX NAE events Thread-Topic: [RFC PATCH v2 31/44] UefiCpuPkg/CpuExceptionHandler: Add support for MONITOR/MONITORX NAE events Thread-Index: AQHVbyPWIhSqWHPdjkyT5DMv0nnupw== Date: Thu, 19 Sep 2019 19:52:59 +0000 Message-ID: <8ac82088e4bd4f97fc7d13c81866e9c1e95a8118.1568922729.git.thomas.lendacky@amd.com> References: In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: SN4PR0501CA0146.namprd05.prod.outlook.com (2603:10b6:803:2c::24) To DM6PR12MB3163.namprd12.prod.outlook.com (2603:10b6:5:182::22) x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [165.204.78.1] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: e4cc2f8b-00ae-44e0-4aad-08d73d3af943 x-ms-office365-filtering-ht: Tenant x-ms-traffictypediagnostic: DM6PR12MB2890: x-ms-exchange-purlcount: 1 x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:2000; Received-SPF: pass (zoho.com: domain of groups.io designates 66.175.222.12 as permitted sender) client-ip=66.175.222.12; envelope-from=bounce+27952+47665+1787277+3901457@groups.io; helo=web01.groups.io; received-spf: None (protection.outlook.com: amd.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: C9ACymwr9+G0TgFUC/iI8EwR2RhJVSoNcaqc5h8n52t274dLhJDZINbMsjeKYVJSXrtU9gCewcManADPUK6B+PXm8ojWkRcL3QQ9Dr1/UEkX/BxSLeLPva4UUsdrwg5P+XCwIYrM/RBS3zG/8UR8t4fCtDTYjj+aY52vM7cz+jEe4H4u9qQEXVkSVYNiu6sAkvkpuksiGUloa3YX+9DUI5jlqsUOvwJTyr9hML73jEa16N7c7EBDGS1sM7V8I+36YqVaGqENNtLKxVLrJPlOwVlp1np8wHbzVqxwHydMaUGOzyeqWeaOLie4a7tsJa2Wipo0ZZBhdBsBaiodDMIqltTY9BP5RmKCW4NgKlS0yPj75SBbv2nibBTCRNwXqkjRShJCyLotNOBRk1REv60eMvAeT7KLY61Rju4jXy3eXxk= MIME-Version: 1.0 X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: e4cc2f8b-00ae-44e0-4aad-08d73d3af943 X-MS-Exchange-CrossTenant-originalarrivaltime: 19 Sep 2019 19:52:59.7917 (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: Qmagyvwx1aRODaGRET9tyxfylnOVCuxI0e6IYpqtRd+Ku22DNiC777etFJU/QqXtlKd2uc8ZsSAZTbCzzoM59w== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR12MB2890 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: gajOIDEw8JASdIgcsnc3qoefx1787277AA= Content-Language: en-US Content-ID: Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1568922811; bh=MgbL3IrZa0lsrFssX9Hzs7CZOQ+4ZlPCPUx+Y8pRwBY=; h=CC:Content-Type:Date:From:Reply-To:Subject:To; b=LnL7CCNdIPLTk1wQdbgSTm5FHsF0u9pwwA1MeJvM1YJkVTWerizfEgr8jPqNfR9xF1j uJRqW08MOorYhY4QjwMK46Sb+MqjLnUR8zMxfHr5laCq+0SLnhC6WL3HCWVX5Yu/knN0H IEXEmQfXsQf2JOIPaVPVAf+CPTPgB2XzXTw= 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=3D2198 Under SEV-ES, a MONITOR/MONITORX intercept generates a #VC exception. VMGEXIT must be used to allow the hypervisor to handle this intercept. Cc: Eric Dong Cc: Ray Ni Cc: Laszlo Ersek Signed-off-by: Tom Lendacky --- .../X64/AMDSevVcCommon.c | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/UefiCpuPkg/Library/CpuExceptionHandlerLib/X64/AMDSevVcCommon.c= b/UefiCpuPkg/Library/CpuExceptionHandlerLib/X64/AMDSevVcCommon.c index c8efc5c4c106..824175a80b9b 100644 --- a/UefiCpuPkg/Library/CpuExceptionHandlerLib/X64/AMDSevVcCommon.c +++ b/UefiCpuPkg/Library/CpuExceptionHandlerLib/X64/AMDSevVcCommon.c @@ -555,6 +555,33 @@ UnsupportedExit ( return Status; } =20 +STATIC +UINTN +MonitorExit ( + GHCB *Ghcb, + EFI_SYSTEM_CONTEXT_X64 *Regs, + SEV_ES_INSTRUCTION_DATA *InstructionData + ) +{ + UINTN Status; + + DecodeModRm (Regs, InstructionData); + + Ghcb->SaveArea.Rax =3D Regs->Rax; // Identity mapped, so VA =3D PA + GhcbSetRegValid (Ghcb, GhcbRax); + Ghcb->SaveArea.Rcx =3D Regs->Rcx; + GhcbSetRegValid (Ghcb, GhcbRcx); + Ghcb->SaveArea.Rdx =3D Regs->Rdx; + GhcbSetRegValid (Ghcb, GhcbRdx); + + Status =3D VmgExit (Ghcb, SvmExitMonitor, 0, 0); + if (Status) { + return Status; + } + + return 0; +} + STATIC UINTN WbinvdExit ( @@ -1051,6 +1078,10 @@ DoVcCommon ( NaeExit =3D WbinvdExit; break; =20 + case SvmExitMonitor: + NaeExit =3D MonitorExit; + break; + case SvmExitNpf: NaeExit =3D MmioExit; break; --=20 2.17.1 -=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 (#47665): https://edk2.groups.io/g/devel/message/47665 Mute This Topic: https://groups.io/mt/34203577/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- From nobody Sun May 5 15:05:55 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zoho.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+47666+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 1568922812350963.5271324850205; Thu, 19 Sep 2019 12:53:32 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id k6ClYY1788612xMnKDycm1Ik; Thu, 19 Sep 2019 12:53:32 -0700 X-Received: from NAM03-DM3-obe.outbound.protection.outlook.com (NAM03-DM3-obe.outbound.protection.outlook.com [40.107.80.73]) by groups.io with SMTP; Thu, 19 Sep 2019 12:53:31 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=NCUvrktq1NBgjYPXHXmWje0n5Il7xeR7V6U2eVabg4N8u1EhFiFHJyK2NbF6hsl9tYBOY5C/WiWyyNQqpWxdcPN7CRAmx0sh/PjqJrVMbuOzj0DeyQPsBXugStf3UHH2d9wjXgHBR2WOxV5YOJPAlgqdNr9CZu8ihe6y2FBKMFkCtekJ/o91W4GLk4LIRIOG7PL6Mr9nweKhx2DyZ8Vyf4F4Qpflxnl5p+tpJnpLVrBHhqO1DkNcBD7lw59ozPN1yy2s7fv8fC33q9KNrMtf897PugbkaWwhiHQVRwBTfRatAQwgdD8+hBtXkdmP1SbTQZcFFhVswk87NQ8m5A+qLw== 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=VJsdZLNLwAFjgUrrrfuA94lZw6nZchcwaL6rZUUQvNk=; b=l8cVpClA3BijSHymTffjYDLwNd0YJPaykeuSBSMvc0hy8i+YzOoWF+CSn0B7GD3aP4Clp36OWzLY2XsEa3PyStSXkk2tYCqkIo6nosGQdNVtVo6kWtYj9zVPbZkKFq1xx2NHqLM78QlRpSY178JsPzuE4bQdNI+8bMI2eRvr7Mm/448diiwKTQGnmvK18xVTY6srFhOLMO12N6Vp1Yj+oSbAT/YtJ8/VVg2fRajQZZMNy0//7zAv38SkjxKC2tDxg5iDh2eifzc3kOllQXkc6/FVSvvkUtX/M5GJZx4PvSfN3bHQLD/xLmd5/euLwwk7kdKUDMveVMAoK+zL98Ut5Q== 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 DM6PR12MB3163.namprd12.prod.outlook.com (20.179.104.150) by DM6PR12MB2890.namprd12.prod.outlook.com (20.179.71.152) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2263.23; Thu, 19 Sep 2019 19:53:30 +0000 X-Received: from DM6PR12MB3163.namprd12.prod.outlook.com ([fe80::400e:f0c3:7ca:2fcc]) by DM6PR12MB3163.namprd12.prod.outlook.com ([fe80::400e:f0c3:7ca:2fcc%6]) with mapi id 15.20.2284.009; Thu, 19 Sep 2019 19:53:30 +0000 From: "Lendacky, Thomas" To: "devel@edk2.groups.io" CC: Jordan Justen , Laszlo Ersek , Ard Biesheuvel , Michael D Kinney , Liming Gao , Eric Dong , Ray Ni , "Singh, Brijesh" Subject: [edk2-devel] [RFC PATCH v2 32/44] UefiCpuPkg/CpuExceptionHandler: Add support for MWAIT/MWAITX NAE events Thread-Topic: [RFC PATCH v2 32/44] UefiCpuPkg/CpuExceptionHandler: Add support for MWAIT/MWAITX NAE events Thread-Index: AQHVbyPXodt9usDq2kKJx9I9AlCr0w== Date: Thu, 19 Sep 2019 19:53:00 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: SN4PR0501CA0146.namprd05.prod.outlook.com (2603:10b6:803:2c::24) To DM6PR12MB3163.namprd12.prod.outlook.com (2603:10b6:5:182::22) x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [165.204.78.1] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 41a96a00-e1f3-4cae-43f4-08d73d3af9e3 x-ms-office365-filtering-ht: Tenant x-ms-traffictypediagnostic: DM6PR12MB2890: x-ms-exchange-purlcount: 1 x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:2000; Received-SPF: pass (zoho.com: domain of groups.io designates 66.175.222.12 as permitted sender) client-ip=66.175.222.12; envelope-from=bounce+27952+47666+1787277+3901457@groups.io; helo=web01.groups.io; received-spf: None (protection.outlook.com: amd.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: ZxoH9FCissiPoF5GmALBQax1f6MOcnxxpPWYaiqzdm281WeMZjRGkE0QzVzAnZKfgLe6L+cmbUDViBB1+DfnV6YfaaZQJzg70Wbsn4dkaDJXv9Qoy8365gz7cMioGRCjTdPa7/LB+Ba6Fz9+GwdyRIQ9xbOoi+JYfOYsyKaAofAURbiJxD2vnfRnla4sxe5ZTcTRfjy1aMPLFnH5+c9ocrjGPcZrncAifw0RvPq81wUdWu9FmpQR8mGBa+ymDF3pckoW9gALRX6XNbIVcjACXvS9KTh0zVULqs+0l6UeUOe5S6vIQ3+zmlmaCGRNm71iRy66ctkDwXiwWG2El1QRVR+i8JIotDlglc1ODH/njeMTKlTHpZ0SnbOv36ZKO5eZ2x0n9RJwqmbrRlaXl1/CsN3Bg+Yu4H024sxvORd5Dy4= MIME-Version: 1.0 X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: 41a96a00-e1f3-4cae-43f4-08d73d3af9e3 X-MS-Exchange-CrossTenant-originalarrivaltime: 19 Sep 2019 19:53:00.8041 (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: TWrSh7YmGPrQE2CfzMWk+y7Ez4KypLbjUtgOiFci2cKI8ZE0ReoIR8Udigd//kQRIhUv4DlrbtkW39/4SzYJuw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR12MB2890 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: EgS8vYsh9zM3V3q0tc06jRQtx1787277AA= Content-Language: en-US Content-ID: <9B68A38E8E562B4989194D601B15A767@namprd12.prod.outlook.com> Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1568922812; bh=tTYrChcVqo5UrRjkRDMBF5u00R+vTExfeIhOA2+wwX8=; h=CC:Content-Type:Date:From:Reply-To:Subject:To; b=Qn11g1kbIKjS/6QKH1jvuC+lTsblKCPg4u1lV8bU8Sl9hOyNRBRiRNUD8dRb4yyK9z1 ra5WaXPqsRYL2AHcmjoD/nZ6vyIXrwqvvM9n2rTYm6evkLwTNz0owq+Mo6hAN8ohYT4a9 V2hFh/+jgA8rn96rbi9atWCxckIqLg1dqM0= 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=3D2198 Under SEV-ES, a MWAIT/MWAITX intercept generates a #VC exception. VMGEXIT must be used to allow the hypervisor to handle this intercept. Cc: Eric Dong Cc: Ray Ni Cc: Laszlo Ersek Signed-off-by: Tom Lendacky --- .../X64/AMDSevVcCommon.c | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/UefiCpuPkg/Library/CpuExceptionHandlerLib/X64/AMDSevVcCommon.c= b/UefiCpuPkg/Library/CpuExceptionHandlerLib/X64/AMDSevVcCommon.c index 824175a80b9b..8cb595e5a625 100644 --- a/UefiCpuPkg/Library/CpuExceptionHandlerLib/X64/AMDSevVcCommon.c +++ b/UefiCpuPkg/Library/CpuExceptionHandlerLib/X64/AMDSevVcCommon.c @@ -555,6 +555,31 @@ UnsupportedExit ( return Status; } =20 +STATIC +UINTN +MwaitExit ( + GHCB *Ghcb, + EFI_SYSTEM_CONTEXT_X64 *Regs, + SEV_ES_INSTRUCTION_DATA *InstructionData + ) +{ + UINTN Status; + + DecodeModRm (Regs, InstructionData); + + Ghcb->SaveArea.Rax =3D Regs->Rax; + GhcbSetRegValid (Ghcb, GhcbRax); + Ghcb->SaveArea.Rcx =3D Regs->Rcx; + GhcbSetRegValid (Ghcb, GhcbRcx); + + Status =3D VmgExit (Ghcb, SvmExitMwait, 0, 0); + if (Status) { + return Status; + } + + return 0; +} + STATIC UINTN MonitorExit ( @@ -1082,6 +1107,10 @@ DoVcCommon ( NaeExit =3D MonitorExit; break; =20 + case SvmExitMwait: + NaeExit =3D MwaitExit; + break; + case SvmExitNpf: NaeExit =3D MmioExit; break; --=20 2.17.1 -=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 (#47666): https://edk2.groups.io/g/devel/message/47666 Mute This Topic: https://groups.io/mt/34203578/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- From nobody Sun May 5 15:05:55 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zoho.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+47667+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 1568922812938846.974548188885; Thu, 19 Sep 2019 12:53:32 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id mdunYY1788612x1fRPWkgYrQ; Thu, 19 Sep 2019 12:53:32 -0700 X-Received: from NAM03-DM3-obe.outbound.protection.outlook.com (NAM03-DM3-obe.outbound.protection.outlook.com [40.107.80.52]) by groups.io with SMTP; Thu, 19 Sep 2019 12:53:32 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=VZiZrIH6BXl04yuP7mFlR28l77nyJC2mymR8PD91CvQ7xYz1VGOfRHYqzvOVOtd9CF2AdPD3IzlYmqD9IZlANKgfDMqN1GtuO2RwrnKqL6yokXI7vgXA5Dkw7+cS/W2KJrgDSqcpQMtf6hCaKmEcrdWy8Pbi+uwL35p74jSFrccEQmjDYYjv9y7DionNi1mcZVhXXx6z/PhOqKERZqG82sDl30rQW4pkBNRW3Xxpc1jMCHsiCijo8PMn9d5eyY51YfrBX/plSjYihTpJ2kEwH7gn4QEK72MvcVIlouq6CULu/9CJ0ONhDDJjNoAbHPwKatkTQOOJaDqwBFA810Hn9Q== 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=kjnLU4SFNQp46jyZwW0LqRzBLK0CNnSEY94xEQi29uA=; b=LYpejySM7aB62OJrA0OEkeQzFW4hfWsQ4AUzwSojsGKxGsMYtoya5cz8svVtRI1V1lVz6huOMokF/RPQ1S24wzdrFH24dWKNYFVq8Imj5qORv0e1wYSNjD0djRv2gzHFTSiDDUOk97f+uUSSghrXonqaEHp0cYnHktwwoAmiAqC9OG+KK5PE+YW45eNYv3AnuZB6Ky7EQXlX9ZDRXyNBl80RNQUeNmdNCtxW8km+XKkpAY1zCN9qdFGAuzZH4cRa0Xpxp+40oGPd4TisOxHejwaRMUxsmQTEuOhSEow3ejGyeEvufA2/NuwwwFSdxP74N4l0BZHb5/wtL4O/oNdSuA== 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 DM6PR12MB3163.namprd12.prod.outlook.com (20.179.104.150) by DM6PR12MB2890.namprd12.prod.outlook.com (20.179.71.152) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2263.23; Thu, 19 Sep 2019 19:53:30 +0000 X-Received: from DM6PR12MB3163.namprd12.prod.outlook.com ([fe80::400e:f0c3:7ca:2fcc]) by DM6PR12MB3163.namprd12.prod.outlook.com ([fe80::400e:f0c3:7ca:2fcc%6]) with mapi id 15.20.2284.009; Thu, 19 Sep 2019 19:53:30 +0000 From: "Lendacky, Thomas" To: "devel@edk2.groups.io" CC: Jordan Justen , Laszlo Ersek , Ard Biesheuvel , Michael D Kinney , Liming Gao , Eric Dong , Ray Ni , "Singh, Brijesh" Subject: [edk2-devel] [RFC PATCH v2 33/44] UefiCpuPkg/CpuExceptionHandler: Add support for DR7 Read/Write NAE events Thread-Topic: [RFC PATCH v2 33/44] UefiCpuPkg/CpuExceptionHandler: Add support for DR7 Read/Write NAE events Thread-Index: AQHVbyPYnPncdzoKnEGPgRIbrBXsGw== Date: Thu, 19 Sep 2019 19:53:01 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: SN4PR0501CA0146.namprd05.prod.outlook.com (2603:10b6:803:2c::24) To DM6PR12MB3163.namprd12.prod.outlook.com (2603:10b6:5:182::22) x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [165.204.78.1] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: eba83b9d-bbef-40b3-7aab-08d73d3afa79 x-ms-office365-filtering-ht: Tenant x-ms-traffictypediagnostic: DM6PR12MB2890: x-ms-exchange-purlcount: 1 x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:7219; Received-SPF: pass (zoho.com: domain of groups.io designates 66.175.222.12 as permitted sender) client-ip=66.175.222.12; envelope-from=bounce+27952+47667+1787277+3901457@groups.io; helo=web01.groups.io; received-spf: None (protection.outlook.com: amd.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: 8bWPk2PXUQGgYUL9aOccAG5cSpNCipnoQuSW3vFtsy9gZjkEkS4L86Wfv+wVuMiSjnNXGZpwW1R0sELuXxm2Bjrgah0yb9YBT2fWkrK2JKjcwOFGmcwjGz7IzBMnrwhwglUz3OgZDDHi7ZWRz71f5/Ystf491hutCPrM0vL4OwyrYPE7NlyTC7NC2due9DcbjtIwYLJ4eBVBJPDM9+CLKFsoVLYueW1/sCnOQKEh1IU3gTOxgEKY0Bs95LANcW3K2SRf1DDf2Zabn/w79JZxQV09C2xcOEbaVsiV1m1T/9Etw+A1y1G25AyupAYOOqF0g5LWg8G8qEzVBse/khp8RZ77mJSt4lCPCuUYY6bbqM/ANcJluysqFX9uACz5s5SRgYygSbFcBydM3ZruWe1VW7oOh1WuggBHuiRVEk1iHLA= MIME-Version: 1.0 X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: eba83b9d-bbef-40b3-7aab-08d73d3afa79 X-MS-Exchange-CrossTenant-originalarrivaltime: 19 Sep 2019 19:53:01.7866 (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: T2WKusmP/UkrL4F/q/lArf7yBXWUrlOtdl46vIHVeL6oktW9FOXNOKVSOC+vLhR4RArlQEJvqEWzxDCWzkhCmA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR12MB2890 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: KcmQQVqePOgjELtJcDEW9Ndcx1787277AA= Content-Language: en-US Content-ID: Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1568922812; bh=tP0auTPeEKlH0OB+ia61lxURXl7qID0CHtzzl4SBzC8=; h=CC:Content-Type:Date:From:Reply-To:Subject:To; b=udI2bmA1bSdo2oJK2phWPvq+RpnIT7aZdmmglqgaAGuYbIW/57s3Ts1UXzFveOKvhtr /L3Sn8qY+lEZCMDojGYtwmGWrxUq8RkX7T7e+pJgARmKlwgncvi04WXzkm9maTz80Rfmx MnWxAgWaQ4mwrxHaw3i/urmgUtCWEybQezc= 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=3D2198 Under SEV-ES, a DR7 read or write intercept generates a #VC exception. The #VC handler must provide special support to the guest for this. On a DR7 write, the #VC handler must cache the value and issue a VMGEXIT to notify the hypervisor of the write. However, the #VC handler must not actually set the value of the DR7 register. On a DR7 read, the #VC handler must return the cached value of the DR7 register to the guest. VMGEXIT is not invoked for a DR7 register read. To avoid exception recursion, a #VC exception will not try to read and push the actual debug registers into the EFI_SYSTEM_CONTEXT_X64 struct and instead push zeroes. The #VC exception handler does not make use of the debug registers from saved context. Cc: Eric Dong Cc: Ray Ni Cc: Laszlo Ersek Signed-off-by: Tom Lendacky --- .../X64/AMDSevVcCommon.c | 68 +++++++++++++++++++ .../X64/ExceptionHandlerAsm.nasm | 15 ++++ 2 files changed, 83 insertions(+) diff --git a/UefiCpuPkg/Library/CpuExceptionHandlerLib/X64/AMDSevVcCommon.c= b/UefiCpuPkg/Library/CpuExceptionHandlerLib/X64/AMDSevVcCommon.c index 8cb595e5a625..39e005618715 100644 --- a/UefiCpuPkg/Library/CpuExceptionHandlerLib/X64/AMDSevVcCommon.c +++ b/UefiCpuPkg/Library/CpuExceptionHandlerLib/X64/AMDSevVcCommon.c @@ -6,6 +6,12 @@ =20 #define CR4_OSXSAVE (1 << 18) =20 +#define DR7_RESET_VALUE 0x400 +typedef struct { + BOOLEAN Dr7Cached; + UINT64 Dr7; +} SEV_ES_PER_CPU_DATA; + typedef enum { LongMode64Bit =3D 0, LongModeCompat32Bit, @@ -1051,6 +1057,60 @@ RdtscExit ( return 0; } =20 +STATIC +UINTN +Dr7WriteExit ( + GHCB *Ghcb, + EFI_SYSTEM_CONTEXT_X64 *Regs, + SEV_ES_INSTRUCTION_DATA *InstructionData + ) +{ + SEV_ES_INSTRUCTION_OPCODE_EXT *Ext =3D &InstructionData->Ext; + SEV_ES_PER_CPU_DATA *SevEsData =3D (SEV_ES_PER_CPU_DATA *) (G= hcb + 1); + INTN *Register; + UINTN Status; + + DecodeModRm (Regs, InstructionData); + + /* MOV DRn always treats MOD =3D=3D 3 no matter how encoded */ + Register =3D GetRegisterPointer (Regs, Ext->ModRm.Rm); + + /* Using a value of 0 for ExitInfo1 means RAX holds the value */ + Ghcb->SaveArea.Rax =3D *Register; + GhcbSetRegValid (Ghcb, GhcbRax); + + Status =3D VmgExit (Ghcb, SvmExitDr7Write, 0, 0); + if (Status) { + return Status; + } + + SevEsData->Dr7 =3D *Register; + SevEsData->Dr7Cached =3D TRUE; + + return 0; +} + +STATIC +UINTN +Dr7ReadExit ( + GHCB *Ghcb, + EFI_SYSTEM_CONTEXT_X64 *Regs, + SEV_ES_INSTRUCTION_DATA *InstructionData + ) +{ + SEV_ES_INSTRUCTION_OPCODE_EXT *Ext =3D &InstructionData->Ext; + SEV_ES_PER_CPU_DATA *SevEsData =3D (SEV_ES_PER_CPU_DATA *) (G= hcb + 1); + INTN *Register; + + DecodeModRm (Regs, InstructionData); + + /* MOV DRn always treats MOD =3D=3D 3 no matter how encoded */ + Register =3D GetRegisterPointer (Regs, Ext->ModRm.Rm); + *Register =3D (SevEsData->Dr7Cached) ? SevEsData->Dr7 : DR7_RESET_VALUE; + + return 0; +} + UINTN DoVcCommon ( GHCB *Ghcb, @@ -1067,6 +1127,14 @@ DoVcCommon ( =20 ExitCode =3D Regs->ExceptionData; switch (ExitCode) { + case SvmExitDr7Read: + NaeExit =3D Dr7ReadExit; + break; + + case SvmExitDr7Write: + NaeExit =3D Dr7WriteExit; + break; + case SvmExitRdtsc: NaeExit =3D RdtscExit; break; diff --git a/UefiCpuPkg/Library/CpuExceptionHandlerLib/X64/ExceptionHandler= Asm.nasm b/UefiCpuPkg/Library/CpuExceptionHandlerLib/X64/ExceptionHandlerAs= m.nasm index 4db1a09f2881..d23af671df66 100644 --- a/UefiCpuPkg/Library/CpuExceptionHandlerLib/X64/ExceptionHandlerAsm.nasm +++ b/UefiCpuPkg/Library/CpuExceptionHandlerLib/X64/ExceptionHandlerAsm.nasm @@ -223,6 +223,9 @@ HasErrorCode: push rax =20 ;; UINT64 Dr0, Dr1, Dr2, Dr3, Dr6, Dr7; + cmp qword [rbp + 8], 29 + je VcDebugRegs ; For SEV-ES (#VC) Debug registers ignored + mov rax, dr7 push rax mov rax, dr6 @@ -235,7 +238,19 @@ HasErrorCode: push rax mov rax, dr0 push rax + jmp DrFinish =20 +VcDebugRegs: +;; UINT64 Dr0, Dr1, Dr2, Dr3, Dr6, Dr7 are skipped for #VC to avoid excep= tion recursion + xor rax, rax + push rax + push rax + push rax + push rax + push rax + push rax + +DrFinish: ;; FX_SAVE_STATE_X64 FxSaveState; sub rsp, 512 mov rdi, rsp --=20 2.17.1 -=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 (#47667): https://edk2.groups.io/g/devel/message/47667 Mute This Topic: https://groups.io/mt/34203579/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- From nobody Sun May 5 15:05:55 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zoho.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+47668+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 1568922814268163.9196889501883; Thu, 19 Sep 2019 12:53:34 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id JJFaYY1788612xxTlBPTqEV5; Thu, 19 Sep 2019 12:53:33 -0700 X-Received: from NAM05-DM3-obe.outbound.protection.outlook.com (NAM05-DM3-obe.outbound.protection.outlook.com [40.107.73.53]) by groups.io with SMTP; Thu, 19 Sep 2019 12:53:33 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=mXAhDWeg4FppfNQ6iuzxrNZAnyuZ+kfmFUquINrfenjQ6R7+xnFg9Qktm34BoLRKKHWD8EsHaA1id7ZUFux90TUUl/JYkYN6BGFLSaJoItG1vh8f5D1pc5MH7f2Y52+6CoDpCcxWpe+Kjaa8ZB8OxfAxcDmbpbKtFKZBphn0oKpNfED1kf9lls0Y7F/IugRoRoGlPEVnkcEr6nnmXtRwc3CPLT16cnuo3i0hAHRpmkgIlgvVfmPzcMz1Ze4EEL92X2s/12TQ6OGX0br1TZxBoYOwuX7vtbZAZMzZA1PrIIyme2KfAFc4wrV1NBpYZ3W/oD6Spl/HuJ3pR5dsizKSzQ== 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=Aya8guyxdUIOxxdwaEDcLy/dIdIRjxQBqt8b41zn4b8=; b=mheVrrJFPksEgExiG4lAtLYFNIG0wxLgUh31vCPqFZyhCkF7lpG0gB272EhyAXDRmXmZQOOun1ExibYyleF6q+NwhBhYxRSsomxe1x/Q+3e8zSAolyK7bNokgKIyDb4kk/SN+dFCoYuKujYiPE2B1l6Wm+E/WG4BegxVDZnxz5x4QYTqc7hQyEL0EJ9XTqFhfsdMlHUVp7XEVFNhRxAsYFTlE7j20C7Q++HrpF2ErP6lAEkhDoTKl+3TTVPHCYWwuHl2GmXQpuI6/IMK68VHc1FmXz7FDSvyGgcJWDQyfkuW24w8tEdQ1+VkLsfNTtAne4sY13hwYPVWQCdzOUV/RA== 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 DM6PR12MB3163.namprd12.prod.outlook.com (20.179.104.150) by DM6PR12MB3372.namprd12.prod.outlook.com (20.178.198.27) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2263.22; Thu, 19 Sep 2019 19:53:31 +0000 X-Received: from DM6PR12MB3163.namprd12.prod.outlook.com ([fe80::400e:f0c3:7ca:2fcc]) by DM6PR12MB3163.namprd12.prod.outlook.com ([fe80::400e:f0c3:7ca:2fcc%6]) with mapi id 15.20.2284.009; Thu, 19 Sep 2019 19:53:31 +0000 From: "Lendacky, Thomas" To: "devel@edk2.groups.io" CC: Jordan Justen , Laszlo Ersek , Ard Biesheuvel , Michael D Kinney , Liming Gao , Eric Dong , Ray Ni , "Singh, Brijesh" Subject: [edk2-devel] [RFC PATCH v2 34/44] UefiCpuPkg/MpInitLib: Update CPU MP data with a flag to indicate if SEV-ES is active Thread-Topic: [RFC PATCH v2 34/44] UefiCpuPkg/MpInitLib: Update CPU MP data with a flag to indicate if SEV-ES is active Thread-Index: AQHVbyPYDo8W7uu+LES7nsMcHaZ0ig== Date: Thu, 19 Sep 2019 19:53:02 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: SN4PR0501CA0146.namprd05.prod.outlook.com (2603:10b6:803:2c::24) To DM6PR12MB3163.namprd12.prod.outlook.com (2603:10b6:5:182::22) x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [165.204.78.1] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 7fc5a8ce-018d-4939-e0bb-08d73d3afb14 x-ms-office365-filtering-ht: Tenant x-ms-traffictypediagnostic: DM6PR12MB3372: x-ms-exchange-purlcount: 1 x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:7691; Received-SPF: pass (zoho.com: domain of groups.io designates 66.175.222.12 as permitted sender) client-ip=66.175.222.12; envelope-from=bounce+27952+47668+1787277+3901457@groups.io; helo=web01.groups.io; received-spf: None (protection.outlook.com: amd.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: S1IoaWOIugmtQ/reTeBaq5YvqxjAfgvQuV5rL45J0CNcGrHnwHvtoQWI+MNvUvVaEIeHL6BwCxZgLdYkYslDelKEqFrAjP8uVGVGDk91h2r6cA2WHx0O7+aGRlwqJzjc6seae7EcVOtKRrY+h/YnWSElqzIlwIEjNFRZ88Sno27ImCL0gpJlG6etI2aJynIuoVd2oFp74lMaqAGBVX67dEvz1VcTXiMqmzLB6vcYfYDYxONnqEF39CRKwNHinKfjRy2aY8RBHD3IBYxKvdhrGybohk37x/LRCtB4QalIdYbpJuSeTqj6Mqz7clLkzNhvM3yinDNn5J/68htzmeAUQxXbDWwDNdUodbQK6Nah5dy3C3OBWezoDeZpYykVlvm6G4sQKTVO3e7uxCI9dZDk3h30jNkvOt1hwyEraFjfIFk= MIME-Version: 1.0 X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: 7fc5a8ce-018d-4939-e0bb-08d73d3afb14 X-MS-Exchange-CrossTenant-originalarrivaltime: 19 Sep 2019 19:53:02.7890 (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: 31rlw5JKZkKgLgx+Wg/mL3Jk/VpDCl3VYiiCNc21XE0jTxGO7GQQAo4sdheQcjF+HeZEWzXvv6wDVfDpYbTlhw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR12MB3372 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: mPf82NFhgLzMkHnOpJtYH3H6x1787277AA= Content-Language: en-US Content-ID: <95AB333D2576334CAAB7CB14D749A432@namprd12.prod.outlook.com> Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1568922813; bh=IxqHK2l55xqBTKBQW7dVua243yf1T4avE1wIvnK+ImI=; h=CC:Content-Type:Date:From:Reply-To:Subject:To; b=gmTGVLtQcegSBzuiCezjnl9yJ/BiciQCbYESci96Emu5WAa2d97TAg9Sf5qxEfZinJE +V6RB6Mq8hBttUOlxOAlZRZPNrr/rWFrPLsqykUQ/7SB3f8H7HmkE6++cf+NHVM892cVA oycaJySjZH1N5vd0Gp2U59YyzdEMWyKerKE= 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=3D2198 When starting APs in an SMP configuration, the AP needs to know if it is running as an SEV-ES guest in order to assign a GHCB page. Add a field to the CPU_MP_DATA structure that will indicate if SEV-ES is active. This new field is set during MP library initialization with the PCD value PcdSevEsActive. This flag can then be used to determine if SEV-ES is active. Cc: Eric Dong Cc: Ray Ni Cc: Laszlo Ersek Signed-off-by: Tom Lendacky --- UefiCpuPkg/Library/MpInitLib/DxeMpInitLib.inf | 1 + UefiCpuPkg/Library/MpInitLib/PeiMpInitLib.inf | 1 + UefiCpuPkg/Library/MpInitLib/MpLib.h | 2 ++ UefiCpuPkg/Library/MpInitLib/MpLib.c | 1 + 4 files changed, 5 insertions(+) diff --git a/UefiCpuPkg/Library/MpInitLib/DxeMpInitLib.inf b/UefiCpuPkg/Lib= rary/MpInitLib/DxeMpInitLib.inf index 37b3f64e578a..557507e9a466 100644 --- a/UefiCpuPkg/Library/MpInitLib/DxeMpInitLib.inf +++ b/UefiCpuPkg/Library/MpInitLib/DxeMpInitLib.inf @@ -68,4 +68,5 @@ [Pcd] gUefiCpuPkgTokenSpaceGuid.PcdCpuApLoopMode ## CONS= UMES gUefiCpuPkgTokenSpaceGuid.PcdCpuApTargetCstate ## SOME= TIMES_CONSUMES gEfiMdeModulePkgTokenSpaceGuid.PcdCpuStackGuard ## CONS= UMES + gEfiMdeModulePkgTokenSpaceGuid.PcdSevEsActive ## CONS= UMES =20 diff --git a/UefiCpuPkg/Library/MpInitLib/PeiMpInitLib.inf b/UefiCpuPkg/Lib= rary/MpInitLib/PeiMpInitLib.inf index 82b77b63ea87..f26ffd5a2ef5 100644 --- a/UefiCpuPkg/Library/MpInitLib/PeiMpInitLib.inf +++ b/UefiCpuPkg/Library/MpInitLib/PeiMpInitLib.inf @@ -59,6 +59,7 @@ [Pcd] gUefiCpuPkgTokenSpaceGuid.PcdCpuMicrocodePatchRegionSize ## CONS= UMES gUefiCpuPkgTokenSpaceGuid.PcdCpuApLoopMode ## CONS= UMES gUefiCpuPkgTokenSpaceGuid.PcdCpuApTargetCstate ## SOME= TIMES_CONSUMES + gEfiMdeModulePkgTokenSpaceGuid.PcdSevEsActive ## CONS= UMES =20 [Guids] gEdkiiS3SmmInitDoneGuid diff --git a/UefiCpuPkg/Library/MpInitLib/MpLib.h b/UefiCpuPkg/Library/MpIn= itLib/MpLib.h index 107872b3679c..1dfe9a9cd756 100644 --- a/UefiCpuPkg/Library/MpInitLib/MpLib.h +++ b/UefiCpuPkg/Library/MpInitLib/MpLib.h @@ -260,6 +260,8 @@ struct _CPU_MP_DATA { // driver. // BOOLEAN WakeUpByInitSipiSipi; + + BOOLEAN SevEsActive; }; =20 extern EFI_GUID mCpuInitMpLibHobGuid; diff --git a/UefiCpuPkg/Library/MpInitLib/MpLib.c b/UefiCpuPkg/Library/MpIn= itLib/MpLib.c index d6f84c6f45c0..3e20900ec7bc 100644 --- a/UefiCpuPkg/Library/MpInitLib/MpLib.c +++ b/UefiCpuPkg/Library/MpInitLib/MpLib.c @@ -1657,6 +1657,7 @@ MpInitLibInitialize ( CpuMpData->MicrocodePatchAddress =3D OldCpuMpData->MicrocodePatchAd= dress; } InitializeSpinLock(&CpuMpData->MpLock); + CpuMpData->SevEsActive =3D PcdGetBool (PcdSevEsActive); =20 // // Make sure no memory usage outside of the allocated buffer. --=20 2.17.1 -=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 (#47668): https://edk2.groups.io/g/devel/message/47668 Mute This Topic: https://groups.io/mt/34203580/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- From nobody Sun May 5 15:05:55 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zoho.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+47669+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 1568922814623491.2522606670291; Thu, 19 Sep 2019 12:53:34 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id 1tNJYY1788612x2Pc0dbCCUz; Thu, 19 Sep 2019 12:53:34 -0700 X-Received: from NAM05-DM3-obe.outbound.protection.outlook.com (NAM05-DM3-obe.outbound.protection.outlook.com []) by groups.io with SMTP; Thu, 19 Sep 2019 12:53:33 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=HDBBbuCrKNSLIssNAOvVccJmMU6VqNFWRgAr9qaRPe0RYxXevzlan92/hv8iO/kPnZU1gsis7hTkXCZh8iTAz1dydldBnd7LeejblTuNgWdfz1GTO1UWR8qGiauu34kTwm6ZJkFnxDDHVSpwqZvNFFtiGQvWFSoBqSteXc0mRfmm0ZF0dAGhiNDat+ONQe8EJgwVEtnFDoX4Vmf9AhdM1bHiMOnWFr+4L92SmeuJulfZaQVq3y5AuB4VHTVtVMm7UR5eYKexYjMEo10gbZrueOYvbr45gPGrVxZYYDDdYgAEEGZNxA5zTsgbJtlKb+E7D6Zs6qo3oI2jiJCQ/c7+xw== 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=UQY7TP2AK37rIjh/mOxsziNXkO8cG3uPdmCkWgWgjoM=; b=BJzSKIQiKx9HP4NtxeIiDHC8vtz0sImE8xixAmvDRZB6ag1K9yYSsxNvWJJ/v2ovNJO/8mR9+K29Hg5VOJPtKM7WCjq/PO7P4P+S6hhL/AbGbvvqPwb5dsPpY6nJd3pZ/Lpz0xM9/dSoyiKox3Y+MePzW+emMeo7yxz+JwU7U56hjCWgapejHxp1PWpF7U/Ud0SOp9KarimzD6gdxChgcN3juV9aHyCIZotC1DQExH67s5gOPX1+9OpRxrshkMR81hmDw6HcVowNzIhrohdM6nckmdpQWUOR9r5OCNuT1+MQvHgEap2DOCTUrrJ6gFZKHKCVci6Iy+3MEU3Z3xVvLw== 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 DM6PR12MB3163.namprd12.prod.outlook.com (20.179.104.150) by DM6PR12MB3372.namprd12.prod.outlook.com (20.178.198.27) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2263.22; Thu, 19 Sep 2019 19:53:32 +0000 X-Received: from DM6PR12MB3163.namprd12.prod.outlook.com ([fe80::400e:f0c3:7ca:2fcc]) by DM6PR12MB3163.namprd12.prod.outlook.com ([fe80::400e:f0c3:7ca:2fcc%6]) with mapi id 15.20.2284.009; Thu, 19 Sep 2019 19:53:32 +0000 From: "Lendacky, Thomas" To: "devel@edk2.groups.io" CC: Jordan Justen , Laszlo Ersek , Ard Biesheuvel , Michael D Kinney , Liming Gao , Eric Dong , Ray Ni , "Singh, Brijesh" , Jian J Wang , Hao A Wu , Dandan Bi Subject: [edk2-devel] [RFC PATCH v2 35/44] MdeModulePkg: Reserve a 16-bit protected mode code segment descriptor Thread-Topic: [RFC PATCH v2 35/44] MdeModulePkg: Reserve a 16-bit protected mode code segment descriptor Thread-Index: AQHVbyPZsVmbXlP6P0KLPv8MmB931w== Date: Thu, 19 Sep 2019 19:53:04 +0000 Message-ID: <5bfd380278d8098f23b39c018e76c551af848ef2.1568922729.git.thomas.lendacky@amd.com> References: In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: SN4PR0501CA0146.namprd05.prod.outlook.com (2603:10b6:803:2c::24) To DM6PR12MB3163.namprd12.prod.outlook.com (2603:10b6:5:182::22) x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [165.204.78.1] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 9a673f70-cf4a-4d55-6bfe-08d73d3afbcb x-ms-office365-filtering-ht: Tenant x-ms-traffictypediagnostic: DM6PR12MB3372: x-ms-exchange-purlcount: 1 x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:4303; Received-SPF: pass (zoho.com: domain of groups.io designates 66.175.222.12 as permitted sender) client-ip=66.175.222.12; envelope-from=bounce+27952+47669+1787277+3901457@groups.io; helo=web01.groups.io; received-spf: None (protection.outlook.com: amd.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: IgQ9S8JDfzfTzPfFLVLKAqfADbMYzkVkBF+WBzKZUTDzKv2J7jEcRPqx2iZT32urNAIcqr1OLd7yeX53xhFf7y4Jgh9uHKdaEOLgqdWvD9+qBFN5atywibZhpvfwahKg0n5qfKRpfc/0o2qnLngqco1FCLiIIQHfpxANN3h6WWEtyT7W+YHKUHRSV6nsg+QSPoJEmnCIGkVxX46lLLdue86FZ1UOKvR0dCKY78NHuZYYC5I4lIO/bEymAIIyV+BbfFk/TyfeZFNpLc9sls+y5QPjI/tSDXU46ghQhEzcrB3Psjfs+Z2AuGzTI1ctqveepJ5fdzCRP6B16tbUMkhn8ymoAEnjnOl72KFz33FlOAw0mS7lf+VksiIUqMpeCLGoYl9mcf5uXb7kpbPpjCSHKZjk3FW7by7fkh3dDoQoG3Y= MIME-Version: 1.0 X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: 9a673f70-cf4a-4d55-6bfe-08d73d3afbcb X-MS-Exchange-CrossTenant-originalarrivaltime: 19 Sep 2019 19:53:04.0253 (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: gNeplsynD/QjxSZrj9qapxC+j4NA7sRd2EfKawSLngIVm2qZfw8OU+9MuymEpwWAkX8cyEKjo9mhhV9S5/WZfA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR12MB3372 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: WETDR4RmPf6i9RTRxksufJqxx1787277AA= Content-Language: en-US Content-ID: Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1568922814; bh=HQU8seyJdjihObVHbl+FXRr6Hlp0xBKi7u4NJYBAKkc=; h=CC:Content-Type:Date:From:Reply-To:Subject:To; b=Un/S47yyrjAK9VnqEgcJFSg/+/vPrGsRHOGPnMhxHDJTK/xNtiCONlWUXsZSVWXQY+j QNcCNIqmFm79HSmAjfbLl7+IP+17PvWf4yJD4jz2k/WXblMQRTVHj0P0GJL6Q9RGrlKDQ 8ju+sI9XKMqmSGkO1g8UMRnofKbm03TwXcg= 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=3D2198 SEV-ES guest AP boot support needs to transition from 64-bit long mode into 16-bit real mode. This will require a 16-bit code segment descriptor. Reserve one of the spare segment descriptors (0x28) for this purpose. Cc: Jian J Wang Cc: Hao A Wu Cc: Dandan Bi Cc: Liming Gao Signed-off-by: Tom Lendacky --- MdeModulePkg/Core/DxeIplPeim/Ia32/DxeLoadFunc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MdeModulePkg/Core/DxeIplPeim/Ia32/DxeLoadFunc.c b/MdeModulePkg= /Core/DxeIplPeim/Ia32/DxeLoadFunc.c index 630a3503f6ba..b9af22bede61 100644 --- a/MdeModulePkg/Core/DxeIplPeim/Ia32/DxeLoadFunc.c +++ b/MdeModulePkg/Core/DxeIplPeim/Ia32/DxeLoadFunc.c @@ -33,7 +33,7 @@ GLOBAL_REMOVE_IF_UNREFERENCED IA32_GDT gGdtEntries[] =3D { /* 0x10 */ {{0xffff, 0, 0, 0xf, 1, 0, 1, 0xf, 0, 0, 1, 1, 0}}, = //linear code segment descriptor /* 0x18 */ {{0xffff, 0, 0, 0x3, 1, 0, 1, 0xf, 0, 0, 1, 1, 0}}, = //system data segment descriptor /* 0x20 */ {{0xffff, 0, 0, 0xa, 1, 0, 1, 0xf, 0, 0, 1, 1, 0}}, = //system code segment descriptor -/* 0x28 */ {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, = //spare segment descriptor +/* 0x28 */ {{0xffff, 0, 0, 0xa, 1, 0, 1, 0xf, 0, 0, 0, 1, 0}}, = //system code16 segment descriptor /* 0x30 */ {{0xffff, 0, 0, 0x2, 1, 0, 1, 0xf, 0, 0, 1, 1, 0}}, = //system data segment descriptor /* 0x38 */ {{0xffff, 0, 0, 0xa, 1, 0, 1, 0xf, 0, 1, 0, 1, 0}}, = //system code segment descriptor /* 0x40 */ {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, = //spare segment descriptor --=20 2.17.1 -=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 (#47669): https://edk2.groups.io/g/devel/message/47669 Mute This Topic: https://groups.io/mt/34203581/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- From nobody Sun May 5 15:05:55 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zoho.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+47670+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 1568922816351286.0595010477223; Thu, 19 Sep 2019 12:53:36 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id 31S5YY1788612xkXnwBSenD9; Thu, 19 Sep 2019 12:53:35 -0700 X-Received: from NAM02-BL2-obe.outbound.protection.outlook.com (NAM02-BL2-obe.outbound.protection.outlook.com [40.107.75.84]) by groups.io with SMTP; Thu, 19 Sep 2019 12:53:34 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=jksQNvfeRRVo3KfY1efzoHgL8P4wSnW2fH3POxPstTyGvCQZR1A4H2lpKXnANkNnZ2GoQps8QvKA0NsS02gz1RhmzTjRlk44BQP2Hxk4ThSQaCAblcyY+tCgSVRr4ndYPRrJAaYwz5Kx5WlLUXRxYkUncwA4z/giGRaXL/GkqKHrvfRgH6pw1tTfS83F6lpu7LLvvzngO3FS1RuqhWofakWVPNajFwOLpTI6MbZmVGHkDo76qRJm2+ua8IqZ5XAzlNnksFSrcZenuCVomqA6zKRYOJJrnaesFouYyF0a6uFbfDCYR7XjIPvOQB6PuUwEqLBwwXOwWLS3fl2R1X9j8g== 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=Nsx5zK7VDJQOuE0A1QPRiMXxppl5JOWaxgzvCQaVGBA=; b=NuvKQjxwT+DrfFOPGwyIS3EW4ozb0EfDqxjQpWj7joYNEoQ7h4HAK3cRkzu5aqPvZxLz5uc6oy7JjVOK3Oi2puDVDP46NitrewA3XHPueze9C6mbpGkB4YtGSbYWr/+ooah3tWuvWo3CSD/AoINhBjiRA19Yg2KTyOQslpLMIwGlbKUS3s8BjHdw9Qly8hEs99THwaLiXdjNEEjoXzoJfEuc143mbFKpes5mK3VqPP+xnSUK31jrqJ//9AafGgmox3GN9t6T96tz2GCZ/ZwiUtUuWILHQSqpIz2oFz6J0CKEFGawRNREvmkH2EBhcPai04THTWA5N96k6/iElEoH5w== 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 DM6PR12MB3163.namprd12.prod.outlook.com (20.179.104.150) by DM6PR12MB3372.namprd12.prod.outlook.com (20.178.198.27) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2263.22; Thu, 19 Sep 2019 19:53:33 +0000 X-Received: from DM6PR12MB3163.namprd12.prod.outlook.com ([fe80::400e:f0c3:7ca:2fcc]) by DM6PR12MB3163.namprd12.prod.outlook.com ([fe80::400e:f0c3:7ca:2fcc%6]) with mapi id 15.20.2284.009; Thu, 19 Sep 2019 19:53:33 +0000 From: "Lendacky, Thomas" To: "devel@edk2.groups.io" CC: Jordan Justen , Laszlo Ersek , Ard Biesheuvel , Michael D Kinney , Liming Gao , Eric Dong , Ray Ni , "Singh, Brijesh" Subject: [edk2-devel] [RFC PATCH v2 36/44] UefiCpuPkg: Add a 16-bit protected mode code segment descriptor Thread-Topic: [RFC PATCH v2 36/44] UefiCpuPkg: Add a 16-bit protected mode code segment descriptor Thread-Index: AQHVbyPacosZqZf/p0KaFHkP5//L6g== Date: Thu, 19 Sep 2019 19:53:04 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: SN4PR0501CA0146.namprd05.prod.outlook.com (2603:10b6:803:2c::24) To DM6PR12MB3163.namprd12.prod.outlook.com (2603:10b6:5:182::22) x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [165.204.78.1] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 9544882e-57b5-492c-4ba8-08d73d3afc65 x-ms-office365-filtering-ht: Tenant x-ms-traffictypediagnostic: DM6PR12MB3372: x-ms-exchange-purlcount: 1 x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:5797; Received-SPF: pass (zoho.com: domain of groups.io designates 66.175.222.12 as permitted sender) client-ip=66.175.222.12; envelope-from=bounce+27952+47670+1787277+3901457@groups.io; helo=web01.groups.io; received-spf: None (protection.outlook.com: amd.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: y+0We0PBO3IJpKDK5rfy+WrsZOAYiU+Q6iTvqeYFKA3MVODZHMdLFWWv++tMn20lqAp2fbNzIej5aoEMSUFmM62WC9wo/RAjFrYRP1aOSEtffMNdCnYbRwi6pvXyT/BP4vZ9tS+JL4G52UZVMFWY9oFRqP9dpRmzM41woLe/QxhVBORtNd38IV0NpPiy2BSybX6LGem2i3BTK6nYnZ/jk6ePDl5dLPu32dZFONgxCG9/G8xWqN7rBPmGNW38RRYOb4uzw1UrTBkwENJQXkdJvf+kEgFQdCo1GuwBaGem2BOTCreb696mZFzMiMLx9kZwZv/DeFjObmHuuw5NFDoXgqEjdjb+CD3GSzhcjioMcbJ9hzR1XHJ9dG8ZrRqWFWgYGXFGlOXr2Hc19E2gAJVSn5k6/WkA3M9dniyqbijDuqk= MIME-Version: 1.0 X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: 9544882e-57b5-492c-4ba8-08d73d3afc65 X-MS-Exchange-CrossTenant-originalarrivaltime: 19 Sep 2019 19:53:04.9947 (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: dne4yFpvqgGjjsDKlLZwm9LtZb6DW2IrDmkFfM6ZX94PG+1BcuYi1hYaXVczfA99y0/HctYpCF5tEGsmN0LzXQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR12MB3372 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: qJK8hG1EZtfTrtkuBwNbbzmgx1787277AA= Content-Language: en-US Content-ID: Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1568922815; bh=ibztdn/QBFuNtK+/c5jR1yxtk53HE90Ex6sv9LG4j1Y=; h=CC:Content-Type:Date:From:Reply-To:Subject:To; b=Sp2EWIb/8WuJYzWy/vMEsEji+SowbS8vCGA+Z08Det0PQJhE+rBuLIcfpe9K79cI6Ro Lc0tZS//83gTEa1bItsldhtayIwMC9wRiehIvyHdkVTlJqs1CVxXCU1X19IPEnF1iK+LM 125suFJEmG2CEjikWuX5IECduGepFmV04r0= 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=3D2198 A hypervisor is not allowed to update an SEV-ES guests register state, so when booting an SEV-ES guest AP, the hypervisor is not allowed to set the RIP to the guest requested value. Instead, an SEV-ES AP must be transition from 64-bit long mode to 16-bit real mode in response to an INIT-SIPI-SIPI sequence. This requires a 16-bit code segment descriptor. For PEI, create this descriptor in the reset vector GDT table. For DXE, create this descriptor from the newly reserved entry at location 0x28. Cc: Eric Dong Cc: Ray Ni Cc: Laszlo Ersek Signed-off-by: Tom Lendacky --- UefiCpuPkg/CpuDxe/CpuGdt.h | 4 ++-- UefiCpuPkg/CpuDxe/CpuGdt.c | 8 ++++---- UefiCpuPkg/ResetVector/Vtf0/Ia16/Real16ToFlat32.asm | 9 +++++++++ 3 files changed, 15 insertions(+), 6 deletions(-) diff --git a/UefiCpuPkg/CpuDxe/CpuGdt.h b/UefiCpuPkg/CpuDxe/CpuGdt.h index e5c36f37b96a..80e224b47fcd 100644 --- a/UefiCpuPkg/CpuDxe/CpuGdt.h +++ b/UefiCpuPkg/CpuDxe/CpuGdt.h @@ -36,7 +36,7 @@ struct _GDT_ENTRIES { GDT_ENTRY LinearCode; GDT_ENTRY SysData; GDT_ENTRY SysCode; - GDT_ENTRY Spare4; + GDT_ENTRY SysCode16; GDT_ENTRY LinearData64; GDT_ENTRY LinearCode64; GDT_ENTRY Spare5; @@ -49,7 +49,7 @@ struct _GDT_ENTRIES { #define LINEAR_CODE_SEL OFFSET_OF (GDT_ENTRIES, LinearCode) #define SYS_DATA_SEL OFFSET_OF (GDT_ENTRIES, SysData) #define SYS_CODE_SEL OFFSET_OF (GDT_ENTRIES, SysCode) -#define SPARE4_SEL OFFSET_OF (GDT_ENTRIES, Spare4) +#define SYS_CODE16_SEL OFFSET_OF (GDT_ENTRIES, SysCode16) #define LINEAR_DATA64_SEL OFFSET_OF (GDT_ENTRIES, LinearData64) #define LINEAR_CODE64_SEL OFFSET_OF (GDT_ENTRIES, LinearCode64) #define SPARE5_SEL OFFSET_OF (GDT_ENTRIES, Spare5) diff --git a/UefiCpuPkg/CpuDxe/CpuGdt.c b/UefiCpuPkg/CpuDxe/CpuGdt.c index 87fd6955f24b..6a80829be884 100644 --- a/UefiCpuPkg/CpuDxe/CpuGdt.c +++ b/UefiCpuPkg/CpuDxe/CpuGdt.c @@ -70,14 +70,14 @@ STATIC GDT_ENTRIES GdtTemplate =3D { 0x0, }, // - // SPARE4_SEL + // SYS_CODE16_SEL // { - 0x0, // limit 15:0 + 0x0FFFF, // limit 15:0 0x0, // base 15:0 0x0, // base 23:16 - 0x0, // type - 0x0, // limit 19:16, flags + 0x09A, // present, ring 0, code, execute/read + 0x08F, // page-granular, 16-bit 0x0, // base 31:24 }, // diff --git a/UefiCpuPkg/ResetVector/Vtf0/Ia16/Real16ToFlat32.asm b/UefiCpuP= kg/ResetVector/Vtf0/Ia16/Real16ToFlat32.asm index ce4ebfffb688..0e79a3984b16 100644 --- a/UefiCpuPkg/ResetVector/Vtf0/Ia16/Real16ToFlat32.asm +++ b/UefiCpuPkg/ResetVector/Vtf0/Ia16/Real16ToFlat32.asm @@ -129,5 +129,14 @@ LINEAR_CODE64_SEL equ $-GDT_BASE DB 0 ; base 31:24 %endif =20 +; linear code segment descriptor +LINEAR_CODE16_SEL equ $-GDT_BASE + DW 0xffff ; limit 15:0 + DW 0 ; base 15:0 + DB 0 ; base 23:16 + DB PRESENT_FLAG(1)|DPL(0)|SYSTEM_FLAG(1)|DESC_TYPE(CODE32_TYPE) + DB GRANULARITY_FLAG(1)|DEFAULT_SIZE32(0)|CODE64_FLAG(0)|UPPER_LIM= IT(0xf) + DB 0 ; base 31:24 + GDT_END: =20 --=20 2.17.1 -=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 (#47670): https://edk2.groups.io/g/devel/message/47670 Mute This Topic: https://groups.io/mt/34203583/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- From nobody Sun May 5 15:05:55 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zoho.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+47671+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 1568922817962685.159307667219; Thu, 19 Sep 2019 12:53:37 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id PaYXYY1788612x6qMKSQWhX1; Thu, 19 Sep 2019 12:53:37 -0700 X-Received: from NAM02-BL2-obe.outbound.protection.outlook.com (NAM02-BL2-obe.outbound.protection.outlook.com []) by groups.io with SMTP; Thu, 19 Sep 2019 12:53:35 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=b2p6LzKuHhl3Q7XrwEQPl9ND8SGaOcc+7ao9zMpLZ/jKnfb8e2TEL8+Q3B/vw/YuQZnfJw+k4s29yG4WgM+2SntTuK9M07i8HrobC4Vnc6u10XXSwPpQUASmmt6nSk61/vO4DfKedK3GsUQK7UIMYP8bOkpc6Wk5j1JN5ggoAHPFvadBuH4ulL0SVFwrNgDbV8KxCxvHrRJdITb4rhyb04S2RLyq4KWLSGf4J+8Quv3P4L38w4KLdN6GEvhWmGHc+SQWjzpWsytQx1OXcZgaVHRfhc3ZfD5Kux85YGYIuL9unH11x1R61qzZQ4w4bhXyjSvaD1HuXJre6adTzaujhg== 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=oDt06qfam0b97/VpKScRWiEnSNj3FE0sS0+s76MPMOo=; b=WO0jwqIKaG8whhwWn5zktKEUgQKIyH2zlQQkXJ8YDG8tMUC7uIB9zei4YXTlf2zMHDfaINyQoTxxH0Fchwqagg4dpzr28HaT0NQvvB92MunUufC7hVrZWjBYxYu/X4GytRWisARXaPsl6f3WR0ZVTi4D1URepb41Pker9L8u+aJ5R7Nb5LthFSqveLBugcCZPh/xgrhEr+Mqqb+56Q+yZw9KJU46Qn8pxK4BkdV2A6zlCpHjt+QOANvh3vQttQUrI9xOaPEctu00zzCuqDyedSke4c2TdOksgNrx0jpVYyP6Id+Kj+BX6DejzV2XwJ8MPBCF/9MjBpV5+OmE0AbtVQ== 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 DM6PR12MB3163.namprd12.prod.outlook.com (20.179.104.150) by DM6PR12MB3372.namprd12.prod.outlook.com (20.178.198.27) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2263.22; Thu, 19 Sep 2019 19:53:33 +0000 X-Received: from DM6PR12MB3163.namprd12.prod.outlook.com ([fe80::400e:f0c3:7ca:2fcc]) by DM6PR12MB3163.namprd12.prod.outlook.com ([fe80::400e:f0c3:7ca:2fcc%6]) with mapi id 15.20.2284.009; Thu, 19 Sep 2019 19:53:33 +0000 From: "Lendacky, Thomas" To: "devel@edk2.groups.io" CC: Jordan Justen , Laszlo Ersek , Ard Biesheuvel , Michael D Kinney , Liming Gao , Eric Dong , Ray Ni , "Singh, Brijesh" Subject: [edk2-devel] [RFC PATCH v2 37/44] OvmfPkg: Add support for SEV-ES AP reset vector re-directing Thread-Topic: [RFC PATCH v2 37/44] OvmfPkg: Add support for SEV-ES AP reset vector re-directing Thread-Index: AQHVbyPa3GbA3JfqWEG3XgfImlrAHw== Date: Thu, 19 Sep 2019 19:53:05 +0000 Message-ID: <61fd6897ca552edbb39ab2f2ee0cce0b505ee71c.1568922729.git.thomas.lendacky@amd.com> References: In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: SN4PR0501CA0146.namprd05.prod.outlook.com (2603:10b6:803:2c::24) To DM6PR12MB3163.namprd12.prod.outlook.com (2603:10b6:5:182::22) x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [165.204.78.1] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 4ee8db34-125f-4b55-2b54-08d73d3afcff x-ms-office365-filtering-ht: Tenant x-ms-traffictypediagnostic: DM6PR12MB3372: x-ms-exchange-purlcount: 1 x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:9508; Received-SPF: pass (zoho.com: domain of groups.io designates 66.175.222.12 as permitted sender) client-ip=66.175.222.12; envelope-from=bounce+27952+47671+1787277+3901457@groups.io; helo=web01.groups.io; received-spf: None (protection.outlook.com: amd.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: Ufd1KeNXnm2HMvVRWdYFote2Z4YUUlXZ2MZqBRjioEfxvOf+ZnKj7b8ttT5HHBWErNTJxIt4rLK/90bLDBulTIQW08T8c1+Vz2iXqQDCOHqcD6nzXYEXt+Uy2M8JfiAGwO72qp2PQFgRXhFbV72+RAkszFrsZGzUlyz5e+G2AX9Go+MNg9ED0vts1nDF70xdFnxSoJCsZWJsNEjbigO5ZaamaQkoiC28rJkSidRl334NNZoxdt4bVIAyHKLop1bT3u1UfM24eKGVbPoS9xXWljf/775Nm2rNzqfYj4RT/czZyiU7qkhQnUKEj6uTQCx8gH/48L+icI0LtmcaXRaxy11N5fPy4ur81Gb2ie2OTziSL8rs86n6Ve1QDXHbtdchwnT3YInrmCQCMpMOTNPmEFQQydbvfimCTbC5EtYT18Y= MIME-Version: 1.0 X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: 4ee8db34-125f-4b55-2b54-08d73d3afcff X-MS-Exchange-CrossTenant-originalarrivaltime: 19 Sep 2019 19:53:05.9912 (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: etvmczgLbm5/kVvkJYpcZe+0pVxeQaJMKiD9byEv0mahJBIw9v/fKDdeI+nJs8nRqn9uDvlNLTZVOoxN2OOn2g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR12MB3372 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: JtaKfVK9UlSlw3h2vWWOHLgJx1787277AA= Content-Language: en-US Content-ID: Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1568922817; bh=9dys1EfFhoexGrQJAX/ZBXRqlZ/qtnCZa+LrjF7xk04=; h=CC:Content-Type:Date:From:Reply-To:Subject:To; b=JnZEF2oWbmgu/eWgF1yNn8+jK2PHVP7erOsI5eJxQZYRa0s9dO/cSlKn8A1ooNDV1ml Q0yPLOnFVpB0q8oSZZcmdY9jxQTQ8TtgvHa6Jbm+yeP9BdCtE/kMy+zdBcJ6a6juhiwiq B8xk6FgGLJuTCUXAvUAA7jpYsjzXndZ9pFk= 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=3D2198 A hypervisor is not allowed to update an SEV-ES guests register state, so when booting an SEV-ES guest AP, the hypervisor is not allowed to set the RIP to the guest requested value. Instead an SEV-ES AP must be re-directed from within the guest to the actual requested staring location as specified in the INIT-SIPI-SIPI sequence. Provide reset vector code that contains support to jump to the desired RIP location after having been started. This is required for only the very first AP reset. Cc: Jordan Justen Cc: Laszlo Ersek Cc: Ard Biesheuvel Signed-off-by: Tom Lendacky --- OvmfPkg/ResetVector/Ia16/ResetVectorVtf0.asm | 80 ++++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 OvmfPkg/ResetVector/Ia16/ResetVectorVtf0.asm diff --git a/OvmfPkg/ResetVector/Ia16/ResetVectorVtf0.asm b/OvmfPkg/ResetVe= ctor/Ia16/ResetVectorVtf0.asm new file mode 100644 index 000000000000..1ac8b7ca7e85 --- /dev/null +++ b/OvmfPkg/ResetVector/Ia16/ResetVectorVtf0.asm @@ -0,0 +1,80 @@ +;-------------------------------------------------------------------------= ----- +; @file +; First code executed by processor after resetting. +; Derived from UefiCpuPkg/ResetVector/Vtf0/Ia16/ResetVectorVtf0.asm +; +; Copyright (c) 2019, AMD Inc. All rights reserved.
+; SPDX-License-Identifier: BSD-2-Clause-Patent +; +;-------------------------------------------------------------------------= ----- + +BITS 16 + +ALIGN 16 + +; +; Pad the image size to 4k when page tables are in VTF0 +; +; If the VTF0 image has page tables built in, then we need to make +; sure the end of VTF0 is 4k above where the page tables end. +; +; This is required so the page tables will be 4k aligned when VTF0 is +; located just below 0x100000000 (4GB) in the firmware device. +; +%ifdef ALIGN_TOP_TO_4K_FOR_PAGING + TIMES (0x1000 - ($ - EndOfPageTables) - 0x20) DB 0 +%endif + +; +; SEV-ES Processor Reset support +; +; standardProcessorSevEsReset: (0xffffffd0) +; When using the Application Processors entry point, always perform a +; far jump to the RIP/CS value contained at this location. This will +; default to EarlyBspInitReal16 unless specifically overridden. + +standardProcessorSevEsReset: + DW 0x0000 + DW 0x0000 + +ALIGN 16 + +applicationProcessorEntryPoint: +; +; Application Processors entry point +; +; GenFv generates code aligned on a 4k boundary which will jump to this +; location. (0xffffffe0) This allows the Local APIC Startup IPI to be +; used to wake up the application processors. +; + jmp EarlyApInitReal16 + +ALIGN 8 + + DD 0 + +; +; The VTF signature +; +; VTF-0 means that the VTF (Volume Top File) code does not require +; any fixups. +; +vtfSignature: + DB 'V', 'T', 'F', 0 + +ALIGN 16 + +resetVector: +; +; Reset Vector +; +; This is where the processor will begin execution +; + cmp dword [CS:0xFFD0], 0 + je EarlyBspInitReal16 + jmp far [CS:0xFFD0] + +ALIGN 16 + +fourGigabytes: + --=20 2.17.1 -=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 (#47671): https://edk2.groups.io/g/devel/message/47671 Mute This Topic: https://groups.io/mt/34203584/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- From nobody Sun May 5 15:05:55 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zoho.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+47672+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 1568922817877823.2398865336166; Thu, 19 Sep 2019 12:53:37 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id W6UfYY1788612x9AW7mgImOb; Thu, 19 Sep 2019 12:53:37 -0700 X-Received: from NAM02-BL2-obe.outbound.protection.outlook.com (NAM02-BL2-obe.outbound.protection.outlook.com [40.107.75.72]) by groups.io with SMTP; Thu, 19 Sep 2019 12:53:36 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=fdzm5uuspxfjGgfAO9tew7/HTzJph5QZVhInad50aA4EEoubHHTow0Tg/qt+2W/t99aZGEW3Xxd9s4bN+y2ph7Cw9ysGb6SFS89QcOp/MGDJTo7powhj/j8++zNhCuk2VIkrxOvNjaN8Q/QyoGDJ2RgLXyIQZRQTdwN8pDflyjbQC+l0N3x5ZSCRv1kIu36LmaBPkfVEz6mEGGqwfcRTcfX367VMyg6quFy3tBNK48Cf6MVl8XQmPdwb6/oX5JKJJlVUpnt6LO+xWR9y8ylm5Wtz+Bge59yBSlSpWK9i7Nb0T/kD+WUMgmUrkaolR8rVV6yGFPiCxFVmFSHdQoIwSQ== 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=YFIjdJBfWuKH1OhJtBDtOOURC9meL660Ba+hF37pZuk=; b=mqJHgZZ8a/DJ/0HS4HwMW9jAXBc9yiYOQ9rfQLceIeXyFBI8CQoAU3Za/iCEIyVLB0n/u/f8QhCRyDEcavKOnRDgpBVTuQ7Ir8fCzovSoPwri/ugkTGrKZUFhyv20x23jIWD02V1yd08ixylcz1vzIPfkcLjaFurLPuTEBW+jsbRNN9vANDxTPTQz2G0u2JkXaWFurURFgCiaEzSAtKtF3Jt/eNmtPXHpCCil7t5/aPl0TSaPTeAeNdq7FrWJ/0u59Kfc/MmeCgukwUcIIvjTMPiAb+EpqoVSeOG97YUgLGUPCxF6Uhlvyul5QQORd48iBw6W3A2ueEgF/QL1Qip8Q== 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 DM6PR12MB3163.namprd12.prod.outlook.com (20.179.104.150) by DM6PR12MB3372.namprd12.prod.outlook.com (20.178.198.27) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2263.22; Thu, 19 Sep 2019 19:53:34 +0000 X-Received: from DM6PR12MB3163.namprd12.prod.outlook.com ([fe80::400e:f0c3:7ca:2fcc]) by DM6PR12MB3163.namprd12.prod.outlook.com ([fe80::400e:f0c3:7ca:2fcc%6]) with mapi id 15.20.2284.009; Thu, 19 Sep 2019 19:53:34 +0000 From: "Lendacky, Thomas" To: "devel@edk2.groups.io" CC: Jordan Justen , Laszlo Ersek , Ard Biesheuvel , Michael D Kinney , Liming Gao , Eric Dong , Ray Ni , "Singh, Brijesh" Subject: [edk2-devel] [RFC PATCH v2 38/44] UefiCpuPkg: Allow AP booting under SEV-ES Thread-Topic: [RFC PATCH v2 38/44] UefiCpuPkg: Allow AP booting under SEV-ES Thread-Index: AQHVbyPbnTRkf/Cj30eKTJFiQqetVw== Date: Thu, 19 Sep 2019 19:53:07 +0000 Message-ID: <81e310d1f2929f839cd166d1c7de6694220743b6.1568922729.git.thomas.lendacky@amd.com> References: In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: SN4PR0501CA0146.namprd05.prod.outlook.com (2603:10b6:803:2c::24) To DM6PR12MB3163.namprd12.prod.outlook.com (2603:10b6:5:182::22) x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [165.204.78.1] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 9b2557b9-89f8-44d7-43f3-08d73d3afd91 x-ms-office365-filtering-ht: Tenant x-ms-traffictypediagnostic: DM6PR12MB3372: x-ms-exchange-purlcount: 1 x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:8882; Received-SPF: pass (zoho.com: domain of groups.io designates 66.175.222.12 as permitted sender) client-ip=66.175.222.12; envelope-from=bounce+27952+47672+1787277+3901457@groups.io; helo=web01.groups.io; received-spf: None (protection.outlook.com: amd.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: 4/+hKpz/cputUzxnd5LapjKz9F5tWHOlxhew2OBwtUWn4BJyp+nzPHm3Rw0OQiLOhVYnfjDhyLf/YxpNCbQ1R3so6bapmg9IvEYBsYvSbZDfbydXev/libp9fh3A3rBNdrEVTnUqRSa+24TXcMtu/uSrgujuWDWdBHPTG7TeXfKWpRiOKSlaRbalUNegu2YwaCwlFg4ihPNgbQavuRQcXI0EotXMVIk6vQpXxtKtes5Z/vRG5veX9VrY//dv1aP6pVMmQFtmHroKPbww0G1FZE3EGxQG6nx+O2FENolrZik46n18DrgzRApqxe1K527sIsK13YwLNN/hYnRyhC2KTIdAxYAebyP4iCblE1LQ16pTmvE/XH4FOPatQ753wZcJ0T0xNeNFmp9zyIgl9BefoIQXXxsC5CeJ6dObcs309Vs= MIME-Version: 1.0 X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: 9b2557b9-89f8-44d7-43f3-08d73d3afd91 X-MS-Exchange-CrossTenant-originalarrivaltime: 19 Sep 2019 19:53:07.0256 (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: Fug2sg2crAvqosej4DdJKIghcJ0aQzxo6uebZYmRwx4IpyGf5WcSGQaxYS9PXatyPvQFfO49HS6fVQLW6N0+GA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR12MB3372 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: JJLea6cGpf04bcyM32m7jHCJx1787277AA= Content-Language: en-US Content-ID: <4E851F37B5362847B7373D20B37D2E89@namprd12.prod.outlook.com> Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1568922817; bh=6SF0u1OYr3mDvBipiM/b/j4htExtMRgQCeALUIcmhSE=; h=CC:Content-Type:Date:From:Reply-To:Subject:To; b=Db5ar7/TjRdu6O5Uozotn3bmjqIDYR+G5TL8qwj8iRqXwsgQyYaYIkcPXNtiRy4Rf20 L8phDT5lHU17qUUfQRquJyTOv5C9oUwYOqFRGqzQm9omXppQyU92gZFDMj+LjXQV5Pi/o 2N/a8R4qAxXlbsa6C42LCcRt+qdSO8v154s= 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=3D2198 Typically, an AP is booted using the INIT-SIPI-SIPI sequence. This sequence is intercepted by the hypervisor, which sets the AP's registers to the values requested by the sequence. At that point, the hypervisor can start the AP, which will then begin execution at the appropriate location. Under SEV-ES, AP booting presents some challenges since the hypervisor is not allowed to alter the AP's register state. In this situation, we have to distinguish between the AP's first boot and AP's subsequent boots. First boot: Once the AP's register state has been defined (which is before the guest is first booted) it cannot be altered. Should the hypervisor attempt to alter the register state, the change would be detected by the hardware and the VMRUN instruction would fail. Given this, the first boot for the AP is required to begin execution with this initial register state, which is typically the reset vector. This prevents the BSP from directing the AP startup location through the INIT-SIPI-SIPI sequence. To work around this, provide a four-byte field at offset 0xffffffd0 that can contain an IP / CS register combination, that if non-zero, causes the AP to perform a far jump to that location instead of a near jump to EarlyBspInitReal16. Before booting the AP for the first time, the BSP should set the IP / CS value for the AP based on the value that would be derived from the INIT-SIPI-SIPI sequence. Subsequent boots: Again, the hypervisor cannot alter the AP register state, so a method is required to take the AP out of halt state and redirect it to the desired IP location. If it is determined that the AP is running in an SEV-ES guest, then instead of calling CpuSleep(), a VMGEXIT is issued with the AP Reset Hold exit code (0x80000004). The hypervisor will put the AP in a halt state, waiting for an INIT-SIPI-SIPI sequence. Once the sequence is recognized, the hypervisor will resume the AP. At this point the AP must transition from the current 64-bit long mode down to 16-bit real mode and begin executing at the derived location from the INIT-SIPI-SIPI sequence. Another change is around the area of obtaining the (x2)APIC ID during AP startup. During AP startup, the AP can't take a #VC exception before the AP has established a stack. However, the AP stack is set by using the (x2)APIC ID, which is obtained through CPUID instructions. A CPUID instruction will cause a #VC, so a different method must be used. The GHCB protocol supports a method to obtain CPUID information from the hypervisor through the GHCB MSR. This method does not require a stack, so it is used to obtain the necessary CPUID information to determine the (x2)APIC ID. The OVMF SEV support is updated to set the SEV-ES active PCD entry (PcdSevEsActive) when the guest is an SEV-ES guest. Also, the OVMF support is updated to create its own reset vector routine in order to supply the far jump field required for an AP first boot. The new 16-bit protected mode GDT entry is used in order to transition from 64-bit long mode down to 16-bit real mode. A new assembler routine is created that takes the AP from 64-bit long mode to 16-bit real mode. This is located under 1MB in memory and transitions from 64-bit long mode to 32-bit compatibility mode to 16-bit protected mode and finally 16-bit real mode. Cc: Eric Dong Cc: Ray Ni Cc: Laszlo Ersek Signed-off-by: Tom Lendacky --- UefiCpuPkg/Library/MpInitLib/DxeMpInitLib.inf | 2 + UefiCpuPkg/Library/MpInitLib/PeiMpInitLib.inf | 2 + UefiCpuPkg/Library/MpInitLib/MpLib.h | 58 +++++ UefiCpuPkg/Library/MpInitLib/DxeMpLib.c | 70 ++++- UefiCpuPkg/Library/MpInitLib/MpLib.c | 235 ++++++++++++++++- UefiCpuPkg/Library/MpInitLib/PeiMpLib.c | 19 ++ UefiCpuPkg/PiSmmCpuDxeSmm/X64/SmmFuncsArch.c | 2 +- UefiCpuPkg/Library/MpInitLib/Ia32/MpEqu.inc | 2 +- .../Library/MpInitLib/Ia32/MpFuncs.nasm | 15 ++ UefiCpuPkg/Library/MpInitLib/X64/MpEqu.inc | 4 +- UefiCpuPkg/Library/MpInitLib/X64/MpFuncs.nasm | 239 ++++++++++++++++++ 11 files changed, 634 insertions(+), 14 deletions(-) diff --git a/UefiCpuPkg/Library/MpInitLib/DxeMpInitLib.inf b/UefiCpuPkg/Lib= rary/MpInitLib/DxeMpInitLib.inf index 557507e9a466..ad5f33451aa3 100644 --- a/UefiCpuPkg/Library/MpInitLib/DxeMpInitLib.inf +++ b/UefiCpuPkg/Library/MpInitLib/DxeMpInitLib.inf @@ -51,6 +51,7 @@ [LibraryClasses] UefiBootServicesTableLib DebugAgentLib SynchronizationLib + VmgExitLib =20 [Protocols] gEfiTimerArchProtocolGuid ## SOMETIMES_CONSUMES @@ -69,4 +70,5 @@ [Pcd] gUefiCpuPkgTokenSpaceGuid.PcdCpuApTargetCstate ## SOME= TIMES_CONSUMES gEfiMdeModulePkgTokenSpaceGuid.PcdCpuStackGuard ## CONS= UMES gEfiMdeModulePkgTokenSpaceGuid.PcdSevEsActive ## CONS= UMES + gEfiMdeModulePkgTokenSpaceGuid.PcdGhcbBase ## CONS= UMES =20 diff --git a/UefiCpuPkg/Library/MpInitLib/PeiMpInitLib.inf b/UefiCpuPkg/Lib= rary/MpInitLib/PeiMpInitLib.inf index f26ffd5a2ef5..4d4799aaa932 100644 --- a/UefiCpuPkg/Library/MpInitLib/PeiMpInitLib.inf +++ b/UefiCpuPkg/Library/MpInitLib/PeiMpInitLib.inf @@ -50,6 +50,7 @@ [LibraryClasses] UefiCpuLib SynchronizationLib PeiServicesLib + VmgExitLib =20 [Pcd] gUefiCpuPkgTokenSpaceGuid.PcdCpuMaxLogicalProcessorNumber ## CONS= UMES @@ -60,6 +61,7 @@ [Pcd] gUefiCpuPkgTokenSpaceGuid.PcdCpuApLoopMode ## CONS= UMES gUefiCpuPkgTokenSpaceGuid.PcdCpuApTargetCstate ## SOME= TIMES_CONSUMES gEfiMdeModulePkgTokenSpaceGuid.PcdSevEsActive ## CONS= UMES + gEfiMdeModulePkgTokenSpaceGuid.PcdGhcbBase ## CONS= UMES =20 [Guids] gEdkiiS3SmmInitDoneGuid diff --git a/UefiCpuPkg/Library/MpInitLib/MpLib.h b/UefiCpuPkg/Library/MpIn= itLib/MpLib.h index 1dfe9a9cd756..4cfb93ee4f77 100644 --- a/UefiCpuPkg/Library/MpInitLib/MpLib.h +++ b/UefiCpuPkg/Library/MpInitLib/MpLib.h @@ -151,6 +151,11 @@ typedef struct { UINT8 *RelocateApLoopFuncAddress; UINTN RelocateApLoopFuncSize; UINTN ModeTransitionOffset; + UINTN SwitchToRealSize; + UINTN SwitchToRealOffset; + UINTN SwitchToRealNoNxOffset; + UINTN SwitchToRealPM16ModeOffset; + UINTN SwitchToRealPM16ModeSize; } MP_ASSEMBLY_ADDRESS_MAP; =20 typedef struct _CPU_MP_DATA CPU_MP_DATA; @@ -189,6 +194,8 @@ typedef struct { // Enable5LevelPaging indicates whether 5-level paging is enabled in lon= g mode. // BOOLEAN Enable5LevelPaging; + BOOLEAN SevEsActive; + UINTN GhcbBase; } MP_CPU_EXCHANGE_INFO; =20 #pragma pack() @@ -236,6 +243,7 @@ struct _CPU_MP_DATA { UINT8 ApLoopMode; UINT8 ApTargetCState; UINT16 PmCodeSegment; + UINT16 Pm16CodeSegment; CPU_AP_DATA *CpuData; volatile MP_CPU_EXCHANGE_INFO *MpCpuExchangeInfo; =20 @@ -262,8 +270,45 @@ struct _CPU_MP_DATA { BOOLEAN WakeUpByInitSipiSipi; =20 BOOLEAN SevEsActive; + UINTN SevEsAPBuffer; + UINTN SevEsAPResetStackStart; + CPU_MP_DATA *NewCpuMpData; + + UINT64 GhcbBase; }; =20 +#define AP_RESET_STACK_SIZE 64 + +typedef union { + struct { + UINT16 Rip; + UINT16 Segment; + } ApStart; + UINT32 Uint32; +} SEV_ES_AP_JMP_FAR; + +/** + Assembly code to move an AP from long mode to real mode. + + Move an AP from long mode to real mode in preparation to invoking + the reset vector. This is used for SEV-ES guests where a hypervisor + is not allowed to set the CS and RIP to point to the reset vector. + + @param[in] BufferStart The reset vector target. + @param[in] Code16 16-bit protected mode code segment value. + @param[in] Code32 32-bit protected mode code segment value. + @param[in] StackStart The start of a stack to be used for transitioni= ng + from long mode to real mode. +**/ +typedef +VOID +(EFIAPI AP_RESET) ( + IN UINTN BufferStart, + IN UINT16 Code16, + IN UINT16 Code32, + IN UINTN StackStart + ); + extern EFI_GUID mCpuInitMpLibHobGuid; =20 /** @@ -369,6 +414,19 @@ GetModeTransitionBuffer ( IN UINTN BufferSize ); =20 +/** + Return the address of the SEV-ES AP jump table. + + This buffer is required in order for an SEV-ES guest to transition from + UEFI into an OS. + + @retval other Return SEV-ES AP jump table buffer +**/ +UINTN +GetSevEsAPMemory ( + VOID + ); + /** This function will be called by BSP to wakeup AP. =20 diff --git a/UefiCpuPkg/Library/MpInitLib/DxeMpLib.c b/UefiCpuPkg/Library/M= pInitLib/DxeMpLib.c index b17e287bbf49..8df5b6d919e6 100644 --- a/UefiCpuPkg/Library/MpInitLib/DxeMpLib.c +++ b/UefiCpuPkg/Library/MpInitLib/DxeMpLib.c @@ -12,6 +12,8 @@ #include #include #include +#include +#include =20 #include =20 @@ -145,6 +147,39 @@ GetModeTransitionBuffer ( return (UINTN)StartAddress; } =20 +/** + Return the address of the SEV-ES AP jump table. + + This buffer is required in order for an SEV-ES guest to transition from + UEFI into an OS. + + @retval other Return SEV-ES AP jump table buffer +**/ +UINTN +GetSevEsAPMemory ( + VOID + ) +{ + EFI_STATUS Status; + EFI_PHYSICAL_ADDRESS StartAddress; + + // + // Allocate 1 page for AP jump table page + // + StartAddress =3D BASE_4GB - 1; + Status =3D gBS->AllocatePages ( + AllocateMaxAddress, + EfiReservedMemoryType, + 1, + &StartAddress + ); + ASSERT_EFI_ERROR (Status); + + DEBUG ((DEBUG_INFO, "Dxe: SevEsAPMemory =3D %lx\n", (UINTN) StartAddress= )); + + return (UINTN) StartAddress; +} + /** Checks APs status and updates APs status if needed. =20 @@ -219,6 +254,38 @@ CheckApsStatus ( } } =20 +/** + Get Protected mode code segment with 16-bit default addressing + from current GDT table. + + @return Protected mode 16-bit code segment value. +**/ +UINT16 +GetProtectedMode16CS ( + VOID + ) +{ + IA32_DESCRIPTOR GdtrDesc; + IA32_SEGMENT_DESCRIPTOR *GdtEntry; + UINTN GdtEntryCount; + UINT16 Index; + + Index =3D (UINT16) -1; + AsmReadGdtr (&GdtrDesc); + GdtEntryCount =3D (GdtrDesc.Limit + 1) / sizeof (IA32_SEGMENT_DESCRIPTOR= ); + GdtEntry =3D (IA32_SEGMENT_DESCRIPTOR *) GdtrDesc.Base; + for (Index =3D 0; Index < GdtEntryCount; Index++) { + if (GdtEntry->Bits.L =3D=3D 0) { + if (GdtEntry->Bits.Type > 8 && GdtEntry->Bits.DB =3D=3D 0) { + break; + } + } + GdtEntry++; + } + ASSERT (Index !=3D GdtEntryCount); + return Index * 8; +} + /** Get Protected mode code segment from current GDT table. =20 @@ -239,7 +306,7 @@ GetProtectedModeCS ( GdtEntry =3D (IA32_SEGMENT_DESCRIPTOR *) GdtrDesc.Base; for (Index =3D 0; Index < GdtEntryCount; Index++) { if (GdtEntry->Bits.L =3D=3D 0) { - if (GdtEntry->Bits.Type > 8 && GdtEntry->Bits.L =3D=3D 0) { + if (GdtEntry->Bits.Type > 8 && GdtEntry->Bits.DB =3D=3D 1) { break; } } @@ -301,6 +368,7 @@ MpInitChangeApLoopCallback ( =20 CpuMpData =3D GetCpuMpData (); CpuMpData->PmCodeSegment =3D GetProtectedModeCS (); + CpuMpData->Pm16CodeSegment =3D GetProtectedMode16CS (); CpuMpData->ApLoopMode =3D PcdGet8 (PcdCpuApLoopMode); mNumberToFinish =3D CpuMpData->CpuCount - 1; WakeUpAP (CpuMpData, TRUE, 0, RelocateApLoop, NULL, TRUE); diff --git a/UefiCpuPkg/Library/MpInitLib/MpLib.c b/UefiCpuPkg/Library/MpIn= itLib/MpLib.c index 3e20900ec7bc..43aa9c0a4950 100644 --- a/UefiCpuPkg/Library/MpInitLib/MpLib.c +++ b/UefiCpuPkg/Library/MpInitLib/MpLib.c @@ -7,6 +7,9 @@ **/ =20 #include "MpLib.h" +#include +#include +#include =20 EFI_GUID mCpuInitMpLibHobGuid =3D CPU_INIT_MP_LIB_HOB_GUID; =20 @@ -288,6 +291,14 @@ GetApLoopMode ( // ApLoopMode =3D ApInHltLoop; } + + if (PcdGetBool (PcdSevEsActive)) { + // + // For SEV-ES, force AP in Hlt-loop mode in order to use the GHCB + // protocol for starting APs + // + ApLoopMode =3D ApInHltLoop; + } } =20 if (ApLoopMode !=3D ApInMwaitLoop) { @@ -555,6 +566,108 @@ InitializeApData ( SetApState (&CpuMpData->CpuData[ProcessorNumber], CpuStateIdle); } =20 +/** + Get Protected mode code segment with 16-bit default addressing + from current GDT table. + + @return Protected mode 16-bit code segment value. +**/ +STATIC +UINT16 +GetProtectedMode16CS ( + VOID + ) +{ + IA32_DESCRIPTOR GdtrDesc; + IA32_SEGMENT_DESCRIPTOR *GdtEntry; + UINTN GdtEntryCount; + UINT16 Index; + + Index =3D (UINT16) -1; + AsmReadGdtr (&GdtrDesc); + GdtEntryCount =3D (GdtrDesc.Limit + 1) / sizeof (IA32_SEGMENT_DESCRIPTOR= ); + GdtEntry =3D (IA32_SEGMENT_DESCRIPTOR *) GdtrDesc.Base; + for (Index =3D 0; Index < GdtEntryCount; Index++) { + if (GdtEntry->Bits.L =3D=3D 0 && + GdtEntry->Bits.DB =3D=3D 0 && + GdtEntry->Bits.Type > 8) { + break; + } + GdtEntry++; + } + ASSERT (Index !=3D GdtEntryCount); + return Index * 8; +} + +/** + Get Protected mode code segment with 32-bit default addressing + from current GDT table. + + @return Protected mode 32-bit code segment value. +**/ +STATIC +UINT16 +GetProtectedMode32CS ( + VOID + ) +{ + IA32_DESCRIPTOR GdtrDesc; + IA32_SEGMENT_DESCRIPTOR *GdtEntry; + UINTN GdtEntryCount; + UINT16 Index; + + Index =3D (UINT16) -1; + AsmReadGdtr (&GdtrDesc); + GdtEntryCount =3D (GdtrDesc.Limit + 1) / sizeof (IA32_SEGMENT_DESCRIPTOR= ); + GdtEntry =3D (IA32_SEGMENT_DESCRIPTOR *) GdtrDesc.Base; + for (Index =3D 0; Index < GdtEntryCount; Index++) { + if (GdtEntry->Bits.L =3D=3D 0 && + GdtEntry->Bits.DB =3D=3D 1 && + GdtEntry->Bits.Type > 8) { + break; + } + GdtEntry++; + } + ASSERT (Index !=3D GdtEntryCount); + return Index * 8; +} + +/** + Reset an AP when in SEV-ES mode. + + @retval EFI_DEVICE_ERROR Reset of AP failed. +**/ +STATIC +VOID +MpInitLibSevEsAPReset ( + GHCB *Ghcb, + CPU_MP_DATA *CpuMpData + ) +{ + UINT16 Code16, Code32; + AP_RESET *APResetFn; + UINTN BufferStart; + UINTN StackStart; + + Code16 =3D GetProtectedMode16CS (); + Code32 =3D GetProtectedMode32CS (); + + if (CpuMpData->WakeupBufferHigh !=3D 0) { + APResetFn =3D (AP_RESET *) (CpuMpData->WakeupBufferHigh + CpuMpData->A= ddressMap.SwitchToRealNoNxOffset); + } else { + APResetFn =3D (AP_RESET *) (CpuMpData->MpCpuExchangeInfo->BufferStart = + CpuMpData->AddressMap.SwitchToRealOffset); + } + + BufferStart =3D CpuMpData->MpCpuExchangeInfo->BufferStart; + StackStart =3D CpuMpData->SevEsAPResetStackStart - + (AP_RESET_STACK_SIZE * GetApicId ()); + + // + // This call never returns. + // + APResetFn (BufferStart, Code16, Code32, StackStart); +} + /** This function will be called from AP reset code if BSP uses WakeUpAP. =20 @@ -714,7 +827,28 @@ ApWakeupFunction ( // while (TRUE) { DisableInterrupts (); - CpuSleep (); + if (CpuMpData->SevEsActive) { + MSR_SEV_ES_GHCB_REGISTER Msr; + GHCB *Ghcb; + + Msr.GhcbPhysicalAddress =3D AsmReadMsr64 (MSR_SEV_ES_GHCB); + Ghcb =3D Msr.Ghcb; + + VmgInit (Ghcb); + VmgExit (Ghcb, SvmExitApResetHold, 0, 0); + /*TODO: Check return value to verify SIPI issued */ + + // + // Awakened in a new phase? Use the new CpuMpData + // + if (CpuMpData->NewCpuMpData) { + CpuMpData =3D CpuMpData->NewCpuMpData; + } + + MpInitLibSevEsAPReset (Ghcb, CpuMpData); + } else { + CpuSleep (); + } CpuPause (); } } @@ -827,6 +961,9 @@ FillExchangeInfoData ( ExchangeInfo->Enable5LevelPaging =3D (BOOLEAN) (Cr4.Bits.LA57 =3D=3D 1); DEBUG ((DEBUG_INFO, "%a: 5-Level Paging =3D %d\n", gEfiCallerBaseName, E= xchangeInfo->Enable5LevelPaging)); =20 + ExchangeInfo->SevEsActive =3D CpuMpData->SevEsActive; + ExchangeInfo->GhcbBase =3D CpuMpData->GhcbBase; + // // Get the BSP's data of GDT and IDT // @@ -853,8 +990,9 @@ FillExchangeInfoData ( // EfiBootServicesCode to avoid page fault if NX memory protection is en= abled. // if (CpuMpData->WakeupBufferHigh !=3D 0) { - Size =3D CpuMpData->AddressMap.RendezvousFunnelSize - - CpuMpData->AddressMap.ModeTransitionOffset; + Size =3D CpuMpData->AddressMap.RendezvousFunnelSize + + CpuMpData->AddressMap.SwitchToRealSize - + CpuMpData->AddressMap.ModeTransitionOffset; CopyMem ( (VOID *)CpuMpData->WakeupBufferHigh, CpuMpData->AddressMap.RendezvousFunnelAddress + @@ -907,7 +1045,8 @@ BackupAndPrepareWakeupBuffer( CopyMem ( (VOID *) CpuMpData->WakeupBuffer, (VOID *) CpuMpData->AddressMap.RendezvousFunnelAddress, - CpuMpData->AddressMap.RendezvousFunnelSize + CpuMpData->AddressMap.RendezvousFunnelSize + + CpuMpData->AddressMap.SwitchToRealSize ); } =20 @@ -928,6 +1067,40 @@ RestoreWakeupBuffer( ); } =20 +/** + Calculate the size of the reset stack. +**/ +STATIC +UINTN +GetApResetStackSize( + VOID + ) +{ + return AP_RESET_STACK_SIZE * PcdGet32(PcdCpuMaxLogicalProcessorNumber); +} + +/** + Calculate the size of the reset vector. + + @param[in] AddressMap The pointer to Address Map structure. +**/ +STATIC +UINTN +GetApResetVectorSize( + IN MP_ASSEMBLY_ADDRESS_MAP *AddressMap + ) +{ + UINTN Size; + + Size =3D ALIGN_VALUE (AddressMap->RendezvousFunnelSize + + AddressMap->SwitchToRealSize + + sizeof (MP_CPU_EXCHANGE_INFO), + CPU_STACK_ALIGNMENT); + Size +=3D GetApResetStackSize (); + + return Size; +} + /** Allocate reset vector buffer. =20 @@ -941,16 +1114,22 @@ AllocateResetVector ( UINTN ApResetVectorSize; =20 if (CpuMpData->WakeupBuffer =3D=3D (UINTN) -1) { - ApResetVectorSize =3D CpuMpData->AddressMap.RendezvousFunnelSize + - sizeof (MP_CPU_EXCHANGE_INFO); + ApResetVectorSize =3D GetApResetVectorSize (&CpuMpData->AddressMap); =20 CpuMpData->WakeupBuffer =3D GetWakeupBuffer (ApResetVectorSize); CpuMpData->MpCpuExchangeInfo =3D (MP_CPU_EXCHANGE_INFO *) (UINTN) - (CpuMpData->WakeupBuffer + CpuMpData->AddressMap.Rende= zvousFunnelSize); + (CpuMpData->WakeupBuffer + + CpuMpData->AddressMap.RendezvousFunnelSize + + CpuMpData->AddressMap.SwitchToRealSize); CpuMpData->WakeupBufferHigh =3D GetModeTransitionBuffer ( - CpuMpData->AddressMap.RendezvousFunnel= Size - + CpuMpData->AddressMap.RendezvousFunnel= Size + + CpuMpData->AddressMap.SwitchToRealSize= - CpuMpData->AddressMap.ModeTransitionOf= fset ); + // + // The reset stack starts at the end of the buffer. + // + CpuMpData->SevEsAPResetStackStart =3D CpuMpData->WakeupBuffer + ApRese= tVectorSize; } BackupAndPrepareWakeupBuffer (CpuMpData); } @@ -965,7 +1144,30 @@ FreeResetVector ( IN CPU_MP_DATA *CpuMpData ) { - RestoreWakeupBuffer (CpuMpData); + // + // If SEV-ES is active, the reset area is needed for AP parking and + // and AP startup in the OS, so the reset area is reserved. Do not + // perform the restore as this will overwrite memory which has data + // needed by SEV-ES. + // + if (!CpuMpData->SevEsActive) { + RestoreWakeupBuffer (CpuMpData); + } +} + +/** + Allocate the SEV-ES AP jump table buffer. + + @param[in, out] CpuMpData The pointer to CPU MP Data structure. +**/ +VOID +AllocateSevEsAPMemory ( + IN OUT CPU_MP_DATA *CpuMpData + ) +{ + if (CpuMpData->SevEsAPBuffer =3D=3D (UINTN) -1) { + CpuMpData->SevEsAPBuffer =3D CpuMpData->SevEsActive ? GetSevEsAPMemory= () : 0; + } } =20 /** @@ -1002,6 +1204,7 @@ WakeUpAP ( CpuMpData->InitFlag !=3D ApInitDone) { ResetVectorRequired =3D TRUE; AllocateResetVector (CpuMpData); + AllocateSevEsAPMemory (CpuMpData); FillExchangeInfoData (CpuMpData); SaveLocalApicTimerSetting (CpuMpData); } @@ -1038,6 +1241,15 @@ WakeUpAP ( } } if (ResetVectorRequired) { + // + // For SEV-ES, set the jump address for initial AP boot + // + if (CpuMpData->SevEsActive) { + SEV_ES_AP_JMP_FAR *JmpFar =3D (SEV_ES_AP_JMP_FAR *)0xFFFFFFD0; + + JmpFar->ApStart.Rip =3D 0; + JmpFar->ApStart.Segment =3D (UINT16) (ExchangeInfo->BufferStart >>= 4); + } // // Wakeup all APs // @@ -1563,7 +1775,7 @@ MpInitLibInitialize ( ASSERT (MaxLogicalProcessorNumber !=3D 0); =20 AsmGetAddressMap (&AddressMap); - ApResetVectorSize =3D AddressMap.RendezvousFunnelSize + sizeof (MP_CPU_E= XCHANGE_INFO); + ApResetVectorSize =3D GetApResetVectorSize (&AddressMap); ApStackSize =3D PcdGet32(PcdCpuApStackSize); ApLoopMode =3D GetApLoopMode (&MonitorFilterSize); =20 @@ -1658,6 +1870,8 @@ MpInitLibInitialize ( } InitializeSpinLock(&CpuMpData->MpLock); CpuMpData->SevEsActive =3D PcdGetBool (PcdSevEsActive); + CpuMpData->SevEsAPBuffer =3D (UINTN) -1; + CpuMpData->GhcbBase =3D PcdGet64 (PcdGhcbBase); =20 // // Make sure no memory usage outside of the allocated buffer. @@ -1724,6 +1938,7 @@ MpInitLibInitialize ( // APs have been wakeup before, just get the CPU Information // from HOB // + OldCpuMpData->NewCpuMpData =3D CpuMpData; CpuMpData->CpuCount =3D OldCpuMpData->CpuCount; CpuMpData->BspNumber =3D OldCpuMpData->BspNumber; CpuMpData->InitFlag =3D ApInitReconfig; diff --git a/UefiCpuPkg/Library/MpInitLib/PeiMpLib.c b/UefiCpuPkg/Library/M= pInitLib/PeiMpLib.c index 3999603c3efc..56956a615b6b 100644 --- a/UefiCpuPkg/Library/MpInitLib/PeiMpLib.c +++ b/UefiCpuPkg/Library/MpInitLib/PeiMpLib.c @@ -279,6 +279,25 @@ GetModeTransitionBuffer ( return 0; } =20 +/** + Return the address of the SEV-ES AP jump table. + + This buffer is required in order for an SEV-ES guest to transition from + UEFI into an OS. + + @retval other Return SEV-ES AP jump table buffer +**/ +UINTN +GetSevEsAPMemory ( + VOID + ) +{ + // + // PEI phase doesn't need to do such transition. So simply return 0. + // + return 0; +} + /** Checks APs status and updates APs status if needed. =20 diff --git a/UefiCpuPkg/PiSmmCpuDxeSmm/X64/SmmFuncsArch.c b/UefiCpuPkg/PiSm= mCpuDxeSmm/X64/SmmFuncsArch.c index 6298571e29b2..28f8e8e133e5 100644 --- a/UefiCpuPkg/PiSmmCpuDxeSmm/X64/SmmFuncsArch.c +++ b/UefiCpuPkg/PiSmmCpuDxeSmm/X64/SmmFuncsArch.c @@ -121,7 +121,7 @@ GetProtectedModeCS ( GdtEntry =3D (IA32_SEGMENT_DESCRIPTOR *) GdtrDesc.Base; for (Index =3D 0; Index < GdtEntryCount; Index++) { if (GdtEntry->Bits.L =3D=3D 0) { - if (GdtEntry->Bits.Type > 8 && GdtEntry->Bits.L =3D=3D 0) { + if (GdtEntry->Bits.Type > 8 && GdtEntry->Bits.DB =3D=3D 1) { break; } } diff --git a/UefiCpuPkg/Library/MpInitLib/Ia32/MpEqu.inc b/UefiCpuPkg/Libra= ry/MpInitLib/Ia32/MpEqu.inc index efb1bc2bf7cb..4f5a7c859a56 100644 --- a/UefiCpuPkg/Library/MpInitLib/Ia32/MpEqu.inc +++ b/UefiCpuPkg/Library/MpInitLib/Ia32/MpEqu.inc @@ -19,7 +19,7 @@ CPU_SWITCH_STATE_IDLE equ 0 CPU_SWITCH_STATE_STORED equ 1 CPU_SWITCH_STATE_LOADED equ 2 =20 -LockLocation equ (RendezvousFunnelProcEnd - Rendez= vousFunnelProcStart) +LockLocation equ (SwitchToRealProcEnd - Rendezvous= FunnelProcStart) StackStartAddressLocation equ LockLocation + 04h StackSizeLocation equ LockLocation + 08h ApProcedureLocation equ LockLocation + 0Ch diff --git a/UefiCpuPkg/Library/MpInitLib/Ia32/MpFuncs.nasm b/UefiCpuPkg/Li= brary/MpInitLib/Ia32/MpFuncs.nasm index b74046b76af3..309d53bf3b37 100644 --- a/UefiCpuPkg/Library/MpInitLib/Ia32/MpFuncs.nasm +++ b/UefiCpuPkg/Library/MpInitLib/Ia32/MpFuncs.nasm @@ -215,6 +215,16 @@ CProcedureInvoke: jmp $ ; Never reach here RendezvousFunnelProcEnd: =20 +;-------------------------------------------------------------------------= ------------ +;SwitchToRealProc procedure follows. +;NOT USED IN 32 BIT MODE. +;-------------------------------------------------------------------------= ------------ +global ASM_PFX(SwitchToRealProc) +ASM_PFX(SwitchToRealProc): +SwitchToRealProcStart: + jmp $ ; Never reach here +SwitchToRealProcEnd: + ;-------------------------------------------------------------------------= ------------ ; AsmRelocateApLoop (MwaitSupport, ApTargetCState, PmCodeSegment, TopOfAp= Stack, CountTofinish); ;-------------------------------------------------------------------------= ------------ @@ -263,6 +273,11 @@ ASM_PFX(AsmGetAddressMap): mov dword [ebx + 0Ch], AsmRelocateApLoopStart mov dword [ebx + 10h], AsmRelocateApLoopEnd - AsmRelocateApLoop= Start mov dword [ebx + 14h], Flat32Start - RendezvousFunnelProcStart + mov dword [ebx + 18h], SwitchToRealProcEnd - SwitchToRealProcSt= art ; SwitchToRealSize + mov dword [ebx + 1Ch], SwitchToRealProcStart - RendezvousFunnel= ProcStart ; SwitchToRealOffset + mov dword [ebx + 20h], SwitchToRealProcStart - Flat32Start = ; SwitchToRealNoNxOffset + mov dword [ebx + 24h], 0 = ; SwitchToRealPM16ModeOffset + mov dword [ebx + 28h], 0 = ; SwitchToRealPM16ModeSize =20 popad ret diff --git a/UefiCpuPkg/Library/MpInitLib/X64/MpEqu.inc b/UefiCpuPkg/Librar= y/MpInitLib/X64/MpEqu.inc index 58ef369342a7..245f323f977b 100644 --- a/UefiCpuPkg/Library/MpInitLib/X64/MpEqu.inc +++ b/UefiCpuPkg/Library/MpInitLib/X64/MpEqu.inc @@ -19,7 +19,7 @@ CPU_SWITCH_STATE_IDLE equ 0 CPU_SWITCH_STATE_STORED equ 1 CPU_SWITCH_STATE_LOADED equ 2 =20 -LockLocation equ (RendezvousFunnelProcEnd - Rendez= vousFunnelProcStart) +LockLocation equ (SwitchToRealProcEnd - Rendezvous= FunnelProcStart) StackStartAddressLocation equ LockLocation + 08h StackSizeLocation equ LockLocation + 10h ApProcedureLocation equ LockLocation + 18h @@ -41,3 +41,5 @@ ModeTransitionSegmentLocation equ LockLocation + 9= 8h ModeHighMemoryLocation equ LockLocation + 9Ah ModeHighSegmentLocation equ LockLocation + 9Eh Enable5LevelPagingLocation equ LockLocation + 0A0h +SevEsActiveLocation equ LockLocation + 0A1h +GhcbBaseLocation equ LockLocation + 0A2h diff --git a/UefiCpuPkg/Library/MpInitLib/X64/MpFuncs.nasm b/UefiCpuPkg/Lib= rary/MpInitLib/X64/MpFuncs.nasm index 87f2523e856f..bbc7432740ff 100644 --- a/UefiCpuPkg/Library/MpInitLib/X64/MpFuncs.nasm +++ b/UefiCpuPkg/Library/MpInitLib/X64/MpFuncs.nasm @@ -184,9 +184,97 @@ Releaselock: add edi, StackStartAddressLocation add rax, qword [edi] mov rsp, rax + + lea edi, [esi + SevEsActiveLocation] + cmp byte [edi], 1 ; SevEsActive + jne CProcedureInvoke + + ; + ; program GHCB + ; Each page after the GHCB is a per-CPU page, so the calculation pro= grams + ; a GHCB to be every 8KB. + ; + mov eax, SIZE_4KB + shl eax, 1 ; EAX =3D SIZE_4K * 2 + mov ecx, ebx + mul ecx ; EAX =3D SIZE_4K * 2 * C= puNumber + mov edi, esi + add edi, GhcbBaseLocation + add rax, qword [edi] + mov rdx, rax + shr rdx, 32 + mov rcx, 0xc0010130 + wrmsr jmp CProcedureInvoke =20 GetApicId: + lea edi, [esi + SevEsActiveLocation] + cmp byte [edi], 1 ; SevEsActive + jne DoCpuid + + ; + ; Since we don't have a stack yet, we can't take a #VC + ; exception. Use the GHCB protocol to perform the CPUID + ; calls. + ; + mov rcx, 0xc0010130 + rdmsr + shl rdx, 32 + or rax, rdx + mov rdi, rax ; RDI now holds the original GHCB GPA + + mov rdx, 0 ; CPUID function 0 + mov rax, 0 ; RAX register requested + or rax, 4 + wrmsr + rep vmmcall + rdmsr + cmp edx, 0bh + jb NoX2ApicSevEs ; CPUID level below CPUID_EXTENDED_TOP= OLOGY + + mov rdx, 0bh ; CPUID function 0x0b + mov rax, 040000000h ; RBX register requested + or rax, 4 + wrmsr + rep vmmcall + rdmsr + test edx, 0ffffh + jz NoX2ApicSevEs ; CPUID.0BH:EBX[15:0] is zero + + mov rdx, 0bh ; CPUID function 0x0b + mov rax, 0c0000000h ; RDX register requested + or rax, 4 + wrmsr + rep vmmcall + rdmsr + + ; Processor is x2APIC capable; 32-bit x2APIC ID is now in EDX + jmp RestoreGhcb + +NoX2ApicSevEs: + ; Processor is not x2APIC capable, so get 8-bit APIC ID + mov rdx, 1 ; CPUID function 1 + mov rax, 040000000h ; RBX register requested + or rax, 4 + wrmsr + rep vmmcall + rdmsr + shr edx, 24 + +RestoreGhcb: + mov rbx, rdx ; Save x2APIC/APIC ID + + mov rdx, rdi ; RDI holds the saved GHCB GPA + shr rdx, 32 + mov eax, edi + wrmsr + + mov rdx, rbx + + ; x2APIC ID or APIC ID is in EDX + jmp GetProcessorNumber + +DoCpuid: mov eax, 0 cpuid cmp eax, 0bh @@ -253,12 +341,158 @@ CProcedureInvoke: =20 RendezvousFunnelProcEnd: =20 +;-------------------------------------------------------------------------= ------------ +;SwitchToRealProc procedure follows. +;ALSO THIS PROCEDURE IS EXECUTED BY APs TRANSITIONING TO 16 BIT MODE. HENC= E THIS PROC +;IS IN MACHINE CODE. +; SwitchToRealProc (UINTN BufferStart, UINT16 Code16, UINT16 Code32, UINT= N StackStart) +; rcx - Buffer Start +; rdx - Code16 Selector Offset +; r8 - Code32 Selector Offset +; r9 - Stack Start +;-------------------------------------------------------------------------= ------------ +global ASM_PFX(SwitchToRealProc) +ASM_PFX(SwitchToRealProc): +SwitchToRealProcStart: +BITS 64 + cli + + ; + ; Get RDX reset value before changing stacks since the + ; new stack won't be able to accomodate a #VC exception. + ; + push rax + push rbx + push rcx + push rdx + + mov rax, 1 + cpuid + mov rsi, rax ; Save off the reset value for = RDX + + pop rdx + pop rcx + pop rbx + pop rax + + ; + ; Establish stack below 1MB + ; + mov rsp, r9 + + ; + ; Push ultimate Reset Vector onto the stack + ; + mov rax, rcx + shr rax, 4 + push word 0x0002 ; RFLAGS + push ax ; CS + push word 0x0000 ; RIP + push word 0x0000 ; For alignment, will be discar= ded + + ; + ; Get address of "16-bit operand size" label + ; + lea rbx, [PM16Mode] + + ; + ; Push addresses used to change to compatibility mode + ; + lea rax, [CompatMode] + push r8 + push rax + + ; + ; Clear R8 - R15, for reset, before going into 32-bit mode + ; + xor r8, r8 + xor r9, r9 + xor r10, r10 + xor r11, r11 + xor r12, r12 + xor r13, r13 + xor r14, r14 + xor r15, r15 + + ; + ; Far return into 32-bit mode + ; +o64 retf + +BITS 32 +CompatMode: + ; + ; Set up stack to prepare for exiting protected mode + ; + push edx ; Code16 CS + push ebx ; PM16Mode label address + + ; + ; Disable paging + ; + mov eax, cr0 ; Read CR0 + btr eax, 31 ; Set PG=3D0 + mov cr0, eax ; Write CR0 + + ; + ; Disable long mode + ; + mov ecx, 0c0000080h ; EFER MSR number + rdmsr ; Read EFER + btr eax, 8 ; Set LME=3D0 + wrmsr ; Write EFER + + ; + ; Disable PAE + ; + mov eax, cr4 ; Read CR4 + btr eax, 5 ; Set PAE=3D0 + mov cr4, eax ; Write CR4 + + mov edx, esi ; Restore RDX reset value + + ; + ; Switch to 16-bit operand size + ; + retf + +BITS 16 + ; + ; At entry to this label + ; - RDX will have its reset value + ; - On the top of the stack + ; - Alignment data (two bytes) to be discarded + ; - IP for Real Mode (two bytes) + ; - CS for Real Mode (two bytes) + ; +PM16Mode: + mov eax, cr0 ; Read CR0 + btr eax, 0 ; Set PE=3D0 + mov cr0, eax ; Write CR0 + + pop ax ; Discard alignment data + + ; + ; Clear registers (except RDX and RSP) before going into 16-bit mode + ; + xor eax, eax + xor ebx, ebx + xor ecx, ecx + xor esi, esi + xor edi, edi + xor ebp, ebp + + iret + +SwitchToRealProcEnd: + ;-------------------------------------------------------------------------= ------------ ; AsmRelocateApLoop (MwaitSupport, ApTargetCState, PmCodeSegment, TopOfAp= Stack, CountTofinish); ;-------------------------------------------------------------------------= ------------ global ASM_PFX(AsmRelocateApLoop) ASM_PFX(AsmRelocateApLoop): AsmRelocateApLoopStart: +BITS 64 cli ; Disable interrupt before switching to 3= 2-bit mode mov rax, [rsp + 40] ; CountTofinish lock dec dword [rax] ; (*CountTofinish)-- @@ -324,6 +558,11 @@ ASM_PFX(AsmGetAddressMap): mov qword [rcx + 18h], rax mov qword [rcx + 20h], AsmRelocateApLoopEnd - AsmRelocateApLoop= Start mov qword [rcx + 28h], Flat32Start - RendezvousFunnelProcStart + mov qword [rcx + 30h], SwitchToRealProcEnd - SwitchToRealProcSt= art ; SwitchToRealSize + mov qword [rcx + 38h], SwitchToRealProcStart - RendezvousFunnel= ProcStart ; SwitchToRealOffset + mov qword [rcx + 40h], SwitchToRealProcStart - Flat32Start = ; SwitchToRealNoNxOffset + mov qword [rcx + 48h], PM16Mode - RendezvousFunnelProcStart = ; SwitchToRealPM16ModeOffset + mov qword [rcx + 50h], SwitchToRealProcEnd - PM16Mode = ; SwitchToRealPM16ModeSize ret =20 ;-------------------------------------------------------------------------= ------------ --=20 2.17.1 -=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 (#47672): https://edk2.groups.io/g/devel/message/47672 Mute This Topic: https://groups.io/mt/34203585/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- From nobody Sun May 5 15:05:55 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zoho.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+47717+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 1568985409116204.8219666396501; Fri, 20 Sep 2019 06:16:49 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id QH0VYY1788612xm6CrXNkEU0; Fri, 20 Sep 2019 06:16:48 -0700 X-Received: from NAM01-BY2-obe.outbound.protection.outlook.com (NAM01-BY2-obe.outbound.protection.outlook.com [40.107.81.83]) by groups.io with SMTP; Fri, 20 Sep 2019 06:16:47 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=iT81yz+fcWiGkebDbAJrnM65V+02x18pQQAhxKEKp5f/KCLmdS07mkXNDloCNef+nqLPbVaHYabOax9qwzUydRE+ywamWoXU/O1EHOUFpsh3fGOLIKHs1UbQotIrmmMl7zZSk40/EEZfEMKwefMK3C73uLA0f5mkJzkGpb/2Vewu8ppwN+Id5LhnhIWxXrcNfsO+untqrkkASwFKlvJgGTZyeupsfL9fJ3Wjf8kCXqdmjeNdAL/4MyaYnl6GcPvJ7XbJNtG0b3ubIC+9aH8gKIhrqyYFlLW4sWe+QS5XBl0p+PeMukEpMcSQUp5VU8+MUwQ4SnVxR2L4acl43lwJ7A== 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=Ypb/cN3XEpC6nmzam0gTbuuSFGKYA6mgpPzL+8E5OtM=; b=YS1kLfLo5U/OG/1U/Zh79seFgKb+0+06s6DTD6tvxivyqEBO6d/xJmIU+pZ6EIuV1qJiGyyGuSzgeMeyjiA/c+J3B2J9VG3b+CquPRpr/L/XlHubMuOWEpuNSSQuDOK0/AeD0Zo3REhMnumutjmQ5zy1xMHT3+LWU05R0FC5L929tUbFsb6gTFcMEBMkmR+i+0vNIr5XJEyUDSm4NHGNUAtzhFYDeiT5Yr+lbWzELhOPAKXPlp6XPojmXmzAPwf9zOUSNRgtyVIJegCXCx2GZ9cB69OZkaaqtyPYxNPnvHstoJdV/1J8ue7EPqKHYwXRL/VuAIc+IgC+N8nHdPrzFg== 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 DM6PR12MB3163.namprd12.prod.outlook.com (20.179.104.150) by DM6PR12MB3995.namprd12.prod.outlook.com (10.255.175.31) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2284.23; Fri, 20 Sep 2019 13:16:46 +0000 X-Received: from DM6PR12MB3163.namprd12.prod.outlook.com ([fe80::400e:f0c3:7ca:2fcc]) by DM6PR12MB3163.namprd12.prod.outlook.com ([fe80::400e:f0c3:7ca:2fcc%6]) with mapi id 15.20.2284.009; Fri, 20 Sep 2019 13:16:45 +0000 From: "Lendacky, Thomas" To: "devel@edk2.groups.io" Subject: [edk2-devel] [RFC PATCH v2 39/44] OvmfPkg: Move the GHCB allocations into reserved memory Thread-Topic: [RFC PATCH v2 39/44] OvmfPkg: Move the GHCB allocations into reserved memory Thread-Index: AQHVb7WmcbqDkeRSr0uzt9gjRcV44g== Date: Fri, 20 Sep 2019 13:16:45 +0000 Message-ID: <7a169f2dd9e6ae7f266b8ef2b690865dc04b4764.1568922729.git.thomas.lendacky@amd.com> References: In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: SN6PR06CA0023.namprd06.prod.outlook.com (2603:10b6:805:8e::36) To DM6PR12MB3163.namprd12.prod.outlook.com (2603:10b6:5:182::22) x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [165.204.78.1] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 4dbac3fb-a7e5-49ce-25e3-08d73dccc949 x-ms-office365-filtering-ht: Tenant x-ms-traffictypediagnostic: DM6PR12MB3995: x-ms-exchange-purlcount: 1 x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:3044; Received-SPF: pass (zoho.com: domain of groups.io designates 66.175.222.12 as permitted sender) client-ip=66.175.222.12; envelope-from=bounce+27952+47717+1787277+3901457@groups.io; helo=web01.groups.io; received-spf: None (protection.outlook.com: amd.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: 8xvjs7rb0q5O0BL3Ncpw/7i0ltS1/q7w2HLHwKYet3XhlMs0Ajf/j0Lw6TjTktKjFHvcCkOM37q7EcFCUhh7EYFGK7SliNyGfeGqzBerFnNCk0jeGlqqXURHxSu5hzqQrpwR5CxOjb6uD3KohQyyJWG9/0jDM+ytjk2crvS/hjpQNlpFln4KRiVW4GYfLg6fDZJswp1kt3KccCI7I178C2fs3gwEbqO/kqQWvGfgXVRC0NUpL/xBPiBOvmzmG3l1FOVZBRfmSFA9x3/scJBvbRcqsKfB+zMTho7lSCUzhSrrCsHbM4f+bCEecMsv2w/WwjVfbL+DTm8HtUMJ/s1InX5wANylGKlD9GYHtC41q1jq+gomb4O2zIOkyjDlVL1xL2TMWVQFUouAZ15O5Ccqg721jKy+0n1dHsw4EBQG80A= x-ms-exchange-transport-forked: True MIME-Version: 1.0 X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: 4dbac3fb-a7e5-49ce-25e3-08d73dccc949 X-MS-Exchange-CrossTenant-originalarrivaltime: 20 Sep 2019 13:16:45.8190 (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: tgBt/nh87vS/Rn50oM6LxBjZ5jtg3BYCQrmX/MnPq0Lp4z/G/0zWX5G3TEk55NdnsakY5KNWh+iaiZC5HG7ENA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR12MB3995 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: TGjqM8K8fzGPSbeXWY0o7AZPx1787277AA= Content-Language: en-US Content-ID: Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1568985408; bh=q4jkaPpHgk6ElkqcstAKC6flzpOi5Yc9K9O1o6O3UTw=; h=Content-Type:Date:From:Reply-To:Subject:To; b=Mu574lI0Ka0EvwbAADco7mcDQ6NkWRbKe9cfnMED/NMHIxLLbvCTKk2Vhzsc1CbZFXw ksNT2ALRM9qBfp+3E012DgYjYo1haDTnsx/AzSM6TacI+3cU+vOvGGfFqpQQ0ESjRgPSi UI/k7Lwxrt6Ixi95A9YdSPyMLj+LUcXDgQE= 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=3D2198 After having transitioned from UEFI to the OS, the OS will need to boot the APs. For an SEV-ES guest, the APs will have been parked by UEFI using GHCB pages allocated by UEFI. The hypervisor will write to the GHCB SW_EXITINFO2 field of the GHCB when the AP is booted. As a result, the GHCB pages must be marked reserved so that the OS does not attempt to use them and experience memory corruption because of the hypervisor write. Change the GHCB allocation from the default boot services memory to reserved memory. Cc: Jordan Justen Cc: Laszlo Ersek Cc: Ard Biesheuvel Signed-off-by: Tom Lendacky Reviewed-by: Laszlo Ersek --- OvmfPkg/PlatformPei/AmdSev.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/OvmfPkg/PlatformPei/AmdSev.c b/OvmfPkg/PlatformPei/AmdSev.c index d6733447bdf2..53eeb59702ae 100644 --- a/OvmfPkg/PlatformPei/AmdSev.c +++ b/OvmfPkg/PlatformPei/AmdSev.c @@ -49,9 +49,11 @@ AmdSevEsInitialize ( =20 // // Allocate GHCB pages. + // Since the pages must survive across the UEFI to OS transition + // make them reserved. // GhcbPageCount =3D mMaxCpuCount * 2; - GhcbBase =3D AllocatePages (GhcbPageCount); + GhcbBase =3D AllocateReservedPages (GhcbPageCount); ASSERT (GhcbBase); =20 GhcbBasePa =3D (PHYSICAL_ADDRESS)(UINTN) GhcbBase; --=20 2.17.1 -=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 (#47717): https://edk2.groups.io/g/devel/message/47717 Mute This Topic: https://groups.io/mt/34230273/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- From nobody Sun May 5 15:05:55 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zoho.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+47673+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 1568922818143573.3996109761521; Thu, 19 Sep 2019 12:53:38 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id DILgYY1788612xwMH3LYQFz1; Thu, 19 Sep 2019 12:53:37 -0700 X-Received: from NAM03-DM3-obe.outbound.protection.outlook.com (NAM03-DM3-obe.outbound.protection.outlook.com [40.107.80.41]) by groups.io with SMTP; Thu, 19 Sep 2019 12:53:37 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=M10EbdJjdb+uHocUFbOatx69ocFk8Vu7hwMa2hhuON0Xe6Q+djWpdXonJ4qYCwdh93YjdTeUZk8hjdGvdzLzJTv9/Ho0aue773sG0cqFM5+etd0eWuF98OKzH53XpfFFpNokLQDFANnHdJ60xWFkchzyY9VeIztWty/o8UOinH1iP3U9KORyChpLvC28rG6jMuMJZcPPJu0G7NXDBrfw8qwwu77gPZ5jbtxX9aLewbJ7NHr9Zw4SajoPauf18aaLpSoT4ylwgSUMtxQFCHyc+UZM0Ox5xqJS05CREHlI7ZkXyFiSK2lVkYQErHerPIHaMjj02FF1HrokAU61ApvlMQ== 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=VwxskINgSCdhgmjPB9ZX3JQOFvWZAyyStNRPXDk+F2U=; b=b/pk0ubJ3xuuIP/z0FZQ/2xDYdxPTzGrl6KPrD8TrqUeWa1WCEmSHPQrJffN9CPNRIra33WKYptR0KBpY1N7YYcBvTjTbnHsbY5dbduVAZrOODhu5DLZ4Zk/uV2b7xuln30XfOE5gzN20+e+Z0kuidCrkBKK6FFy/C4fpLb3e+Y1rwSCZERNX5pMaRAfFg0xXNzicszHRWIsGV5aKWdBOlaoAx3nYz6NJTQSBa0FbGM/qeuiM+gUsTsoMj8ps+fnErR9Iu+q1uuPrFgf7/0PJgks62WBouokiLP894MKTX3OS0/dIWqJqCqeF6F67bpBYy9HxwtE21AbQ90wTOyGOA== 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 DM6PR12MB3163.namprd12.prod.outlook.com (20.179.104.150) by DM6PR12MB2890.namprd12.prod.outlook.com (20.179.71.152) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2263.23; Thu, 19 Sep 2019 19:53:36 +0000 X-Received: from DM6PR12MB3163.namprd12.prod.outlook.com ([fe80::400e:f0c3:7ca:2fcc]) by DM6PR12MB3163.namprd12.prod.outlook.com ([fe80::400e:f0c3:7ca:2fcc%6]) with mapi id 15.20.2284.009; Thu, 19 Sep 2019 19:53:36 +0000 From: "Lendacky, Thomas" To: "devel@edk2.groups.io" CC: Jordan Justen , Laszlo Ersek , Ard Biesheuvel , Michael D Kinney , Liming Gao , Eric Dong , Ray Ni , "Singh, Brijesh" Subject: [edk2-devel] [RFC PATCH v2 40/44] MdePkg: Add a finalization function to the CPU protocol Thread-Topic: [RFC PATCH v2 40/44] MdePkg: Add a finalization function to the CPU protocol Thread-Index: AQHVbyPcH3RmcZsQmEK4fwswy+cHrA== Date: Thu, 19 Sep 2019 19:53:09 +0000 Message-ID: <9572b4b75eb1783ba7160386d0db0b8c2ad056f0.1568922729.git.thomas.lendacky@amd.com> References: In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: SN4PR0501CA0146.namprd05.prod.outlook.com (2603:10b6:803:2c::24) To DM6PR12MB3163.namprd12.prod.outlook.com (2603:10b6:5:182::22) x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [165.204.78.1] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 94192605-fc3a-422a-ecf0-08d73d3afece x-ms-office365-filtering-ht: Tenant x-ms-traffictypediagnostic: DM6PR12MB2890: x-ms-exchange-purlcount: 1 x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:3276; Received-SPF: pass (zoho.com: domain of groups.io designates 66.175.222.12 as permitted sender) client-ip=66.175.222.12; envelope-from=bounce+27952+47673+1787277+3901457@groups.io; helo=web01.groups.io; received-spf: None (protection.outlook.com: amd.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: v5aJ21PraYAHlH50sPd5j4dvK4wOYLJPTSbxCzp9/nFKPeooOk5wZ1EuDbEfVCcP5mSfMcAzgkL69NycJBb3oXlApfwMevQVAIm8/7qAeP82XTouWKB8CyeQBO1RKzhuuUwOU2zKmlyPycCUyANU6q8VJ+jxbGrfxE6lo1Ph9qEexcTDKdbCeDhnTGkb7IzYlbBUAKQcsA03fa1pWFGyUAkdh4OQmQqy0o7HH83EgG6PXNZ7CBhZclRL7JxHMG59cEW1t8zsOFdrKQOxKJlvhEoGokRCSsB0ECbaQz4aBLGGWaep+s3pfJi4Hk6nCDhjchtFHSb1sNNDdLFMR5zh3YJc95El3G1NL6k6T0TDgmd5vZLLU3x8nfgcfy1qRgOadQqf2SDRX7i2DxwvBKxUPzv3oeC6dfKjez72jaEwiow= MIME-Version: 1.0 X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: 94192605-fc3a-422a-ecf0-08d73d3afece X-MS-Exchange-CrossTenant-originalarrivaltime: 19 Sep 2019 19:53:09.0654 (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: jS4vV9kUcU+I522DDkWNsis1SdB8knvGPUXTLJSqZDV8v41+hDjoRXHyVvGeKGPDP+dhkGwpPMJHUaZok8tEKw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR12MB2890 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: uVzt6diwQp16hnRBdwm0Wb87x1787277AA= Content-Language: en-US Content-ID: Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1568922817; bh=gVVzDvKThqGmn7p01qzW38ELoHxtEo4cjleivMtHhPs=; h=CC:Content-Type:Date:From:Reply-To:Subject:To; b=xFawT02ivFVIxA75nvIQLuhVe6+riGxMzrkbbBX/aNCd3WUTaA87bBnHQKwXf95ev0K THtfjd6JVnIBquDl1pELsk0iSYpBpsAkkldXy/5ogONRmugET0E6HcnEJDT+82LB8BM8m Al+ThfT95iTXX925x7s40+qvzW7QYy+dOZ8= 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=3D2198 Expand the CPU protocol to include a finalization function that can be used to perform any final AP processing or AP environment setup before transferring control over to an OS. Cc: Michael D Kinney Cc: Liming Gao Signed-off-by: Tom Lendacky --- MdePkg/Include/Protocol/Cpu.h | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/MdePkg/Include/Protocol/Cpu.h b/MdePkg/Include/Protocol/Cpu.h index e392f4cd9a13..1603797edd1c 100644 --- a/MdePkg/Include/Protocol/Cpu.h +++ b/MdePkg/Include/Protocol/Cpu.h @@ -258,6 +258,22 @@ EFI_STATUS ); =20 =20 +/** + This function is used to perform any CPU finalization operations needed + before exiting boot services. + + @param This The EFI_CPU_ARCH_PROTOCOL instance. + + @return None + +**/ +typedef +VOID +(EFIAPI *EFI_CPU_FINALIZE)( + IN EFI_CPU_ARCH_PROTOCOL *This + ); + + /// /// The EFI_CPU_ARCH_PROTOCOL is used to abstract processor-specific funct= ions from the DXE /// Foundation. This includes flushing caches, enabling and disabling inte= rrupts, hooking interrupt @@ -287,6 +303,8 @@ struct _EFI_CPU_ARCH_PROTOCOL { /// a read-only field. /// UINT32 DmaBufferAlignment; + + EFI_CPU_FINALIZE Finalize; }; =20 extern EFI_GUID gEfiCpuArchProtocolGuid; --=20 2.17.1 -=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 (#47673): https://edk2.groups.io/g/devel/message/47673 Mute This Topic: https://groups.io/mt/34203586/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- From nobody Sun May 5 15:05:55 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zoho.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+47718+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 1568985409496913.7092791350711; Fri, 20 Sep 2019 06:16:49 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id uNifYY1788612xTxvvsDWTTp; Fri, 20 Sep 2019 06:16:48 -0700 X-Received: from NAM01-BY2-obe.outbound.protection.outlook.com (NAM01-BY2-obe.outbound.protection.outlook.com []) by groups.io with SMTP; Fri, 20 Sep 2019 06:16:48 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=GGJr650l5PDB8NthoyRAqmXfSPQQ21ekpcvS4vrJHRGZIFhZbcDOPU9w56ugO5HOs/P+HLDDdV9UodiaiqynwYwANw5q3ZW0iTLZou7UthYyIVm3NDpzsF7PBiTEbC+UhbqBNDSpAK1wWU+riCKGbrbbDi7/q7b3tPokznmYhI0CVRDlY0tZYryfPPQQe05eOSSIK2JRqsjqMMw5qizpDcXTadTUbUmxgCoPX3/BtbBlj9ikYF5qxVzepihyrFSIN5pCAEMIs6F9efBYAh9uhHYBx7otEHGk7t3Gfgnf76rq+XjlodkvwNeyDaiBquQTJN666nOBAMVuEpaAi9knIg== 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=bHsLHVP9ebNzt4dIuNhV++1/qNFC6yhguXMea4Do5LU=; b=lwy8TaoOLHXv8AmNSoUitp0MrFS8Wyx40RJ5C3CzyzpygCmp4ROIDONXQI/yvbob11ILThmnbyCi1tK/4/btpoXEOTGGPG1SkFyhW5zoJTZBzINk+uSbBKxGLTDmwxuNmggxzmK0ll3pS7uPCP852DFKfZfrS++/d6hcld5uvmFSrV92xCy/DGI4Rq8mmbjLrLCYjNoexOTKpqx4ah+BANANoR4zdCw/qwytyhS1M/NwELbwgEY8yeRQPcOeUf5XZBdoFFafhdwQsCySe6aVAjppJw2abBYDilDMaTBqg0LWQm6N0RbOId57vWK/zLMXtA4KvKZ0jU2Yv3+APDylYw== 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 DM6PR12MB3163.namprd12.prod.outlook.com (20.179.104.150) by DM6PR12MB3995.namprd12.prod.outlook.com (10.255.175.31) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2284.23; Fri, 20 Sep 2019 13:16:46 +0000 X-Received: from DM6PR12MB3163.namprd12.prod.outlook.com ([fe80::400e:f0c3:7ca:2fcc]) by DM6PR12MB3163.namprd12.prod.outlook.com ([fe80::400e:f0c3:7ca:2fcc%6]) with mapi id 15.20.2284.009; Fri, 20 Sep 2019 13:16:46 +0000 From: "Lendacky, Thomas" To: "devel@edk2.groups.io" Subject: [edk2-devel] [RFC PATCH v2 41/44] UefiCpuPkg/MpInitLib: Add MP finalization interface to MpInitLib Thread-Topic: [RFC PATCH v2 41/44] UefiCpuPkg/MpInitLib: Add MP finalization interface to MpInitLib Thread-Index: AQHVb7Wn9ZEoBT4h0UmeDqAaEgE3yA== Date: Fri, 20 Sep 2019 13:16:46 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: SN6PR06CA0023.namprd06.prod.outlook.com (2603:10b6:805:8e::36) To DM6PR12MB3163.namprd12.prod.outlook.com (2603:10b6:5:182::22) x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [165.204.78.1] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 12d10ca7-60b0-4e31-c4d2-08d73dccc99f x-ms-office365-filtering-ht: Tenant x-ms-traffictypediagnostic: DM6PR12MB3995: x-ms-exchange-purlcount: 1 x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:8273; Received-SPF: pass (zoho.com: domain of groups.io designates 66.175.222.12 as permitted sender) client-ip=66.175.222.12; envelope-from=bounce+27952+47718+1787277+3901457@groups.io; helo=web01.groups.io; received-spf: None (protection.outlook.com: amd.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: 24laHUf47o50yA+7MpCDiAKT1UcPGGmIR64f/V1tbHTqt1tT76LTrgtB5zMpq4ShEazmXpwlT3yCw7SyHH78ppLuOfExS9MekHkGQIgYt++gbYqpNQ1jPk9KQfpVRTAxKDvhGUyVCsMhXarFC7WG0qAnAwaJhtCfitoesMRNYJSBqoDKRtPhBrdcOB3iU3Bfb9G+p+0M81EUtKLZx8D7VQ/sia3JbmD6ZLXpzVnCinBnOYeKv6DaaUzyeLv7pQYd7Fyr/yrzJDzJUCVkcTwwgmoRnqat+buba/Nr61znzsT5ocMB372P4cGGPtKHXh3DXrBqZcZ9eOoHwhN4+jURGmdtT93U34gjn6kKkW51hwMCt/9i4/hJC6RsMb4D1GeLP6u/FBRGExWGV5Wu7mW/t5aF77m1AbGUVIy6L5zThxI= x-ms-exchange-transport-forked: True MIME-Version: 1.0 X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: 12d10ca7-60b0-4e31-c4d2-08d73dccc99f X-MS-Exchange-CrossTenant-originalarrivaltime: 20 Sep 2019 13:16:46.3397 (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: /dhTM61U7Lo9XkqGULVplltBHipFwh98OoBuFBVbn8wlmDpO1A7cVq1no2xf39KmJLA27Gx3Qud7RunspXP3Gw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR12MB3995 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: y9xvOEhF2nBtoxAPdJb17R3Px1787277AA= Content-Language: en-US Content-ID: Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1568985408; bh=X5icUG3RUlsJogH8IL9fJrJ01Csq8eGXTZF9rSoDNog=; h=Content-Type:Date:From:Reply-To:Subject:To; b=QQ6i0Y6uhhRRgzCJ/mTMGpIqHqjI2kO6++w9LXaDBWthZeZ42raDNyp3dXiOCTKtDzf TigcZDUbEHahkUj0JnJp7hcQ3PQgz+fqNPMzGe+S1/j9uDYHc/7TgQBPpM1cZJ1VoWGi9 OzFKWd/MFHoyvGkwPNo6XQTAb6zbEEAqsBE= 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=3D2198 Provide an MP finalization function that can be called from the CPU protocol finalization function. Cc: Eric Dong Cc: Ray Ni Cc: Laszlo Ersek Signed-off-by: Tom Lendacky --- UefiCpuPkg/Include/Library/MpInitLib.h | 14 ++++++++++++++ UefiCpuPkg/Library/MpInitLib/MpLib.h | 11 +++++++++++ UefiCpuPkg/Library/MpInitLib/DxeMpLib.c | 18 ++++++++++++++++++ UefiCpuPkg/Library/MpInitLib/MpLib.c | 23 +++++++++++++++++++++++ UefiCpuPkg/Library/MpInitLib/PeiMpLib.c | 16 ++++++++++++++++ 5 files changed, 82 insertions(+) diff --git a/UefiCpuPkg/Include/Library/MpInitLib.h b/UefiCpuPkg/Include/Li= brary/MpInitLib.h index 31eb227f1209..f9beeefca78e 100644 --- a/UefiCpuPkg/Include/Library/MpInitLib.h +++ b/UefiCpuPkg/Include/Library/MpInitLib.h @@ -378,4 +378,18 @@ MpInitLibStartupAllCPUs ( IN VOID *ProcedureArgument OPTIONAL ); =20 +/** + This service allows users of MpLib to make any finalization changes + before transferring control out of UEFI + + @retval EFI_SUCCESS MP initialization succeeds. + @retval Others MP initialization fails. + +**/ +EFI_STATUS +EFIAPI +MpLibFinalize ( + VOID + ); + #endif diff --git a/UefiCpuPkg/Library/MpInitLib/MpLib.h b/UefiCpuPkg/Library/MpIn= itLib/MpLib.h index 4cfb93ee4f77..5966510d4a1b 100644 --- a/UefiCpuPkg/Library/MpInitLib/MpLib.h +++ b/UefiCpuPkg/Library/MpInitLib/MpLib.h @@ -654,5 +654,16 @@ EnableDebugAgent ( VOID ); =20 +/** + Perform MpLib finalization before transferring control out of UEFI + + @param[in] CpuMpData The pointer to CPU MP Data structure. + +**/ +EFI_STATUS +MpFinalize ( + IN CPU_MP_DATA *CpuMpData + ); + #endif =20 diff --git a/UefiCpuPkg/Library/MpInitLib/DxeMpLib.c b/UefiCpuPkg/Library/M= pInitLib/DxeMpLib.c index 8df5b6d919e6..16603ef3f20e 100644 --- a/UefiCpuPkg/Library/MpInitLib/DxeMpLib.c +++ b/UefiCpuPkg/Library/MpInitLib/DxeMpLib.c @@ -884,3 +884,21 @@ MpInitLibEnableDisableAP ( =20 return Status; } + +/** + MP finalization + + @param[in] CpuMpData The pointer to CPU MP Data structure. +**/ +EFI_STATUS +MpFinalize ( + IN CPU_MP_DATA *CpuMpData + ) +{ + // + // DXE phase will do this transition, but just return EFI_SUCCESS for no= w. + // + return EFI_SUCCESS; +} + + diff --git a/UefiCpuPkg/Library/MpInitLib/MpLib.c b/UefiCpuPkg/Library/MpIn= itLib/MpLib.c index 43aa9c0a4950..7fd478f735fb 100644 --- a/UefiCpuPkg/Library/MpInitLib/MpLib.c +++ b/UefiCpuPkg/Library/MpInitLib/MpLib.c @@ -1728,6 +1728,29 @@ CheckAllAPs ( return EFI_NOT_READY; } =20 +/** + MP finalization + + This service allows users of MpLib to make any finalization changes + before transferring control out of UEFI. + + This service must be invoked before exiting boot services. + + @retval EFI_SUCCESS MP finalization succeeds. + +**/ +EFI_STATUS +EFIAPI +MpLibFinalize ( + VOID + ) +{ + CPU_MP_DATA *CpuMpData; + + CpuMpData =3D GetCpuMpData (); + return MpFinalize (CpuMpData); +} + /** MP Initialize Library initialization. =20 diff --git a/UefiCpuPkg/Library/MpInitLib/PeiMpLib.c b/UefiCpuPkg/Library/M= pInitLib/PeiMpLib.c index 56956a615b6b..793d26b1bf12 100644 --- a/UefiCpuPkg/Library/MpInitLib/PeiMpLib.c +++ b/UefiCpuPkg/Library/MpInitLib/PeiMpLib.c @@ -604,4 +604,20 @@ MpInitLibEnableDisableAP ( return EnableDisableApWorker (ProcessorNumber, EnableAP, HealthFlag); } =20 +/** + MP finalization + + @param[in] CpuMpData The pointer to CPU MP Data structure. +**/ +EFI_STATUS +MpFinalize ( + IN CPU_MP_DATA *CpuMpData + ) +{ + // + // PEI phase shouldn't do such a transition. So simply return EFI_SUCCES= S. + // + return EFI_SUCCESS; +} + =20 --=20 2.17.1 -=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 (#47718): https://edk2.groups.io/g/devel/message/47718 Mute This Topic: https://groups.io/mt/34230274/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- From nobody Sun May 5 15:05:55 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zoho.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+47719+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 1568985409443886.0274410509455; Fri, 20 Sep 2019 06:16:49 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id O99hYY1788612xzGrF5gaNmp; Fri, 20 Sep 2019 06:16:49 -0700 X-Received: from NAM01-BY2-obe.outbound.protection.outlook.com (NAM01-BY2-obe.outbound.protection.outlook.com []) by groups.io with SMTP; Fri, 20 Sep 2019 06:16:48 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=kh2ARfyzb/szBfRxst9GU13tCeibthHWdTu2ZRB0OoREiucDaw8GP9MTbobK7XeyAgdNHDUlsWxnzL9cL8pxZWjMtA9fWgKA+7afUzKukLaPu48g4DzfYUmfyNjH3fpO+kpEyzhwXVOdIGSmghs9wdNKbZK0/4KV1RyKkbpqioSxu3Rd6dD4QDUfZFqV8OzklqseP5b+W/stXoKcPka5+ulZJ5LdhWQihW+ds4xZg3rDHxwfWKQM/7wHHP6gqCC2lXCnACtj9yrv4F6yeyaf5gcYyJdlA+1pkB3DLlmtn/UBJcfJGp4me8Vf7tGT+E2sJ5QJMSnFcp4J1ZdFV1LAHg== 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=DWWUpvkQzN6zS3D/aXNC4RRz6fZxhmdqemvPgF3fQBg=; b=aUOO02Fm9/sF9wJy4mhDPckktKsX0yiVvPyWpus3k9AAm2CBHekDraiTZuknEruSEWg4D6dwGszVjIOh7o6F4KPRR17lXHgP8HXvWMrOwc6/2Bmcuzqtyz4NzLErgZsR87vL97Q6aAA9WGrHOvwz2ZWCdqGGvB5UtIV5CKS01/eaC+x8BIBK0wsK98XpuHeef0y2bcQSvQ5RrzpOFnoMS+CusW8Ts56u5tTRv9rHZH473MLIbxdUJ1X3QqZCFcLta8dUokREbuROReTPzztgoEZsfsgkNVVnNMqbdwa9fQFnULtN/lsVkmuZIfGGSS16z3X9xK/TFLA+S8OtOZ8Vnw== 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 DM6PR12MB3163.namprd12.prod.outlook.com (20.179.104.150) by DM6PR12MB3995.namprd12.prod.outlook.com (10.255.175.31) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2284.23; Fri, 20 Sep 2019 13:16:47 +0000 X-Received: from DM6PR12MB3163.namprd12.prod.outlook.com ([fe80::400e:f0c3:7ca:2fcc]) by DM6PR12MB3163.namprd12.prod.outlook.com ([fe80::400e:f0c3:7ca:2fcc%6]) with mapi id 15.20.2284.009; Fri, 20 Sep 2019 13:16:47 +0000 From: "Lendacky, Thomas" To: "devel@edk2.groups.io" Subject: [edk2-devel] [RFC PATCH v2 42/44] UefiCpuPkg/MpInitLib: Prepare SEV-ES guest APs for OS use Thread-Topic: [RFC PATCH v2 42/44] UefiCpuPkg/MpInitLib: Prepare SEV-ES guest APs for OS use Thread-Index: AQHVb7Wn/Sbc6qXhL02JKTjJV8iD/g== Date: Fri, 20 Sep 2019 13:16:46 +0000 Message-ID: <00047308110ff3380000f6eb140e815c01499e3a.1568922729.git.thomas.lendacky@amd.com> References: In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: SN6PR06CA0023.namprd06.prod.outlook.com (2603:10b6:805:8e::36) To DM6PR12MB3163.namprd12.prod.outlook.com (2603:10b6:5:182::22) x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [165.204.78.1] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 73865cd9-970a-4630-b656-08d73dccc9f4 x-ms-office365-filtering-ht: Tenant x-ms-traffictypediagnostic: DM6PR12MB3995: x-ms-exchange-purlcount: 1 x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:6108; Received-SPF: pass (zoho.com: domain of groups.io designates 66.175.222.12 as permitted sender) client-ip=66.175.222.12; envelope-from=bounce+27952+47719+1787277+3901457@groups.io; helo=web01.groups.io; received-spf: None (protection.outlook.com: amd.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: /g8Lut+ZlT1x+2TsPVZnjfHPywvklV9anPwiagnD++VlLpo9Gz2FwIrVFDfCrMXotj0pZ/l6fRNGccxry43UqzGbKD3qQ1NioPTYM6e01UnRjpoYhztEiGWV1CyKP0oRA+xr/VTmH+E7MqbKZSQa1tLtPHNvQH9VK/wPvt4xQS1/7soya1xTZPLm/S/10KiEdaZYTaF/caAa7+HCh9gFS3O6CGh6uOJoE4zLq72oXwF6tZWt+88QmBqWh0fzE6CgBVwC3Gv+LBIyNza4O86+CWb4gYN3gJxNOBaZB0xgLKLgLnSCE5japsBWL24+QpDJ7ht8nKG/Lzgyx6KViOlD8jrv47RA7/7d85QXO+BuJaAup32TnjsmCIbfwbauMEJ+Iv8pIO23fzGd6hjcYVfPg0lRBM1QfRP8UE6m3Wn5xOw= x-ms-exchange-transport-forked: True MIME-Version: 1.0 X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: 73865cd9-970a-4630-b656-08d73dccc9f4 X-MS-Exchange-CrossTenant-originalarrivaltime: 20 Sep 2019 13:16:46.8954 (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: +Kz0Pf2ok1lJv2/DbB6iaZLQZPcGJPMi27vtEnQYM2hjGyA9kY4kliupMS7J16jAHWz4kjgf0EGbgOkfv0hw2Q== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR12MB3995 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: OYFGd9Mv1gIBQMOzDGIfpgcnx1787277AA= Content-Language: en-US Content-ID: Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1568985409; bh=SEBa8aPmVwrnhoWBAyAd3uRIzYB/PS0vyQntArjpjQE=; h=Content-Type:Date:From:Reply-To:Subject:To; b=UuLNRAbVi3ApjxW6d8BW8CWiMW/u0QQakimW1kH7lk2spv0Wxer7dQjDTSAXicHARVM WtRc0ypsbf0rHRHnY33j6Wb0hTB+/TeicNsfGb7fMnbSsyHVNPfq3zezRM5HqcvncM9EO pGZVGkaZ4XaLhXKcpUpQYkdRDTFEDS7BUwc= 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=3D2198 Before UEFI transfers control to the OS, it must park the AP. This is done using the AsmRelocateApLoop function to transition into 32-bit non-paging mode. For an SEV-ES guest, a few additional things must be done: - AsmRelocateApLoop must be updated to support SEV-ES. This means performing a VMGEXIT AP Reset Hold instead of an MWAIT or HLT loop. - Since the AP must transition to real mode, a small routine is copied to the WakeupBuffer area. Since the WakeupBuffer will be used by the AP during OS booting, it must be placed in reserved memory. Additionally, the AP stack must be located where it can be accessed in real mode. - Once the AP is in real mode it will transfer control to the destination specified by the OS in the SEV-ES AP Jump Table. The SEV-ES AP Jump Table address is communicated to the OS using the BSP GHCB MSR. Cc: Eric Dong Cc: Ray Ni Cc: Laszlo Ersek Signed-off-by: Tom Lendacky --- UefiCpuPkg/Library/MpInitLib/MpLib.h | 8 +- UefiCpuPkg/Library/MpInitLib/DxeMpLib.c | 54 ++++++- UefiCpuPkg/Library/MpInitLib/X64/MpFuncs.nasm | 134 ++++++++++++++++-- 3 files changed, 176 insertions(+), 20 deletions(-) diff --git a/UefiCpuPkg/Library/MpInitLib/MpLib.h b/UefiCpuPkg/Library/MpIn= itLib/MpLib.h index 5966510d4a1b..2d38a0e85a40 100644 --- a/UefiCpuPkg/Library/MpInitLib/MpLib.h +++ b/UefiCpuPkg/Library/MpInitLib/MpLib.h @@ -277,7 +277,8 @@ struct _CPU_MP_DATA { UINT64 GhcbBase; }; =20 -#define AP_RESET_STACK_SIZE 64 +#define AP_SAFE_STACK_SIZE 128 +#define AP_RESET_STACK_SIZE AP_SAFE_STACK_SIZE =20 typedef union { struct { @@ -331,8 +332,11 @@ VOID IN BOOLEAN MwaitSupport, IN UINTN ApTargetCState, IN UINTN PmCodeSegment, + IN UINTN Pm16CodeSegment, IN UINTN TopOfApStack, - IN UINTN NumberToFinish + IN UINTN NumberToFinish, + IN UINTN SevEsAPJumpTable, + IN UINTN WakeupBuffer ); =20 /** diff --git a/UefiCpuPkg/Library/MpInitLib/DxeMpLib.c b/UefiCpuPkg/Library/M= pInitLib/DxeMpLib.c index 16603ef3f20e..cf53b5026aa4 100644 --- a/UefiCpuPkg/Library/MpInitLib/DxeMpLib.c +++ b/UefiCpuPkg/Library/MpInitLib/DxeMpLib.c @@ -18,7 +18,6 @@ #include =20 #define AP_CHECK_INTERVAL (EFI_TIMER_PERIOD_MILLISECONDS (100)) -#define AP_SAFE_STACK_SIZE 128 =20 CPU_MP_DATA *mCpuMpData =3D NULL; EFI_EVENT mCheckAllApsEvent =3D NULL; @@ -86,6 +85,13 @@ GetWakeupBuffer ( { EFI_STATUS Status; EFI_PHYSICAL_ADDRESS StartAddress; + EFI_MEMORY_TYPE MemoryType; + + if (PcdGetBool (PcdSevEsActive)) { + MemoryType =3D EfiReservedMemoryType; + } else { + MemoryType =3D EfiBootServicesData; + } =20 // // Try to allocate buffer below 1M for waking vector. @@ -98,7 +104,7 @@ GetWakeupBuffer ( StartAddress =3D 0x88000; Status =3D gBS->AllocatePages ( AllocateMaxAddress, - EfiBootServicesData, + MemoryType, EFI_SIZE_TO_PAGES (WakeupBufferSize), &StartAddress ); @@ -331,17 +337,26 @@ RelocateApLoop ( BOOLEAN MwaitSupport; ASM_RELOCATE_AP_LOOP AsmRelocateApLoopFunc; UINTN ProcessorNumber; + UINTN StackStart; =20 MpInitLibWhoAmI (&ProcessorNumber); CpuMpData =3D GetCpuMpData (); MwaitSupport =3D IsMwaitSupport (); + if (CpuMpData->SevEsActive) { + StackStart =3D CpuMpData->SevEsAPResetStackStart; + } else { + StackStart =3D mReservedTopOfApStack; + } AsmRelocateApLoopFunc =3D (ASM_RELOCATE_AP_LOOP) (UINTN) mReservedApLoop= Func; AsmRelocateApLoopFunc ( MwaitSupport, CpuMpData->ApTargetCState, CpuMpData->PmCodeSegment, - mReservedTopOfApStack - ProcessorNumber * AP_SAFE_STACK_SIZE, - (UINTN) &mNumberToFinish + CpuMpData->Pm16CodeSegment, + StackStart - ProcessorNumber * AP_SAFE_STACK_SIZE, + (UINTN) &mNumberToFinish, + CpuMpData->SevEsAPBuffer, + CpuMpData->WakeupBuffer ); // // It should never reach here @@ -895,9 +910,34 @@ MpFinalize ( IN CPU_MP_DATA *CpuMpData ) { - // - // DXE phase will do this transition, but just return EFI_SUCCESS for no= w. - // + if (CpuMpData->SevEsActive) { + // + // Perform SEV-ES specific finalization + // + if (CpuMpData->WakeupBuffer =3D=3D (UINTN) -1) { + // + // No APs parked in UEFI, clear the GHCB + // + AsmWriteMsr64 (MSR_SEV_ES_GHCB, 0); + } else { + // + // Re-use reserved memory area below 1MB from WakeupBuffer + // + CopyMem ( + (VOID *) CpuMpData->WakeupBuffer, + (VOID *) CpuMpData->AddressMap.RendezvousFunnelAddress + + CpuMpData->AddressMap.SwitchToRealPM16ModeOffset, + CpuMpData->AddressMap.SwitchToRealPM16ModeSize + ); + + // + // Point the GHCB at the AP jump table to communicate the address to + // the booting system. + // + AsmWriteMsr64 (MSR_SEV_ES_GHCB, (CpuMpData->SevEsAPBuffer) | 0x03); + } + } + return EFI_SUCCESS; } =20 diff --git a/UefiCpuPkg/Library/MpInitLib/X64/MpFuncs.nasm b/UefiCpuPkg/Lib= rary/MpInitLib/X64/MpFuncs.nasm index bbc7432740ff..3cb0cd5bb306 100644 --- a/UefiCpuPkg/Library/MpInitLib/X64/MpFuncs.nasm +++ b/UefiCpuPkg/Library/MpInitLib/X64/MpFuncs.nasm @@ -465,6 +465,10 @@ BITS 16 ; - IP for Real Mode (two bytes) ; - CS for Real Mode (two bytes) ; + ; This label is also used with AsmRelocateApLoop. During MP finalizati= on, + ; the code from PM16Mode to SwitchToRealProcEnd is copied to the start= of + ; the WakeupBuffer, allowing a parked AP to be booted by an OS. + ; PM16Mode: mov eax, cr0 ; Read CR0 btr eax, 0 ; Set PE=3D0 @@ -487,32 +491,95 @@ PM16Mode: SwitchToRealProcEnd: =20 ;-------------------------------------------------------------------------= ------------ -; AsmRelocateApLoop (MwaitSupport, ApTargetCState, PmCodeSegment, TopOfAp= Stack, CountTofinish); +; AsmRelocateApLoop (MwaitSupport, ApTargetCState, PmCodeSegment, Pm16Cod= eSegment, TopOfApStack, CountTofinish, SevEsAPJumpTable, WakeupBuffer); ;-------------------------------------------------------------------------= ------------ global ASM_PFX(AsmRelocateApLoop) ASM_PFX(AsmRelocateApLoop): AsmRelocateApLoopStart: BITS 64 + cmp qword [rsp + 56], 0 + je NoSevEs + + ; + ; Perform some SEV-ES related setup before leaving 64-bit mode + ; + push rcx + push rdx + + ; + ; Get the RDX reset value using CPUID + ; + mov rax, 1 + cpuid + mov rsi, rax ; Save off the reset value for RDX + + ; + ; Prepare the GHCB for the AP_HLT_LOOP VMGEXIT call + ; - Must be done while in 64-bit long mode so that writes to + ; the GHCB memory will be unencrypted. + ; - No NAE events can be generated once this is set otherwise + ; the AP_RESET_HOLD SW_EXITCODE will be overwritten. + ; + mov rcx, 0xc0010130 + rdmsr ; Retrieve current GHCB address + shl rdx, 32 + or rdx, rax + + mov rdi, rdx + xor rax, rax + mov rcx, 0x800 + shr rcx, 3 + rep stosq ; Clear the GHCB + + mov rax, 0x80000004 ; VMGEXIT AP_RESET_HOLD + mov [rdx + 0x390], rax + + pop rdx + pop rcx + +NoSevEs: cli ; Disable interrupt before switching to 3= 2-bit mode - mov rax, [rsp + 40] ; CountTofinish + mov rax, [rsp + 48] ; CountTofinish lock dec dword [rax] ; (*CountTofinish)-- - mov rsp, r9 - push rcx - push rdx =20 - lea rsi, [PmEntry] ; rsi <- The start address of transition = code + mov rax, [rsp + 56] ; SevEsAPJumpTable + mov rbx, [rsp + 64] ; WakeupBuffer + mov rsp, [rsp + 40] ; TopOfApStack + + push rax ; Save SevEsAPJumpTable + push rbx ; Save WakeupBuffer + push r9 ; Save Pm16CodeSegment + push rcx ; Save MwaitSupport + push rdx ; Save ApTargetCState + + lea rax, [PmEntry] ; rax <- The start address of transition = code =20 push r8 - push rsi - DB 0x48 - retf + push rax + + ; + ; Clear R8 - R15, for reset, before going into 32-bit mode + ; + xor r8, r8 + xor r9, r9 + xor r10, r10 + xor r11, r11 + xor r12, r12 + xor r13, r13 + xor r14, r14 + xor r15, r15 + + ; + ; Far return into 32-bit mode + ; +o64 retf + BITS 32 PmEntry: mov eax, cr0 btr eax, 31 ; Clear CR0.PG mov cr0, eax ; Disable paging and caches =20 - mov ebx, edx ; Save EntryPoint to rbx, for rdmsr will = overwrite rdx mov ecx, 0xc0000080 rdmsr and ah, ~ 1 ; Clear LME @@ -525,6 +592,8 @@ PmEntry: add esp, 4 pop ecx, add esp, 4 + +MwaitCheck: cmp cl, 1 ; Check mwait-monitor support jnz HltLoop mov ebx, edx ; Save C-State to ebx @@ -538,10 +607,53 @@ MwaitLoop: shl eax, 4 mwait jmp MwaitLoop + HltLoop: + pop edx ; PM16CodeSegment + add esp, 4 + pop ebx ; WakeupBuffer + add esp, 4 + pop eax ; SevEsAPJumpTable + add esp, 4 + cmp eax, 0 ; Check for SEV-ES + je DoHlt + + cli + ; + ; SEV-ES is active, use VMGEXIT (GHCB information already + ; set by caller) + ; + ; VMGEXIT is rep vmmcall + ; + db 0xf3 + db 0x0f + db 0x01 + db 0xd9 + + ; + ; Back from VMGEXIT AP_HLT_LOOP + ; Push the FLAGS/CS/IP values to use + ; + push word 0x0002 ; EFLAGS + xor ecx, ecx + mov cx, [eax + 2] ; CS + push cx + mov cx, [eax] ; IP + push cx + push word 0x0000 ; For alignment, will be discarded + + push edx + push ebx + + mov edx, esi ; Restore RDX reset value + + retf + +DoHlt: cli hlt - jmp HltLoop + jmp DoHlt + BITS 64 AsmRelocateApLoopEnd: =20 --=20 2.17.1 -=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 (#47719): https://edk2.groups.io/g/devel/message/47719 Mute This Topic: https://groups.io/mt/34230275/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- From nobody Sun May 5 15:05:55 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zoho.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+47720+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 1568985410066121.05953426170038; Fri, 20 Sep 2019 06:16:50 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id 3SjUYY1788612xCcSAlUiL83; Fri, 20 Sep 2019 06:16:49 -0700 X-Received: from NAM01-BY2-obe.outbound.protection.outlook.com (NAM01-BY2-obe.outbound.protection.outlook.com [40.107.81.55]) by groups.io with SMTP; Fri, 20 Sep 2019 06:16:49 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=dY/DUBpKU6Q2+gGhrPXS2vpJzZjsmYHfqKubd9b+6cDHlWuT4Ps2bXerONg+jnI01TYSejRWdVbb+whcsB5uRmzMgMYKF+gsUrKUIvi5XVvMk3lxlVMq8veKxE/SiV4E0WWee7ULbmPhkecGcdYElnAxLMVngy4efgRc0aO6lS3WbZt6QDSVYFrDBYp3DTgIjsAB1t9KJ2fabgx3QLTKfWVZLj+CUE7oMafizDdQHoST1xChOTjRw9lqK8dgVVYCHlhaR5vkifP6if1JsT1Y03qERnrN3RvnNPYNBW+EaKpuMABkY6fMXc/WMnJNB/1WqdbtargOUov2NQljaikBjQ== 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=DuegCOwJpam1T13Od4IBO4uFoCcdZ4ibfEMnESUUAJg=; b=bEZZ3uLqTLBkTPt8nveRvZ+e8ErZYwv+M4nKUF4ryzy9J59kRDHXk+bYDYBoQi3VyVs9mxdFWiN3/BQ2XWXbSORWEHTHyvAPj3P5MAVJKXXDes2a6lh4ofVoFcurFEhDGjmmFlUm/zWCvJtnORXAoMG7sc/cCnyVk+Z1xah0Npr9/7Pst3XR3Q1zLno9nH7TG7VoDXYPTrAwfHd0E4JchK3DT/qarvXyssrluQ5+IL/+xSbo7raRrDrtbZgav52XfIhftPlR6XdfJDa4SgQe4jbc806L5TF6LraHMxrmaguDCU8uwxo2RmMV7WiD7xHGkoHnnnTNFwZCeQ+Yv01NNA== 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 DM6PR12MB3163.namprd12.prod.outlook.com (20.179.104.150) by DM6PR12MB3995.namprd12.prod.outlook.com (10.255.175.31) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2284.23; Fri, 20 Sep 2019 13:16:47 +0000 X-Received: from DM6PR12MB3163.namprd12.prod.outlook.com ([fe80::400e:f0c3:7ca:2fcc]) by DM6PR12MB3163.namprd12.prod.outlook.com ([fe80::400e:f0c3:7ca:2fcc%6]) with mapi id 15.20.2284.009; Fri, 20 Sep 2019 13:16:47 +0000 From: "Lendacky, Thomas" To: "devel@edk2.groups.io" Subject: [edk2-devel] [RFC PATCH v2 43/44] UefiCpuPkg/CpuDxe: Provide an DXE MP finalization routine to support SEV-ES Thread-Topic: [RFC PATCH v2 43/44] UefiCpuPkg/CpuDxe: Provide an DXE MP finalization routine to support SEV-ES Thread-Index: AQHVb7WnlbBxOK8N90eyDmSTYm17DQ== Date: Fri, 20 Sep 2019 13:16:47 +0000 Message-ID: <4267bd82ef22b8197e3bd1fc715008443a545d1b.1568922729.git.thomas.lendacky@amd.com> References: In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: SN6PR06CA0023.namprd06.prod.outlook.com (2603:10b6:805:8e::36) To DM6PR12MB3163.namprd12.prod.outlook.com (2603:10b6:5:182::22) x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [165.204.78.1] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 821d91e1-9408-4c1e-187f-08d73dccca4c x-ms-office365-filtering-ht: Tenant x-ms-traffictypediagnostic: DM6PR12MB3995: x-ms-exchange-purlcount: 1 x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:6790; Received-SPF: pass (zoho.com: domain of groups.io designates 66.175.222.12 as permitted sender) client-ip=66.175.222.12; envelope-from=bounce+27952+47720+1787277+3901457@groups.io; helo=web01.groups.io; received-spf: None (protection.outlook.com: amd.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: 6rZ1lhuLSvyG/Msz3uKPBvPeX/eZ9QLrlmQ6KJFEsZq6TSOiQZfLo0gzP8uu98gWWDYUFl+zKfLnSpwZYnCslugNkRI3wtX/HKwoxQNCnuA6Wt52FOcz4bvhG/Yqfi3ar36RJIyyqa+6/gLmhdnyVbxq2usU1HqfioKK/eah6DnPHdcXZyLx95Sfc5IPN774gFUkYdfh/A0ICWROhGYvGnyzxut65HofUwkyZqQk1buTU7IcJOsvaGFo359FPk79Rte3hWy5HaXRBZzFMd3rQ3HwnqNeg3ynG4M+Dp8BiqNEtOA3VylUgzWEkfI5MpNnO4ZujydKHJ0UW22HTtMUDxbrbQqiwVCsyC1wgRglWKPcvnHF/jCUKnDU/+/Q0TW7g83vICLd/iGjbi4wOUqf8pIcd2bopkKqKO7Yqk2F2Sg= x-ms-exchange-transport-forked: True MIME-Version: 1.0 X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: 821d91e1-9408-4c1e-187f-08d73dccca4c X-MS-Exchange-CrossTenant-originalarrivaltime: 20 Sep 2019 13:16:47.4720 (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: mMhwbxziAFtPn7z4CAS/L4Yqq8oqAtGyXF8l0SjMSRxb+RRaeGQcLMD7BwzPxZPqao3Jn2gZEJnUgia/vFkttw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR12MB3995 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: snqrDFHPz0CIj2xiOEzB8j70x1787277AA= Content-Language: en-US Content-ID: <9C7B5B5EDB03E540BE12D8F96180CE97@namprd12.prod.outlook.com> Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1568985409; bh=9ZzZVPlkjmObZCoXn8w5fkKQq235RsYdYJyh6teKiLU=; h=Content-Type:Date:From:Reply-To:Subject:To; b=Wx0psDX7UUWmYxoslX1QEhuY8pyrebfP6jxmI4AWCQPzTR2lsrs7JAvVrLz/b5gxF69 ZXMlfsOoJOzEBFPOCs2XjiO9KgPVqBEIl/OId6Y7cfU8/nMfXYvcBDr2Ja5cSpUKNdEiU HztQgy6ZXisDZUpQSo1jMMe2mHQWbrNe9wk= 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=3D2198 Provide support for the MP finalization routine within DXE. This finalization function will invoke the MpInitLib MpLibFinalize() function to perform the steps necessary to park an AP and be able to successfully boot it under an OS. Cc: Eric Dong Cc: Ray Ni Cc: Laszlo Ersek Signed-off-by: Tom Lendacky --- UefiCpuPkg/CpuDxe/CpuDxe.h | 12 ++++++++++++ UefiCpuPkg/CpuDxe/CpuDxe.c | 21 ++++++++++++++++++++- 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/UefiCpuPkg/CpuDxe/CpuDxe.h b/UefiCpuPkg/CpuDxe/CpuDxe.h index a6762f1a0b78..d071a32135b2 100644 --- a/UefiCpuPkg/CpuDxe/CpuDxe.h +++ b/UefiCpuPkg/CpuDxe/CpuDxe.h @@ -232,6 +232,18 @@ CpuSetMemoryAttributes ( IN UINT64 Attributes ); =20 +/** + Perform any MpLib final actions before transitioning out of UEFI. + + @param This Protocol instance structure + +**/ +VOID +EFIAPI +CpuFinalize ( + IN EFI_CPU_ARCH_PROTOCOL *This + ); + /** Initialize Global Descriptor Table. =20 diff --git a/UefiCpuPkg/CpuDxe/CpuDxe.c b/UefiCpuPkg/CpuDxe/CpuDxe.c index 7d7270e10b4a..bee44c0dd488 100644 --- a/UefiCpuPkg/CpuDxe/CpuDxe.c +++ b/UefiCpuPkg/CpuDxe/CpuDxe.c @@ -93,7 +93,8 @@ EFI_CPU_ARCH_PROTOCOL gCpu =3D { CpuGetTimerValue, CpuSetMemoryAttributes, 1, // NumberOfTimers - 4 // DmaBufferAlignment + 4, // DmaBufferAlignment + CpuFinalize }; =20 // @@ -499,6 +500,24 @@ CpuSetMemoryAttributes ( return AssignMemoryPageAttributes (NULL, BaseAddress, Length, MemoryAttr= ibutes, NULL); } =20 +/** + Implementation of CpuFinalize() service of CPU Architecture Protocol. + + This function performs any MpLib library finalization to perform required + actions before exiting boot services. + + @param This The EFI_CPU_ARCH_PROTOCOL instance. + +**/ +VOID +EFIAPI +CpuFinalize ( + IN EFI_CPU_ARCH_PROTOCOL *This + ) +{ + MpLibFinalize (); +} + /** Initializes the valid bits mask and valid address mask for MTRRs. =20 --=20 2.17.1 -=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 (#47720): https://edk2.groups.io/g/devel/message/47720 Mute This Topic: https://groups.io/mt/34230276/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- From nobody Sun May 5 15:05:55 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zoho.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+47721+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 1568985410238481.7258402229878; Fri, 20 Sep 2019 06:16:50 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id 2NRZYY1788612x4RjVaF02CY; Fri, 20 Sep 2019 06:16:49 -0700 X-Received: from NAM01-BY2-obe.outbound.protection.outlook.com (NAM01-BY2-obe.outbound.protection.outlook.com []) by groups.io with SMTP; Fri, 20 Sep 2019 06:16:49 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=VV+33t1oLdRLQ7uVweZBOBd2bBtitnkXA5sP8rZc4Nf3OoaHKHSMS3vHvLtzcP2j1lZt7ZF8OpDmQvwQUG3w+6hDR2PJtm4OMKG4q6GNwGsmFyL39vyDZ0Sy9nPlpPuLPqkHBxrxSpMI2RcPvnzuX25/5KGaeedy/c+DJX1cVZN9sjARMCjY2sPYxT2Zp722FWvVmPggV28x0twRO3ItPqx8CuqeW6BW2xc55bVJMhpWqNgNcVzyrM4TAP/90k+f/kiA0je/2F5ajsNaJ1OCAJSruF4ieVRFvo2Sm3rdByLIo6UW6DEvMCHwfEAhy4n0TLqsm1L5IwP6lprjzNm2Vg== 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=TNSXKIhy9SXt7XBl+LBk8TieUo8naZSH2pkTEAAxvA4=; b=f0DQOio10hIjuh6+MAtzXr3ioRdA/Jqsl/29rRpcnXPij/S8WZ8Cca3TDix8XflG/ck9/3YuXTFziiOdlr+Z/civfk3UPWsCjX37VEbd+1tyC+WSBd1Uq4FX1NIauHne6D4HR7cJIjvYBXKJD2byXWbEZVhZMJg8jbhVD6eKxaqXkTkqHaYk1dQGhfLtgRO6NNygxGPXyThwGupVzShjBO7i6UMGQTjKzyHMTSNvc57tvg2LRhO+qpq+I3MpgtPQ/2dcXWgdNudhOKbVFP31ZWh6hTv6ymBgaAOq0CzURzxKYhjVXkR8X1MxoKsKNAqksFHcSScqmQGCBkxWs9j5KA== 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 DM6PR12MB3163.namprd12.prod.outlook.com (20.179.104.150) by DM6PR12MB3995.namprd12.prod.outlook.com (10.255.175.31) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2284.23; Fri, 20 Sep 2019 13:16:48 +0000 X-Received: from DM6PR12MB3163.namprd12.prod.outlook.com ([fe80::400e:f0c3:7ca:2fcc]) by DM6PR12MB3163.namprd12.prod.outlook.com ([fe80::400e:f0c3:7ca:2fcc%6]) with mapi id 15.20.2284.009; Fri, 20 Sep 2019 13:16:48 +0000 From: "Lendacky, Thomas" To: "devel@edk2.groups.io" Subject: [edk2-devel] [RFC PATCH v2 44/44] MdeModulePkg/DxeCore: Perform the CPU protocol finalization support Thread-Topic: [RFC PATCH v2 44/44] MdeModulePkg/DxeCore: Perform the CPU protocol finalization support Thread-Index: AQHVb7Wor0tq/Hw6LESyIx/lfeWQ0g== Date: Fri, 20 Sep 2019 13:16:48 +0000 Message-ID: <1c7c0e223a852994bfdb0ca82b3804e8ddee5e19.1568922729.git.thomas.lendacky@amd.com> References: In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: SN6PR06CA0023.namprd06.prod.outlook.com (2603:10b6:805:8e::36) To DM6PR12MB3163.namprd12.prod.outlook.com (2603:10b6:5:182::22) x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [165.204.78.1] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 0c2d7f97-a976-4ad8-de7b-08d73dcccaa2 x-ms-office365-filtering-ht: Tenant x-ms-traffictypediagnostic: DM6PR12MB3995: x-ms-exchange-purlcount: 1 x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:5516; Received-SPF: pass (zoho.com: domain of groups.io designates 66.175.222.12 as permitted sender) client-ip=66.175.222.12; envelope-from=bounce+27952+47721+1787277+3901457@groups.io; helo=web01.groups.io; received-spf: None (protection.outlook.com: amd.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: +Xmwnz2v8X0CpHD6GV1LiROnBnoYo7PC2uaHRhJx6vXyolInLykUMvhCJhOUTgbqIn5XhriIVOaoAQWzkagWyutAJ0W3/8GvHi+NS8HKBypHteHt1MTSUMkLNJFEGW50MeU2gJO7DSo8M6PRwmWcSUsBrW9bafxc7cUJWv4K58gUQyGbyFlsslsYqp9futGQRvyE9lj6/FY7QKzPNpFFO2B0Z57cmt701fl9e3L8+pX40jujkKz5vKlEYbMazJ2CbJ6fJi/g9LhaDYsXFkWJOtC43FevptdUQfqw1Bcf9Holp2NScY+q2y16wY7WJ+A94chbkpXTKO2lyNL68aZs0NRZtG0KHqUNMnW81EiyvtKJk3jWBnh5mZCJDMlrbtpWHHf/Zn3Ev5O9x5OamdsGayL/YjXCzMmthl2cwVdbDuk= x-ms-exchange-transport-forked: True MIME-Version: 1.0 X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: 0c2d7f97-a976-4ad8-de7b-08d73dcccaa2 X-MS-Exchange-CrossTenant-originalarrivaltime: 20 Sep 2019 13:16:48.1177 (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: o+/1tqQC0vx8/cpjEfALo7mK7dMSE/6BoCKJtDc1rZFnSPM+e/D3gWRzTciIO+PZVGVby3UV6fDen5cm7H8L7Q== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR12MB3995 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: 69eUkVgYVnNsdLcck8mbwp6gx1787277AA= Content-Language: en-US Content-ID: <242DF55424463D4F9C4549E0D147C915@namprd12.prod.outlook.com> Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1568985409; bh=hhqht8S9xP6AOWpvxTd+9ctoxWW+urPxEJOm+VLXzl0=; h=Content-Type:Date:From:Reply-To:Subject:To; b=bSIYu2W12orEVcu160nejEIhDNJUj3OAqb6Yx/7kTzbrRnpKaut3E36YmJPcxJKruuN zaemAGtyAK2EaIcOWz3jyPzxpz9s1K/Mex4IliZvSYKd09d+uZwSJdxQeGyYfRDcmOHBR 8PM996R0oWTt1EOPDUXg5/skqlodUG9XtBo= 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=3D2198 Invoke the CPU finalization function when exiting boot services. This allows for DXE and the MP Library to properly setup and park APs for an SEV-ES guest so that it can be booted in the OS. Cc: Jian J Wang Cc: Hao A Wu Cc: Dandan Bi Cc: Liming Gao Signed-off-by: Tom Lendacky --- MdeModulePkg/Core/Dxe/DxeMain/DxeMain.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/MdeModulePkg/Core/Dxe/DxeMain/DxeMain.c b/MdeModulePkg/Core/Dx= e/DxeMain/DxeMain.c index 514d1aa75ada..13c962247243 100644 --- a/MdeModulePkg/Core/Dxe/DxeMain/DxeMain.c +++ b/MdeModulePkg/Core/Dxe/DxeMain/DxeMain.c @@ -785,6 +785,11 @@ CoreExitBootServices ( // gCpu->DisableInterrupt (gCpu); =20 + // + // Finalize CPU + // + gCpu->Finalize (gCpu); + // // Clear the non-runtime values of the EFI System Table // --=20 2.17.1 -=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 (#47721): https://edk2.groups.io/g/devel/message/47721 Mute This Topic: https://groups.io/mt/34230277/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-