From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from NAM10-MW2-obe.outbound.protection.outlook.com (NAM10-MW2-obe.outbound.protection.outlook.com [40.107.94.55]) by mx.groups.io with SMTP id smtpd.web10.5670.1595366572501981546 for ; Tue, 21 Jul 2020 14:22:52 -0700 Authentication-Results: mx.groups.io; dkim=fail reason="body hash did not verify" header.i=@amdcloud.onmicrosoft.com header.s=selector2-amdcloud-onmicrosoft-com header.b=Fy2KGA6d; spf=none, err=SPF record not found (domain: amd.com, ip: 40.107.94.55, mailfrom: thomas.lendacky@amd.com) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=R+bSEI9l1faw9yNCQE8JUormH1kwUDc8vdjd8CVVydLj9tr17h7S83ZEHmSzw6TXIKRzGyXnmYx2gS3MttCtDI4EUg+/ddcRlez9rumqgp9UYi8ur2D1MzX4AL9WG/MpbKZcQV79S6WPZDVPXBvg0RGD/4bNB6/eQvdRKpuYYhUdcIyEn3Df6wuUj8pZtmVUxDyYsR7lFdxferx547WXm0ta3FN+SgwdFzAwRYfjIWAZrE9xizbjtd+Gzr5rVnyc8oLjcVY699tixqkMDy8j7MSXipIZ7NEH0XL1KcxZYtmSMBf0+nGTzmRWCcgdHlfv5OU1bZqFvAsAtQaTgIQdWg== 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=5teiAq1eAXmkeZ9hYTs+aZivrTRKKj5B0JXYx2XU70w=; b=h5kNY6H8wlFeg5atlVD24AjFjI8XgCkQbK7aMJzuh4BWoEijB/LdAP2fpHTQTJOYqbNhPQhQtB4NKxKRTcYNCPYPBvHteRYYKxACzt4aG5NxwtndoxqxNO1NEF+Z6Q0zRwpbX+ZY0almJbcBZn/22mdfmpQQlKQqcRJ5fTbfWCH+H8q+WhxrXPNbRn9OWUG2/GDfGsi4vz4822GnNF4bOSvhvx4MmOLHcpw6MvmFUE01ZESI3uXguIx6M221fUdLCO/FYl6U3cy9+dc/u69d2TNt6m/xPt7SSKRQ6d51emMzILKixcu8OrfPoALFVq/sI6X4PyFFQ91JwU6Sy9R2Ig== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=amd.com; dmarc=pass action=none header.from=amd.com; dkim=pass header.d=amd.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amdcloud.onmicrosoft.com; s=selector2-amdcloud-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=5teiAq1eAXmkeZ9hYTs+aZivrTRKKj5B0JXYx2XU70w=; b=Fy2KGA6dUrh0Y693vlVqlDlsMfyLm57C6y2LmjqYEIetbV0n8mCsQ9FiC3ijgF75vAaTyxDjb5J6PqSKzHIaxdomwggQcH7ZMz2pTihAWRJDZ/WtRoGCMIkzFn9bLH+6KtqYj+Bvwwim7O0EsM0RZdwd5U8QDc8Gu8gt+hMuqCw= Authentication-Results: edk2.groups.io; dkim=none (message not signed) header.d=none;edk2.groups.io; dmarc=none action=none header.from=amd.com; Received: from CY4PR12MB1352.namprd12.prod.outlook.com (2603:10b6:903:3a::13) by CY4PR12MB1143.namprd12.prod.outlook.com (2603:10b6:903:38::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3195.25; Tue, 21 Jul 2020 21:22:51 +0000 Received: from CY4PR12MB1352.namprd12.prod.outlook.com ([fe80::9181:78bf:bf0:702b]) by CY4PR12MB1352.namprd12.prod.outlook.com ([fe80::9181:78bf:bf0:702b%5]) with mapi id 15.20.3216.020; Tue, 21 Jul 2020 21:22:51 +0000 From: "Lendacky, Thomas" To: devel@edk2.groups.io CC: Brijesh Singh , Ard Biesheuvel , Eric Dong , Jordan Justen , Laszlo Ersek , Liming Gao , Michael D Kinney , Ray Ni Subject: [PATCH v11 23/46] OvmfPkg/VmgExitLib: Add support for RDTSCP NAE events Date: Tue, 21 Jul 2020 16:19:00 -0500 Message-ID: X-Mailer: git-send-email 2.27.0 In-Reply-To: References: X-ClientProxiedBy: DM6PR21CA0006.namprd21.prod.outlook.com (2603:10b6:5:174::16) To CY4PR12MB1352.namprd12.prod.outlook.com (2603:10b6:903:3a::13) Return-Path: thomas.lendacky@amd.com MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from tlendack-t1.amd.com (165.204.77.1) by DM6PR21CA0006.namprd21.prod.outlook.com (2603:10b6:5:174::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3239.0 via Frontend Transport; Tue, 21 Jul 2020 21:22:50 +0000 X-Mailer: git-send-email 2.27.0 X-Originating-IP: [165.204.77.1] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: bffe7177-a70b-4e9b-6f3f-08d82dbc3937 X-MS-TrafficTypeDiagnostic: CY4PR12MB1143: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:6430; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: ubA/etK4aPxfzMtSAqxhD4pLFw7wbzMUuavBYSpwXhm83tnUSdv0dslMXoS81xNW/e0WAQAIg/B9qLzGXK6S3lVQ1M8VfNjDrf5siurQVQ5CAT/zfvg6auELKLQTfQ89IKOqTvDiLLNjr/ueZK2l56DF6MLhnZJpND95Io60lyZIjgBN8KPl+GB7aSx36yo9yhGnZ0BrR8QF4ZYXOxJmZv9BR6d1jCQAXOA2TM364OCIYsujPrf3Peiyrr67CEMhrDkDyO6G1kcqMr4J0oZKmKcgkucIguMUfnaj1FS0j3kZ/2UrgK8b3db37fA/GT4oRIXOpHZ59s6PJKmuJroYU2pXXglgEzsm7yvPCC+BlpX72CtZaDP2UF2z5jhPsSAXsvnr2fkP0dCnwkHzg6feTE8iDecBUCE6nFrRg2lrCkJHFmQkHP6P03YzS25rScyfWjuFfHq5hYDIgdcWzSMDJA== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CY4PR12MB1352.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFTY:;SFS:(4636009)(396003)(346002)(136003)(39860400002)(376002)(366004)(966005)(6916009)(26005)(6486002)(86362001)(8936002)(2906002)(66946007)(36756003)(8676002)(16526019)(186003)(2616005)(956004)(54906003)(478600001)(4326008)(66556008)(66476007)(7696005)(6666004)(52116002)(5660300002)(83380400001)(316002)(136400200001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData: 5AlyZUpEdaDrglv9K3RuokxK+SnWwHQ6HVkGZVLskR18dYhQr95EDFuAbw4dhWUGT+vWOQk8KfQKxGBQ2VOEuGU0t9H6/O06sJb5nckP2rUCNYMYBeJJXlYxafrVMXCvOQR0bEUB7H0pWzZ6o3WiASULAnUM2Ch+DjzCf0TTWhIry+srDdeWhl/qVZb/zDGmPkShNvlSn+wqOOiIOEEGmRFxcxumbRZtAyAcpDi1n6A+tJWn8w8OWhZ76wF4XGMHQyY4KsU2nOUT7PWd1AJ5t9N8ZRMlaGx6dS3XghKtHuzg5YYDmTw0qvZmzXr6ZK3kRyILHRUF+Uoe0xi7vEwVDB90Fnm4+BGZut7fuJtlbDb5AXdoP2ywampHFbOWw+7m+2Jbj+SR7PlgdOluAc8ZDsZdU/pRzGEyIPNPzdgr2OjrsJ9wV7v5KkEd8OESMBa1WDX8DzeHkeo6j9tKq2qAdoSoDZNV1fjB0/TKYZ6qWCo= X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: bffe7177-a70b-4e9b-6f3f-08d82dbc3937 X-MS-Exchange-CrossTenant-AuthSource: CY4PR12MB1352.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Jul 2020 21:22:51.1500 (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: i+1DzRch9UpggoXIFvFKOlk/9N1Gbw+h6hKvEV1x9EiLfoxGKrEYwOby9EM/lqxHPQvARQc30ygI/ZIOyzdKpw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY4PR12MB1143 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable 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: Jordan Justen Cc: Laszlo Ersek Cc: Ard Biesheuvel Acked-by: Laszlo Ersek Signed-off-by: Tom Lendacky --- OvmfPkg/Library/VmgExitLib/VmgExitVcHandler.c | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/OvmfPkg/Library/VmgExitLib/VmgExitVcHandler.c b/OvmfPkg/Librar= y/VmgExitLib/VmgExitVcHandler.c index 54134f37e614..a1cf792d4d0b 100644 --- a/OvmfPkg/Library/VmgExitLib/VmgExitVcHandler.c +++ b/OvmfPkg/Library/VmgExitLib/VmgExitVcHandler.c @@ -881,6 +881,49 @@ WbinvdExit ( return VmgExit (Ghcb, SVM_EXIT_WBINVD, 0, 0); } =20 +/** + Handle a RDTSCP event. + + Use the VMGEXIT instruction to handle a RDTSCP event. + + @param[in, out] Ghcb Pointer to the Guest-Hypervisor Communi= cation + Block + @param[in, out] Regs x64 processor context + @param[in] InstructionData Instruction parsing context + + @retval 0 Event handled successfully + @return New exception value to propagate + +**/ +STATIC +UINT64 +RdtscpExit ( + IN OUT GHCB *Ghcb, + IN OUT EFI_SYSTEM_CONTEXT_X64 *Regs, + IN SEV_ES_INSTRUCTION_DATA *InstructionData + ) +{ + UINT64 Status; + + DecodeModRm (Regs, InstructionData); + + Status =3D VmgExit (Ghcb, SVM_EXIT_RDTSCP, 0, 0); + if (Status !=3D 0) { + return Status; + } + + if (!GhcbIsRegValid (Ghcb, GhcbRax) || + !GhcbIsRegValid (Ghcb, GhcbRcx) || + !GhcbIsRegValid (Ghcb, GhcbRdx)) { + return UnsupportedExit (Ghcb, Regs, InstructionData); + } + Regs->Rax =3D Ghcb->SaveArea.Rax; + Regs->Rcx =3D Ghcb->SaveArea.Rcx; + Regs->Rdx =3D Ghcb->SaveArea.Rdx; + + return 0; +} + /** Handle a VMMCALL event. =20 @@ -1443,6 +1486,10 @@ VmgExitHandleVc ( NaeExit =3D VmmCallExit; break; =20 + case SVM_EXIT_RDTSCP: + NaeExit =3D RdtscpExit; + break; + case SVM_EXIT_WBINVD: NaeExit =3D WbinvdExit; break; --=20 2.27.0