diff for duplicates of <20240329225835.400662-20-michael.roth@amd.com> diff --git a/a/1.txt b/N1/1.txt index dcfef78..173b8d6 100644 --- a/a/1.txt +++ b/N1/1.txt @@ -440,3 +440,850 @@ index f85735b6235d..617c38656757 100644 kvm_guest_apic_has_interrupt(vcpu))) -- 2.25.1 + + +X-sender: <linux-kernel+bounces-125499-steffen.klassert=secunet.com@vger.kernel.org> +X-Receiver: <steffen.klassert@secunet.com> ORCPT=rfc822;steffen.klassert@secunet.com; X-ExtendedProps=DwA1AAAATWljcm9zb2Z0LkV4Y2hhbmdlLlRyYW5zcG9ydC5EaXJlY3RvcnlEYXRhLklzUmVzb3VyY2UCAAAFABUAFgACAAAABQAUABEA8MUJLbkECUOS0gjaDTZ+uAUAagAJAAEAAAAAAAAABQAWAAIAAAUAQwACAAAFAEYABwADAAAABQBHAAIAAAUAEgAPAGIAAAAvbz1zZWN1bmV0L291PUV4Y2hhbmdlIEFkbWluaXN0cmF0aXZlIEdyb3VwIChGWURJQk9IRjIzU1BETFQpL2NuPVJlY2lwaWVudHMvY249U3RlZmZlbiBLbGFzc2VydDY4YwUACwAXAL4AAACheZxkHSGBRqAcAp3ukbifQ049REI2LENOPURhdGFiYXNlcyxDTj1FeGNoYW5nZSBBZG1pbmlzdHJhdGl2ZSBHcm91cCAoRllESUJPSEYyM1NQRExUKSxDTj1BZG1pbmlzdHJhdGl2ZSBHcm91cHMsQ049c2VjdW5ldCxDTj1NaWNyb3NvZnQgRXhjaGFuZ2UsQ049U2VydmljZXMsQ049Q29uZmlndXJhdGlvbixEQz1zZWN1bmV0LERDPWRlBQAOABEABiAS9uuMOkqzwmEZDvWNNQUAHQAPAAwAAABtYngtZXNzZW4tMDIFADwAAgAADwA2AAAATWljcm9zb2Z0LkV4Y2hhbmdlLlRyYW5zcG9ydC5NYWlsUmVjaXBpZW50LkRpc3BsYXlOYW1lDwARAAAAS2xhc3NlcnQsIFN0ZWZmZW4FAGwAAgAABQBYABcASgAAAPDFCS25BAlDktII2g02frhDTj1LbGFzc2VydCBTdGVmZmVuLE9VPVVzZXJzLE9VPU1pZ3JhdGlvbixEQz1zZWN1bmV0LERDPWRlBQAMAAIAAAUAJgACAAEFACIADwAxAAAAQXV0b1Jlc3BvbnNlU3VwcHJlc3M6IDANClRyYW5zbWl0SGlzdG9yeTogRmFsc2UNCg8ALwAAAE1pY3Jvc29mdC5FeGNoYW5nZS5UcmFuc3BvcnQuRXhwYW5zaW9uR3JvdXBUeXBlDwAVAAAATWVtYmVyc0dyb3VwRXhwYW5zaW9uBQAjAAIAAQ== +X-CreatedBy: MSExchange15 +X-HeloDomain: b.mx.secunet.com +X-ExtendedProps: BQBjAAoAs0mmlidQ3AgFAGEACAABAAAABQA3AAIAAA8APAAAAE1pY3Jvc29mdC5FeGNoYW5nZS5UcmFuc3BvcnQuTWFpbFJlY2lwaWVudC5Pcmdhbml6YXRpb25TY29wZREAAAAAAAAAAAAAAAAAAAAAAAUASQACAAEFAAQAFCABAAAAHAAAAHN0ZWZmZW4ua2xhc3NlcnRAc2VjdW5ldC5jb20FAAYAAgABDwAqAAAATWljcm9zb2Z0LkV4Y2hhbmdlLlRyYW5zcG9ydC5SZXN1Ym1pdENvdW50BwACAAAADwAJAAAAQ0lBdWRpdGVkAgABBQACAAcAAQAAAAUAAwAHAAAAAAAFAAUAAgABBQBiAAoAMQAAAM6KAAAFAGQADwADAAAASHViBQApAAIAAQ8APwAAAE1pY3Jvc29mdC5FeGNoYW5nZS5UcmFuc3BvcnQuRGlyZWN0b3J5RGF0YS5NYWlsRGVsaXZlcnlQcmlvcml0eQ8AAwAAAExvdw== +X-Source: SMTP:Default MBX-ESSEN-02 +X-SourceIPAddress: 62.96.220.37 +X-EndOfInjectedXHeaders: 40815 +Received: from cas-essen-02.secunet.de (10.53.40.202) by + mbx-essen-02.secunet.de (10.53.40.198) with Microsoft SMTP Server + (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id + 15.1.2507.37; Sat, 30 Mar 2024 00:03:27 +0100 +Received: from b.mx.secunet.com (62.96.220.37) by cas-essen-02.secunet.de + (10.53.40.202) with Microsoft SMTP Server (version=TLS1_2, + cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.35 via Frontend + Transport; Sat, 30 Mar 2024 00:03:27 +0100 +Received: from localhost (localhost [127.0.0.1]) + by b.mx.secunet.com (Postfix) with ESMTP id CD9122032C + for <steffen.klassert@secunet.com>; Sat, 30 Mar 2024 00:03:27 +0100 (CET) +X-Virus-Scanned: by secunet +X-Spam-Flag: NO +X-Spam-Score: -5.15 +X-Spam-Level: +X-Spam-Status: No, score=-5.15 tagged_above=-999 required=2.1 + tests=[BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.099, DKIM_SIGNED=0.1, + DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, + HEADER_FROM_DIFFERENT_DOMAINS=0.249, MAILING_LIST_MULTI=-1, + RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_NONE=0.001, SPF_PASS=-0.001] + autolearn=unavailable autolearn_force=no +Authentication-Results: a.mx.secunet.com (amavisd-new); + dkim=pass (1024-bit key) header.d=amd.com +Received: from b.mx.secunet.com ([127.0.0.1]) + by localhost (a.mx.secunet.com [127.0.0.1]) (amavisd-new, port 10024) + with ESMTP id VyZR681U1qTQ for <steffen.klassert@secunet.com>; + Sat, 30 Mar 2024 00:03:26 +0100 (CET) +Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=139.178.88.99; helo=sv.mirrors.kernel.org; envelope-from=linux-kernel+bounces-125499-steffen.klassert=secunet.com@vger.kernel.org; receiver=steffen.klassert@secunet.com +DKIM-Filter: OpenDKIM Filter v2.11.0 b.mx.secunet.com 7E62A200BB +Authentication-Results: b.mx.secunet.com; + dkim=pass (1024-bit key) header.d=amd.com header.i=@amd.com header.b="tsg2jqS4" +Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org [139.178.88.99]) + (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) + (No client certificate requested) + by b.mx.secunet.com (Postfix) with ESMTPS id 7E62A200BB + for <steffen.klassert@secunet.com>; Sat, 30 Mar 2024 00:03:26 +0100 (CET) +Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) + (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) + (No client certificate requested) + by sv.mirrors.kernel.org (Postfix) with ESMTPS id C69C228254E + for <steffen.klassert@secunet.com>; Fri, 29 Mar 2024 23:03:24 +0000 (UTC) +Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) + by smtp.subspace.kernel.org (Postfix) with ESMTP id 1B81C13E880; + Fri, 29 Mar 2024 23:03:06 +0000 (UTC) +Authentication-Results: smtp.subspace.kernel.org; + dkim=pass (1024-bit key) header.d=amd.com header.i=@amd.com header.b="tsg2jqS4" +Received: from NAM11-BN8-obe.outbound.protection.outlook.com (mail-bn8nam11on2041.outbound.protection.outlook.com [40.107.236.41]) + (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) + (No client certificate requested) + by smtp.subspace.kernel.org (Postfix) with ESMTPS id B658F24B21; + Fri, 29 Mar 2024 23:02:57 +0000 (UTC) +Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.236.41 +ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; + t=1711753381; cv=fail; b=ASgCoc4pmkz2vBzguIaJLZZVNBJMtLdJT8A1j5Gp2plNuevF713OSNn7k7u/Xh/j5x7jv9jH1DiJ3uwERThruOXukCQucQ9R8C6BHTb7FcGVSyi9jobpRzt1p3sMEWB7AWrsDnGzohE/u8V1LOrYE2kekbT8zRBwOVdw8bs5eGM= +ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; + s=arc-20240116; t=1711753381; c=relaxed/simple; + bh=KHHF/vBYV5yB+doCUDT2LqJVpn4wXbjwTAFdd/Tr7hw=; + h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: + MIME-Version:Content-Type; b=V+ChY87+uuO2tjKr3OWfY++p39GWLb5XEFU/ybYb8lwg0vZ9LskG3nCjTUkEAp1ui1xTIQAbcvc+gIipheM8dIptkLBE257HhTf038ApMGog29pcErKE7IM4gsVOb0kvRSpB0ymOIbwnQfmKj4CH8Z5mmMeOnuq69gMbm001NzU= +ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=amd.com; spf=fail smtp.mailfrom=amd.com; dkim=pass (1024-bit key) header.d=amd.com header.i=@amd.com header.b=tsg2jqS4; arc=fail smtp.client-ip=40.107.236.41 +Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=amd.com +Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=amd.com +ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; + b=lLYVJ2rjiBRdW+iXdllNqIZgZPbKY5JUZuXz84I0MYkGHI2+isS0se4oi/xUVAb7WCpukPlEZ4EnA/TAf/47O5YwigfjX4z64qW0n65Liq7pSTRVQbZIg6hQDzMtF5tAemszDQ9S54y77SMSCrbFO0vgBz/6K8M9xwc2D3JNhOwb1vfNLhsWvLaDKUBNwSndlN7au8+Ihklcg0z97qJpnWdvu2IkGMHsNfwxMYkX01MV0m/RciFc31h98MB/qP7LwW8yrDdBe8bgE1tqE6GfC1TjmwKVJQ6vSnqXRv9sTL0qQZa1HjoTdPMAWEWJX2El0kVFYa/Y94IWHm1Ro9ZmSg== +ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; + s=arcselector9901; + h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; + bh=hYDUOsZ8oSqdDjPaR5Xc/ME9UC8/Zi2qVp0/kTJliSw=; + b=JZR18khJWPFbqxfvnhDfSz6vzkLIVM7g+WZGEqcJXuCxovLzBVdk2SVcaEonPSC5OIgWVMSRDRTbWA1quhM5G1ZajXm5cBNlvHTLl8EiqNwjn9MefAshE6md3MR6r9r7EOfPcnn3R8XMJkwBu6c6RDoTcNKIBW07GaJ2LDup6PZSeTpFSz9nc7MxpyZf2UUtgMfj/sKbCcHkMh+66FhpJMXwTo3PBqJPKBKw8ZGizPykZT7zyqdMnXDuAfx0JXEfqvu5mQ8O4c87jxmoOywcragCJynnAOQnF/Oh99uwkrFNFpZ3JZubcu3uOGkPJAlTBu1TX3SSyBS0+fjfurKuPw== +ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is + 165.204.84.17) smtp.rcpttodomain=vger.kernel.org smtp.mailfrom=amd.com; + dmarc=pass (p=quarantine sp=quarantine pct=100) action=none + header.from=amd.com; dkim=none (message not signed); arc=none (0) +DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; + h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; + bh=hYDUOsZ8oSqdDjPaR5Xc/ME9UC8/Zi2qVp0/kTJliSw=; + b=tsg2jqS42wTV0w9yTC7xM2MdaeE+6YTCo02pkCeadOlCLdUzOWEv9Cdbny0qli+q9EOFf18R1n+DFSolN88DcIl+p17LPAZCmBMVf83MvzKXZRO89mIaSyNP3VQhPVpOuMmISAhQyrR+6eCZtW27hj4N8M0imnZzJJTqoJlBzo0= +Received: from SJ0PR03CA0153.namprd03.prod.outlook.com (2603:10b6:a03:338::8) + by PH0PR12MB8032.namprd12.prod.outlook.com (2603:10b6:510:26f::15) with + Microsoft SMTP Server (version=TLS1_2, + cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7409.42; Fri, 29 Mar + 2024 23:02:52 +0000 +Received: from SJ1PEPF00001CE2.namprd05.prod.outlook.com + (2603:10b6:a03:338:cafe::d5) by SJ0PR03CA0153.outlook.office365.com + (2603:10b6:a03:338::8) with Microsoft SMTP Server (version=TLS1_2, + cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7409.40 via Frontend + Transport; Fri, 29 Mar 2024 23:02:52 +0000 +X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) + smtp.mailfrom=amd.com; dkim=none (message not signed) + header.d=none;dmarc=pass action=none header.from=amd.com; +Received-SPF: Pass (protection.outlook.com: domain of amd.com designates + 165.204.84.17 as permitted sender) receiver=protection.outlook.com; + client-ip=165.204.84.17; helo=SATLEXMB04.amd.com; pr=C +Received: from SATLEXMB04.amd.com (165.204.84.17) by + SJ1PEPF00001CE2.mail.protection.outlook.com (10.167.242.10) with Microsoft + SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id + 15.20.7409.10 via Frontend Transport; Fri, 29 Mar 2024 23:02:52 +0000 +Received: from localhost (10.180.168.240) by SATLEXMB04.amd.com + (10.181.40.145) with Microsoft SMTP Server (version=TLS1_2, + cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.35; Fri, 29 Mar + 2024 18:02:51 -0500 +From: Michael Roth <michael.roth@amd.com> +To: <kvm@vger.kernel.org> +CC: <linux-coco@lists.linux.dev>, <linux-mm@kvack.org>, + <linux-crypto@vger.kernel.org>, <x86@kernel.org>, + <linux-kernel@vger.kernel.org>, <tglx@linutronix.de>, <mingo@redhat.com>, + <jroedel@suse.de>, <thomas.lendacky@amd.com>, <hpa@zytor.com>, + <ardb@kernel.org>, <pbonzini@redhat.com>, <seanjc@google.com>, + <vkuznets@redhat.com>, <jmattson@google.com>, <luto@kernel.org>, + <dave.hansen@linux.intel.com>, <slp@redhat.com>, <pgonda@google.com>, + <peterz@infradead.org>, <srinivas.pandruvada@linux.intel.com>, + <rientjes@google.com>, <dovmurik@linux.ibm.com>, <tobin@ibm.com>, + <bp@alien8.de>, <vbabka@suse.cz>, <kirill@shutemov.name>, + <ak@linux.intel.com>, <tony.luck@intel.com>, + <sathyanarayanan.kuppuswamy@linux.intel.com>, <alpergun@google.com>, + <jarkko@kernel.org>, <ashish.kalra@amd.com>, <nikunj.dadhania@amd.com>, + <pankaj.gupta@amd.com>, <liam.merwick@oracle.com>, Brijesh Singh + <brijesh.singh@amd.com> +Subject: [PATCH v12 19/29] KVM: SEV: Support SEV-SNP AP Creation NAE event +Date: Fri, 29 Mar 2024 17:58:25 -0500 +Message-ID: <20240329225835.400662-20-michael.roth@amd.com> +X-Mailer: git-send-email 2.25.1 +In-Reply-To: <20240329225835.400662-1-michael.roth@amd.com> +References: <20240329225835.400662-1-michael.roth@amd.com> +Precedence: bulk +X-Mailing-List: linux-kernel@vger.kernel.org +List-Id: <linux-kernel.vger.kernel.org> +List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org> +List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org> +MIME-Version: 1.0 +Content-Transfer-Encoding: 8bit +Content-Type: text/plain +X-ClientProxiedBy: SATLEXMB03.amd.com (10.181.40.144) To SATLEXMB04.amd.com + (10.181.40.145) +X-EOPAttributedMessage: 0 +X-MS-PublicTrafficType: Email +X-MS-TrafficTypeDiagnostic: SJ1PEPF00001CE2:EE_|PH0PR12MB8032:EE_ +X-MS-Office365-Filtering-Correlation-Id: 551edada-c896-4c34-cb0b-08dc50445cac +X-MS-Exchange-SenderADCheck: 1 +X-MS-Exchange-AntiSpam-Relay: 0 +X-Microsoft-Antispam: BCL:0; +X-Microsoft-Antispam-Message-Info: bjuWmA2FmMrZm/Lj19E04lIhHLtbd7tQjfPwsVQo3kXbjdq069bgIoUjxkhgx8Aog4T4A3SqnXW08ioGCt1IlNphfNVzzruiUNNzLQ2rfJL4u7yg38WZSlbesKmiUQF9+h3hAMV3iEaGIMxQLMiF8/pLqaxrl2T3bnXGI1CY0ZQvFM4cb+jZsMMExqzSFSd2yrWlrsz2v7jxs5jn5GlS3RkBz46l3THP9KVizrwjINvqJ+b7q+DryORFCc74jHbXHwevPI9WRn7c2UINnUyX3Tixqx+JC3wZ53Mu2LAnGHcXCDjY2972TsOFRQ4w2Oopu/P7sFSNb82qrAEqvRiK0UgOzYkkclLrdqjoXVXXHse0DMPB7APNjMriX0HkXip3reXUbUs9eYjYKpvLIXvvDBsrodbz+GFat/Lg2ri8HqMnsu1hyGo++bXUr4Srgtv8wS9ymx6EGwKP0SXqxqrwf8sFmyAfI9ZDuoaQkiTL6hra+gLdWzsb+PrYu/GYSlTGCEKCVH9tQ+j5mGyLi48LciiqqIKfQ8gm1SAmZ5uXUVi6sLHDrFfw4Grx8QBURmbKlNX74pmxPa2UEx31cXvdta3+9GihVK3kWW9p18Tfo7ExRMJ+SbP7H7GTGs+FyDi1abkfQ0Bq0woD+mX7w/e9zlIg2s2lsNjktlMkFmns3T+H6j1u+oetS3cP19luVMG3RojbB2cOx7+b47V+AEvF5odxwKPDE6HJK3hneESmFVGYoHX92nA1oPxul0vafabD +X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:SATLEXMB04.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230031)(1800799015)(7416005)(376005)(82310400014)(36860700004);DIR:OUT;SFP:1101; +X-MS-Exchange-CrossTenant-OriginalArrivalTime: 29 Mar 2024 23:02:52.1344 + (UTC) +X-MS-Exchange-CrossTenant-Network-Message-Id: 551edada-c896-4c34-cb0b-08dc50445cac +X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d +X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.17];Helo=[SATLEXMB04.amd.com] +X-MS-Exchange-CrossTenant-AuthSource: SJ1PEPF00001CE2.namprd05.prod.outlook.com +X-MS-Exchange-CrossTenant-AuthAs: Anonymous +X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem +X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH0PR12MB8032 +Return-Path: linux-kernel+bounces-125499-steffen.klassert=secunet.com@vger.kernel.org +X-MS-Exchange-Organization-OriginalArrivalTime: 29 Mar 2024 23:03:27.8753 + (UTC) +X-MS-Exchange-Organization-Network-Message-Id: af780292-29d4-4036-a8a6-08dc504471e7 +X-MS-Exchange-Organization-OriginalClientIPAddress: 62.96.220.37 +X-MS-Exchange-Organization-OriginalServerIPAddress: 10.53.40.202 +X-MS-Exchange-Organization-Cross-Premises-Headers-Processed: cas-essen-02.secunet.de +X-MS-Exchange-Organization-OrderedPrecisionLatencyInProgress: LSRV=mbx-essen-02.secunet.de:TOTAL-HUB=33337.492|SMR=0.139(SMRDE=0.005|SMRC=0.133(SMRCL=0.103|X-SMRCR=0.133))|CAT=0.095(CATRESL=0.028 + (CATRESLP2R=0.025)|CATORES=0.063(CATRS=0.062(CATRS-Index Routing + Agent=0.061))|CATORT=0.001 + (CATRT=0.001))|UNK=0.001|QDM=12182.769|SMSC=0.625(X-SMSDR=0.012)|SMS=5.877(SMSMBXD-INC=5.382 + )|UNK=0.001|QDM=20832.499|SMSC=0.010|SMS=1.288(SMSMBXD-INC=1.278)|QDM=309.051|PSC=0.026 + |CAT=0.008(CATRESL=0.006(CATRESLP2R=0.001))|QDM=5.350|UNK=0.001|CAT=0.005(CATRESL=0.004 + (CATRESLP2R=0.002));2024-03-30T08:19:05.383Z +X-MS-Exchange-Forest-ArrivalHubServer: mbx-essen-02.secunet.de +X-MS-Exchange-Organization-AuthSource: cas-essen-02.secunet.de +X-MS-Exchange-Organization-AuthAs: Anonymous +X-MS-Exchange-Organization-FromEntityHeader: Internet +X-MS-Exchange-Organization-OriginalSize: 26856 +X-MS-Exchange-Organization-HygienePolicy: Standard +X-MS-Exchange-Organization-MessageLatency: SRV=cas-essen-02.secunet.de:TOTAL-FE=0.016|SMR=0.010(SMRPI=0.007(SMRPI-FrontendProxyAgent=0.007))|SMS=0.006 +X-MS-Exchange-Organization-Recipient-Limit-Verified: True +X-MS-Exchange-Organization-TotalRecipientCount: 1 +X-MS-Exchange-Organization-Rules-Execution-History: 0b0cf904-14ac-4724-8bdf-482ee6223cf2%%%fd34672d-751c-45ae-a963-ed177fcabe23%%%d8080257-b0c3-47b4-b0db-23bc0c8ddb3c%%%95e591a2-5d7d-4afa-b1d0-7573d6c0a5d9%%%f7d0f6bc-4dcc-4876-8c5d-b3d6ddbb3d55%%%16355082-c50b-4214-9c7d-d39575f9f79b +X-MS-Exchange-Forest-RulesExecuted: mbx-essen-02 +X-MS-Exchange-Organization-RulesExecuted: mbx-essen-02 +X-MS-Exchange-Forest-IndexAgent-0: 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 + Lp8mUOA3w5RMytcbmjNKu2aWX/9tIhpamFWuKiZ1cJFlck6edi1yIn + OTuBajzCtBdFMinXZjeBigoqAbAyUdUPhaXFkVGr84MHTRdEhxPuEG + yXpW7uZ0U1oFzFse4QLLdNI93xnMmv5UCzMzUtpnJsvckeNJ9W+crS + Zqu9UqNzyIptN8ZBadDaNbUisPhlMvqaoTqaS3nBhETKzeuxV4CUR5 + W7WdTyPsrD49hLyeMeOIfC0RUl0fVquxOjWsUKBNOJJJF53iZ71AzS + FBEGKfswNdJOKwAxXKgcZk4wxW7WR0mggZ8MUwnCBH/EB3PYSAmGJM + vN5Z87/LUXk68C1tuTS8kIoK6IDbNbbR2WGa6KKoMzemBEZ3LsOhhT + LjYHXvEoTFycIPHnyDB99TckI+6w5vlvlIufDtGB0WJNTZKDZG53kX + dKwZw+f/AyxJRVqWZQAAAQq9BDw/eG1sIHZlcnNpb249IjEuMCIgZW + 5jb2Rpbmc9InV0Zi0xNiI/Pg0KPEVtYWlsU2V0Pg0KICA8VmVyc2lv + bj4xNS4wLjAuMDwvVmVyc2lvbj4NCiAgPEVtYWlscz4NCiAgICA8RW + 1haWwgU3RhcnRJbmRleD0iMjAiPg0KICAgICAgPEVtYWlsU3RyaW5n + PnRob21hcy5sZW5kYWNreUBhbWQuY29tPC9FbWFpbFN0cmluZz4NCi + AgICA8L0VtYWlsPg0KICAgIDxFbWFpbCBTdGFydEluZGV4PSIxNTgw + IiBQb3NpdGlvbj0iT3RoZXIiPg0KICAgICAgPEVtYWlsU3RyaW5nPm + JyaWplc2guc2luZ2hAYW1kLmNvbTwvRW1haWxTdHJpbmc+DQogICAg + PC9FbWFpbD4NCiAgICA8RW1haWwgU3RhcnRJbmRleD0iMTYzMyIgUG + 9zaXRpb249Ik90aGVyIj4NCiAgICAgIDxFbWFpbFN0cmluZz5hc2hp + c2gua2FscmFAYW1kLmNvbTwvRW1haWxTdHJpbmc+DQogICAgPC9FbW + FpbD4NCiAgICA8RW1haWwgU3RhcnRJbmRleD0iMTg0MCIgUG9zaXRp + b249Ik90aGVyIj4NCiAgICAgIDxFbWFpbFN0cmluZz5taWNoYWVsLn + JvdGhAYW1kLmNvbTwvRW1haWxTdHJpbmc+DQogICAgPC9FbWFpbD4N + CiAgPC9FbWFpbHM+DQo8L0VtYWlsU2V0PgEL2wE8P3htbCB2ZXJzaW + 9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtMTYiPz4NCjxVcmxTZXQ+DQog + IDxWZXJzaW9uPjE1LjAuMC4wPC9WZXJzaW9uPg0KICA8VXJscz4NCi + AgICA8VXJsIFN0YXJ0SW5kZXg9IjE3ODQiIFBvc2l0aW9uPSJPdGhl + ciIgVHlwZT0iVXJsIj4NCiAgICAgIDxVcmxTdHJpbmc+YXJjaC5tcD + wvVXJsU3RyaW5nPg0KICAgIDwvVXJsPg0KICA8L1VybHM+DQo8L1Vy + bFNldD4BDtABUmV0cmlldmVyT3BlcmF0b3IsMTAsMTtSZXRyaWV2ZX + JPcGVyYXRvciwxMSw0O1Bvc3REb2NQYXJzZXJPcGVyYXRvciwxMCwx + O1Bvc3REb2NQYXJzZXJPcGVyYXRvciwxMSwwO1Bvc3RXb3JkQnJlYW + tlckRpYWdub3N0aWNPcGVyYXRvciwxMCwxMTtQb3N0V29yZEJyZWFr + ZXJEaWFnbm9zdGljT3BlcmF0b3IsMTEsMDtUcmFuc3BvcnRXcml0ZX JQcm9kdWNlciwyMCwyOQ== +X-MS-Exchange-Forest-IndexAgent: 1 8479 +X-MS-Exchange-Forest-EmailMessageHash: F69556A6 +X-MS-Exchange-Forest-Language: en +X-MS-Exchange-Organization-Processed-By-Journaling: Journal Agent +X-MS-Exchange-Organization-Transport-Properties: DeliveryPriority=Low +X-MS-Exchange-Organization-Prioritization: 2:RC:REDACTED-af51df60fd698f80b064826f9ee192ca@secunet.com:91/10|SR +X-MS-Exchange-Organization-IncludeInSla: False:RecipientCountThresholdExceeded + +From: Tom Lendacky <thomas.lendacky@amd.com> + +Add support for the SEV-SNP AP Creation NAE event. This allows SEV-SNP +guests to alter the register state of the APs on their own. This allows +the guest a way of simulating INIT-SIPI. + +A new event, KVM_REQ_UPDATE_PROTECTED_GUEST_STATE, is created and used +so as to avoid updating the VMSA pointer while the vCPU is running. + +For CREATE + The guest supplies the GPA of the VMSA to be used for the vCPU with + the specified APIC ID. The GPA is saved in the svm struct of the + target vCPU, the KVM_REQ_UPDATE_PROTECTED_GUEST_STATE event is added + to the vCPU and then the vCPU is kicked. + +For CREATE_ON_INIT: + The guest supplies the GPA of the VMSA to be used for the vCPU with + the specified APIC ID the next time an INIT is performed. The GPA is + saved in the svm struct of the target vCPU. + +For DESTROY: + The guest indicates it wishes to stop the vCPU. The GPA is cleared + from the svm struct, the KVM_REQ_UPDATE_PROTECTED_GUEST_STATE event is + added to vCPU and then the vCPU is kicked. + +The KVM_REQ_UPDATE_PROTECTED_GUEST_STATE event handler will be invoked +as a result of the event or as a result of an INIT. If a new VMSA is to +be installed, the VMSA guest page is set as the VMSA in the vCPU VMCB +and the vCPU state is set to KVM_MP_STATE_RUNNABLE. If a new VMSA is not +to be installed, the VMSA is cleared in the vCPU VMCB and the vCPU state +is set to KVM_MP_STATE_HALTED to prevent it from being run. + +Signed-off-by: Tom Lendacky <thomas.lendacky@amd.com> +Signed-off-by: Brijesh Singh <brijesh.singh@amd.com> +Signed-off-by: Ashish Kalra <ashish.kalra@amd.com> +[mdr: add handling for gmem, move MP_STATE_UNINITIALIZED -> RUNNABLE + transition to target vCPU side rather than setting vcpu->arch.mp_state + remotely] +Signed-off-by: Michael Roth <michael.roth@amd.com> +--- + arch/x86/include/asm/kvm_host.h | 1 + + arch/x86/include/asm/svm.h | 6 + + arch/x86/kvm/svm/sev.c | 217 +++++++++++++++++++++++++++++++- + arch/x86/kvm/svm/svm.c | 11 +- + arch/x86/kvm/svm/svm.h | 8 ++ + arch/x86/kvm/x86.c | 11 ++ + 6 files changed, 252 insertions(+), 2 deletions(-) + +diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h +index 49b294a8d917..0fdacacd6e8e 100644 +--- a/arch/x86/include/asm/kvm_host.h ++++ b/arch/x86/include/asm/kvm_host.h +@@ -121,6 +121,7 @@ + KVM_ARCH_REQ_FLAGS(31, KVM_REQUEST_WAIT | KVM_REQUEST_NO_WAKEUP) + #define KVM_REQ_HV_TLB_FLUSH \ + KVM_ARCH_REQ_FLAGS(32, KVM_REQUEST_WAIT | KVM_REQUEST_NO_WAKEUP) ++#define KVM_REQ_UPDATE_PROTECTED_GUEST_STATE KVM_ARCH_REQ(34) + + #define CR0_RESERVED_BITS \ + (~(unsigned long)(X86_CR0_PE | X86_CR0_MP | X86_CR0_EM | X86_CR0_TS \ +diff --git a/arch/x86/include/asm/svm.h b/arch/x86/include/asm/svm.h +index 544a43c1cf11..f0dea3750ca9 100644 +--- a/arch/x86/include/asm/svm.h ++++ b/arch/x86/include/asm/svm.h +@@ -286,8 +286,14 @@ static_assert((X2AVIC_MAX_PHYSICAL_ID & AVIC_PHYSICAL_MAX_INDEX_MASK) == X2AVIC_ + #define AVIC_HPA_MASK ~((0xFFFULL << 52) | 0xFFF) + + #define SVM_SEV_FEAT_SNP_ACTIVE BIT(0) ++#define SVM_SEV_FEAT_RESTRICTED_INJECTION BIT(3) ++#define SVM_SEV_FEAT_ALTERNATE_INJECTION BIT(4) + #define SVM_SEV_FEAT_DEBUG_SWAP BIT(5) + ++#define SVM_SEV_FEAT_INT_INJ_MODES \ ++ (SVM_SEV_FEAT_RESTRICTED_INJECTION | \ ++ SVM_SEV_FEAT_ALTERNATE_INJECTION) ++ + struct vmcb_seg { + u16 selector; + u16 attrib; +diff --git a/arch/x86/kvm/svm/sev.c b/arch/x86/kvm/svm/sev.c +index ce1c727bad23..7dfbf12b454b 100644 +--- a/arch/x86/kvm/svm/sev.c ++++ b/arch/x86/kvm/svm/sev.c +@@ -37,7 +37,7 @@ + #define GHCB_VERSION_MAX 2ULL + #define GHCB_VERSION_MIN 1ULL + +-#define GHCB_HV_FT_SUPPORTED GHCB_HV_FT_SNP ++#define GHCB_HV_FT_SUPPORTED (GHCB_HV_FT_SNP | GHCB_HV_FT_SNP_AP_CREATION) + + /* enable/disable SEV support */ + static bool sev_enabled = true; +@@ -3203,6 +3203,11 @@ static int sev_es_validate_vmgexit(struct vcpu_svm *svm) + if (!kvm_ghcb_sw_scratch_is_valid(svm)) + goto vmgexit_err; + break; ++ case SVM_VMGEXIT_AP_CREATION: ++ if (lower_32_bits(control->exit_info_1) != SVM_VMGEXIT_AP_DESTROY) ++ if (!kvm_ghcb_rax_is_valid(svm)) ++ goto vmgexit_err; ++ break; + case SVM_VMGEXIT_NMI_COMPLETE: + case SVM_VMGEXIT_AP_HLT_LOOP: + case SVM_VMGEXIT_AP_JUMP_TABLE: +@@ -3443,6 +3448,195 @@ static int snp_complete_psc(struct kvm_vcpu *vcpu) + return 1; /* resume guest */ + } + ++static int __sev_snp_update_protected_guest_state(struct kvm_vcpu *vcpu) ++{ ++ struct vcpu_svm *svm = to_svm(vcpu); ++ ++ WARN_ON(!mutex_is_locked(&svm->sev_es.snp_vmsa_mutex)); ++ ++ /* Mark the vCPU as offline and not runnable */ ++ vcpu->arch.pv.pv_unhalted = false; ++ vcpu->arch.mp_state = KVM_MP_STATE_HALTED; ++ ++ /* Clear use of the VMSA */ ++ svm->sev_es.vmsa_pa = INVALID_PAGE; ++ svm->vmcb->control.vmsa_pa = INVALID_PAGE; ++ ++ if (VALID_PAGE(svm->sev_es.snp_vmsa_gpa)) { ++ gfn_t gfn = gpa_to_gfn(svm->sev_es.snp_vmsa_gpa); ++ struct kvm_memory_slot *slot; ++ kvm_pfn_t pfn; ++ ++ slot = gfn_to_memslot(vcpu->kvm, gfn); ++ if (!slot) ++ return -EINVAL; ++ ++ /* ++ * The new VMSA will be private memory guest memory, so ++ * retrieve the PFN from the gmem backend. ++ */ ++ if (kvm_gmem_get_pfn(vcpu->kvm, slot, gfn, &pfn, NULL)) ++ return -EINVAL; ++ ++ /* Use the new VMSA */ ++ svm->sev_es.vmsa_pa = pfn_to_hpa(pfn); ++ svm->vmcb->control.vmsa_pa = svm->sev_es.vmsa_pa; ++ ++ /* Mark the vCPU as runnable */ ++ vcpu->arch.pv.pv_unhalted = false; ++ vcpu->arch.mp_state = KVM_MP_STATE_RUNNABLE; ++ ++ svm->sev_es.snp_vmsa_gpa = INVALID_PAGE; ++ ++ /* ++ * gmem pages aren't currently migratable, but if this ever ++ * changes then care should be taken to ensure ++ * svm->sev_es.vmsa_pa is pinned through some other means. ++ */ ++ kvm_release_pfn_clean(pfn); ++ } ++ ++ /* ++ * When replacing the VMSA during SEV-SNP AP creation, ++ * mark the VMCB dirty so that full state is always reloaded. ++ */ ++ vmcb_mark_all_dirty(svm->vmcb); ++ ++ return 0; ++} ++ ++/* ++ * Invoked as part of svm_vcpu_reset() processing of an init event. ++ */ ++void sev_snp_init_protected_guest_state(struct kvm_vcpu *vcpu) ++{ ++ struct vcpu_svm *svm = to_svm(vcpu); ++ int ret; ++ ++ if (!sev_snp_guest(vcpu->kvm)) ++ return; ++ ++ mutex_lock(&svm->sev_es.snp_vmsa_mutex); ++ ++ if (!svm->sev_es.snp_ap_create) ++ goto unlock; ++ ++ svm->sev_es.snp_ap_create = false; ++ ++ ret = __sev_snp_update_protected_guest_state(vcpu); ++ if (ret) ++ vcpu_unimpl(vcpu, "snp: AP state update on init failed\n"); ++ ++unlock: ++ mutex_unlock(&svm->sev_es.snp_vmsa_mutex); ++} ++ ++static int sev_snp_ap_creation(struct vcpu_svm *svm) ++{ ++ struct kvm_sev_info *sev = &to_kvm_svm(svm->vcpu.kvm)->sev_info; ++ struct kvm_vcpu *vcpu = &svm->vcpu; ++ struct kvm_vcpu *target_vcpu; ++ struct vcpu_svm *target_svm; ++ unsigned int request; ++ unsigned int apic_id; ++ bool kick; ++ int ret; ++ ++ request = lower_32_bits(svm->vmcb->control.exit_info_1); ++ apic_id = upper_32_bits(svm->vmcb->control.exit_info_1); ++ ++ /* Validate the APIC ID */ ++ target_vcpu = kvm_get_vcpu_by_id(vcpu->kvm, apic_id); ++ if (!target_vcpu) { ++ vcpu_unimpl(vcpu, "vmgexit: invalid AP APIC ID [%#x] from guest\n", ++ apic_id); ++ return -EINVAL; ++ } ++ ++ ret = 0; ++ ++ target_svm = to_svm(target_vcpu); ++ ++ /* ++ * The target vCPU is valid, so the vCPU will be kicked unless the ++ * request is for CREATE_ON_INIT. For any errors at this stage, the ++ * kick will place the vCPU in an non-runnable state. ++ */ ++ kick = true; ++ ++ mutex_lock(&target_svm->sev_es.snp_vmsa_mutex); ++ ++ target_svm->sev_es.snp_vmsa_gpa = INVALID_PAGE; ++ target_svm->sev_es.snp_ap_create = true; ++ ++ /* Interrupt injection mode shouldn't change for AP creation */ ++ if (request < SVM_VMGEXIT_AP_DESTROY) { ++ u64 sev_features; ++ ++ sev_features = vcpu->arch.regs[VCPU_REGS_RAX]; ++ sev_features ^= sev->vmsa_features; ++ ++ if (sev_features & SVM_SEV_FEAT_INT_INJ_MODES) { ++ vcpu_unimpl(vcpu, "vmgexit: invalid AP injection mode [%#lx] from guest\n", ++ vcpu->arch.regs[VCPU_REGS_RAX]); ++ ret = -EINVAL; ++ goto out; ++ } ++ } ++ ++ switch (request) { ++ case SVM_VMGEXIT_AP_CREATE_ON_INIT: ++ kick = false; ++ fallthrough; ++ case SVM_VMGEXIT_AP_CREATE: ++ if (!page_address_valid(vcpu, svm->vmcb->control.exit_info_2)) { ++ vcpu_unimpl(vcpu, "vmgexit: invalid AP VMSA address [%#llx] from guest\n", ++ svm->vmcb->control.exit_info_2); ++ ret = -EINVAL; ++ goto out; ++ } ++ ++ /* ++ * Malicious guest can RMPADJUST a large page into VMSA which ++ * will hit the SNP erratum where the CPU will incorrectly signal ++ * an RMP violation #PF if a hugepage collides with the RMP entry ++ * of VMSA page, reject the AP CREATE request if VMSA address from ++ * guest is 2M aligned. ++ */ ++ if (IS_ALIGNED(svm->vmcb->control.exit_info_2, PMD_SIZE)) { ++ vcpu_unimpl(vcpu, ++ "vmgexit: AP VMSA address [%llx] from guest is unsafe as it is 2M aligned\n", ++ svm->vmcb->control.exit_info_2); ++ ret = -EINVAL; ++ goto out; ++ } ++ ++ target_svm->sev_es.snp_vmsa_gpa = svm->vmcb->control.exit_info_2; ++ break; ++ case SVM_VMGEXIT_AP_DESTROY: ++ break; ++ default: ++ vcpu_unimpl(vcpu, "vmgexit: invalid AP creation request [%#x] from guest\n", ++ request); ++ ret = -EINVAL; ++ break; ++ } ++ ++out: ++ if (kick) { ++ kvm_make_request(KVM_REQ_UPDATE_PROTECTED_GUEST_STATE, target_vcpu); ++ ++ if (target_vcpu->arch.mp_state == KVM_MP_STATE_UNINITIALIZED) ++ kvm_make_request(KVM_REQ_UNBLOCK, target_vcpu); ++ ++ kvm_vcpu_kick(target_vcpu); ++ } ++ ++ mutex_unlock(&target_svm->sev_es.snp_vmsa_mutex); ++ ++ return ret; ++} ++ + static int sev_handle_vmgexit_msr_protocol(struct vcpu_svm *svm) + { + struct vmcb_control_area *control = &svm->vmcb->control; +@@ -3686,6 +3880,15 @@ int sev_handle_vmgexit(struct kvm_vcpu *vcpu) + vcpu->run->vmgexit.psc.shared_gpa = svm->sev_es.sw_scratch; + vcpu->arch.complete_userspace_io = snp_complete_psc; + break; ++ case SVM_VMGEXIT_AP_CREATION: ++ ret = sev_snp_ap_creation(svm); ++ if (ret) { ++ ghcb_set_sw_exit_info_1(svm->sev_es.ghcb, 2); ++ ghcb_set_sw_exit_info_2(svm->sev_es.ghcb, GHCB_ERR_INVALID_INPUT); ++ } ++ ++ ret = 1; ++ break; + case SVM_VMGEXIT_UNSUPPORTED_EVENT: + vcpu_unimpl(vcpu, + "vmgexit: unsupported event - exit_info_1=%#llx, exit_info_2=%#llx\n", +@@ -3852,6 +4055,8 @@ void sev_es_vcpu_reset(struct vcpu_svm *svm) + set_ghcb_msr(svm, GHCB_MSR_SEV_INFO(GHCB_VERSION_MAX, + GHCB_VERSION_MIN, + sev_enc_bit)); ++ ++ mutex_init(&svm->sev_es.snp_vmsa_mutex); + } + + void sev_es_prepare_switch_to_guest(struct vcpu_svm *svm, struct sev_es_save_area *hostsa) +@@ -3963,6 +4168,16 @@ struct page *snp_safe_alloc_page(struct kvm_vcpu *vcpu) + return p; + } + ++void sev_vcpu_unblocking(struct kvm_vcpu *vcpu) ++{ ++ if (!sev_snp_guest(vcpu->kvm)) ++ return; ++ ++ if (kvm_test_request(KVM_REQ_UPDATE_PROTECTED_GUEST_STATE, vcpu) && ++ vcpu->arch.mp_state == KVM_MP_STATE_UNINITIALIZED) ++ vcpu->arch.mp_state = KVM_MP_STATE_RUNNABLE; ++} ++ + void sev_handle_rmp_fault(struct kvm_vcpu *vcpu, gpa_t gpa, u64 error_code) + { + struct kvm_memory_slot *slot; +diff --git a/arch/x86/kvm/svm/svm.c b/arch/x86/kvm/svm/svm.c +index e036a8927717..a895d3f07cb8 100644 +--- a/arch/x86/kvm/svm/svm.c ++++ b/arch/x86/kvm/svm/svm.c +@@ -1398,6 +1398,9 @@ static void svm_vcpu_reset(struct kvm_vcpu *vcpu, bool init_event) + svm->spec_ctrl = 0; + svm->virt_spec_ctrl = 0; + ++ if (init_event) ++ sev_snp_init_protected_guest_state(vcpu); ++ + init_vmcb(vcpu); + + if (!init_event) +@@ -4937,6 +4940,12 @@ static void *svm_alloc_apic_backing_page(struct kvm_vcpu *vcpu) + return page_address(page); + } + ++static void svm_vcpu_unblocking(struct kvm_vcpu *vcpu) ++{ ++ sev_vcpu_unblocking(vcpu); ++ avic_vcpu_unblocking(vcpu); ++} ++ + static struct kvm_x86_ops svm_x86_ops __initdata = { + .name = KBUILD_MODNAME, + +@@ -4959,7 +4968,7 @@ static struct kvm_x86_ops svm_x86_ops __initdata = { + .vcpu_load = svm_vcpu_load, + .vcpu_put = svm_vcpu_put, + .vcpu_blocking = avic_vcpu_blocking, +- .vcpu_unblocking = avic_vcpu_unblocking, ++ .vcpu_unblocking = svm_vcpu_unblocking, + + .update_exception_bitmap = svm_update_exception_bitmap, + .get_msr_feature = svm_get_msr_feature, +diff --git a/arch/x86/kvm/svm/svm.h b/arch/x86/kvm/svm/svm.h +index 8cce3315b46c..0cdcd0759fe0 100644 +--- a/arch/x86/kvm/svm/svm.h ++++ b/arch/x86/kvm/svm/svm.h +@@ -211,6 +211,10 @@ struct vcpu_sev_es_state { + bool ghcb_sa_free; + + u64 ghcb_registered_gpa; ++ ++ struct mutex snp_vmsa_mutex; /* Used to handle concurrent updates of VMSA. */ ++ gpa_t snp_vmsa_gpa; ++ bool snp_ap_create; + }; + + struct vcpu_svm { +@@ -724,6 +728,8 @@ int sev_cpu_init(struct svm_cpu_data *sd); + int sev_dev_get_attr(u64 attr, u64 *val); + extern unsigned int max_sev_asid; + void sev_handle_rmp_fault(struct kvm_vcpu *vcpu, gpa_t gpa, u64 error_code); ++void sev_vcpu_unblocking(struct kvm_vcpu *vcpu); ++void sev_snp_init_protected_guest_state(struct kvm_vcpu *vcpu); + #else + static inline struct page *snp_safe_alloc_page(struct kvm_vcpu *vcpu) { + return alloc_page(GFP_KERNEL_ACCOUNT | __GFP_ZERO); +@@ -738,6 +744,8 @@ static inline int sev_cpu_init(struct svm_cpu_data *sd) { return 0; } + static inline int sev_dev_get_attr(u64 attr, u64 *val) { return -ENXIO; } + #define max_sev_asid 0 + static inline void sev_handle_rmp_fault(struct kvm_vcpu *vcpu, gpa_t gpa, u64 error_code) {} ++static inline void sev_vcpu_unblocking(struct kvm_vcpu *vcpu) {} ++static inline void sev_snp_init_protected_guest_state(struct kvm_vcpu *vcpu) {} + + #endif + +diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c +index f85735b6235d..617c38656757 100644 +--- a/arch/x86/kvm/x86.c ++++ b/arch/x86/kvm/x86.c +@@ -10943,6 +10943,14 @@ static int vcpu_enter_guest(struct kvm_vcpu *vcpu) + + if (kvm_check_request(KVM_REQ_UPDATE_CPU_DIRTY_LOGGING, vcpu)) + static_call(kvm_x86_update_cpu_dirty_logging)(vcpu); ++ ++ if (kvm_check_request(KVM_REQ_UPDATE_PROTECTED_GUEST_STATE, vcpu)) { ++ kvm_vcpu_reset(vcpu, true); ++ if (vcpu->arch.mp_state != KVM_MP_STATE_RUNNABLE) { ++ r = 1; ++ goto out; ++ } ++ } + } + + if (kvm_check_request(KVM_REQ_EVENT, vcpu) || req_int_win || +@@ -13150,6 +13158,9 @@ static inline bool kvm_vcpu_has_events(struct kvm_vcpu *vcpu) + if (kvm_test_request(KVM_REQ_PMI, vcpu)) + return true; + ++ if (kvm_test_request(KVM_REQ_UPDATE_PROTECTED_GUEST_STATE, vcpu)) ++ return true; ++ + if (kvm_arch_interrupt_allowed(vcpu) && + (kvm_cpu_has_interrupt(vcpu) || + kvm_guest_apic_has_interrupt(vcpu))) +-- +2.25.1 diff --git a/a/content_digest b/N1/content_digest index 657a9a7..a2b884d 100644 --- a/a/content_digest +++ b/N1/content_digest @@ -500,7 +500,854 @@ " \t (kvm_cpu_has_interrupt(vcpu) ||\n", " \t kvm_guest_apic_has_interrupt(vcpu)))\n", "-- \n", + "2.25.1\n", + "\n", + "\n", + "X-sender: <linux-kernel+bounces-125499-steffen.klassert=secunet.com\@vger.kernel.org>\n", + "X-Receiver: <steffen.klassert\@secunet.com> ORCPT=rfc822;steffen.klassert\@secunet.com; X-ExtendedProps=DwA1AAAATWljcm9zb2Z0LkV4Y2hhbmdlLlRyYW5zcG9ydC5EaXJlY3RvcnlEYXRhLklzUmVzb3VyY2UCAAAFABUAFgACAAAABQAUABEA8MUJLbkECUOS0gjaDTZ+uAUAagAJAAEAAAAAAAAABQAWAAIAAAUAQwACAAAFAEYABwADAAAABQBHAAIAAAUAEgAPAGIAAAAvbz1zZWN1bmV0L291PUV4Y2hhbmdlIEFkbWluaXN0cmF0aXZlIEdyb3VwIChGWURJQk9IRjIzU1BETFQpL2NuPVJlY2lwaWVudHMvY249U3RlZmZlbiBLbGFzc2VydDY4YwUACwAXAL4AAACheZxkHSGBRqAcAp3ukbifQ049REI2LENOPURhdGFiYXNlcyxDTj1FeGNoYW5nZSBBZG1pbmlzdHJhdGl2ZSBHcm91cCAoRllESUJPSEYyM1NQRExUKSxDTj1BZG1pbmlzdHJhdGl2ZSBHcm91cHMsQ049c2VjdW5ldCxDTj1NaWNyb3NvZnQgRXhjaGFuZ2UsQ049U2VydmljZXMsQ049Q29uZmlndXJhdGlvbixEQz1zZWN1bmV0LERDPWRlBQAOABEABiAS9uuMOkqzwmEZDvWNNQUAHQAPAAwAAABtYngtZXNzZW4tMDIFADwAAgAADwA2AAAATWljcm9zb2Z0LkV4Y2hhbmdlLlRyYW5zcG9ydC5NYWlsUmVjaXBpZW50LkRpc3BsYXlOYW1lDwARAAAAS2xhc3NlcnQsIFN0ZWZmZW4FAGwAAgAABQBYABcASgAAAPDFCS25BAlDktII2g02frhDTj1LbGFzc2VydCBTdGVmZmVuLE9VPVVzZXJzLE9VPU1pZ3JhdGlvbixEQz1zZWN1bmV0LERDPWRlBQAMAAIAAAUAJgACAAEFACIADwAxAAAAQXV0b1Jlc3BvbnNlU3VwcHJlc3M6IDANClRyYW5zbWl0SGlzdG9yeTogRmFsc2UNCg8ALwAAAE1pY3Jvc29mdC5FeGNoYW5nZS5UcmFuc3BvcnQuRXhwYW5zaW9uR3JvdXBUeXBlDwAVAAAATWVtYmVyc0dyb3VwRXhwYW5zaW9uBQAjAAIAAQ==\n", + "X-CreatedBy: MSExchange15\n", + "X-HeloDomain: b.mx.secunet.com\n", + "X-ExtendedProps: BQBjAAoAs0mmlidQ3AgFAGEACAABAAAABQA3AAIAAA8APAAAAE1pY3Jvc29mdC5FeGNoYW5nZS5UcmFuc3BvcnQuTWFpbFJlY2lwaWVudC5Pcmdhbml6YXRpb25TY29wZREAAAAAAAAAAAAAAAAAAAAAAAUASQACAAEFAAQAFCABAAAAHAAAAHN0ZWZmZW4ua2xhc3NlcnRAc2VjdW5ldC5jb20FAAYAAgABDwAqAAAATWljcm9zb2Z0LkV4Y2hhbmdlLlRyYW5zcG9ydC5SZXN1Ym1pdENvdW50BwACAAAADwAJAAAAQ0lBdWRpdGVkAgABBQACAAcAAQAAAAUAAwAHAAAAAAAFAAUAAgABBQBiAAoAMQAAAM6KAAAFAGQADwADAAAASHViBQApAAIAAQ8APwAAAE1pY3Jvc29mdC5FeGNoYW5nZS5UcmFuc3BvcnQuRGlyZWN0b3J5RGF0YS5NYWlsRGVsaXZlcnlQcmlvcml0eQ8AAwAAAExvdw==\n", + "X-Source: SMTP:Default MBX-ESSEN-02\n", + "X-SourceIPAddress: 62.96.220.37\n", + "X-EndOfInjectedXHeaders: 40815\n", + "Received: from cas-essen-02.secunet.de (10.53.40.202) by\n", + " mbx-essen-02.secunet.de (10.53.40.198) with Microsoft SMTP Server\n", + " (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id\n", + " 15.1.2507.37; Sat, 30 Mar 2024 00:03:27 +0100\n", + "Received: from b.mx.secunet.com (62.96.220.37) by cas-essen-02.secunet.de\n", + " (10.53.40.202) with Microsoft SMTP Server (version=TLS1_2,\n", + " cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.35 via Frontend\n", + " Transport; Sat, 30 Mar 2024 00:03:27 +0100\n", + "Received: from localhost (localhost [127.0.0.1])\n", + "\tby b.mx.secunet.com (Postfix) with ESMTP id CD9122032C\n", + "\tfor <steffen.klassert\@secunet.com>; Sat, 30 Mar 2024 00:03:27 +0100 (CET)\n", + "X-Virus-Scanned: by secunet\n", + "X-Spam-Flag: NO\n", + "X-Spam-Score: -5.15\n", + "X-Spam-Level:\n", + "X-Spam-Status: No, score=-5.15 tagged_above=-999 required=2.1\n", + "\ttests=[BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.099, DKIM_SIGNED=0.1,\n", + "\tDKIM_VALID=-0.1, DKIM_VALID_AU=-0.1,\n", + "\tHEADER_FROM_DIFFERENT_DOMAINS=0.249, MAILING_LIST_MULTI=-1,\n", + "\tRCVD_IN_DNSWL_MED=-2.3, SPF_HELO_NONE=0.001, SPF_PASS=-0.001]\n", + "\tautolearn=unavailable autolearn_force=no\n", + "Authentication-Results: a.mx.secunet.com (amavisd-new);\n", + "\tdkim=pass (1024-bit key) header.d=amd.com\n", + "Received: from b.mx.secunet.com ([127.0.0.1])\n", + "\tby localhost (a.mx.secunet.com [127.0.0.1]) (amavisd-new, port 10024)\n", + "\twith ESMTP id VyZR681U1qTQ for <steffen.klassert\@secunet.com>;\n", + "\tSat, 30 Mar 2024 00:03:26 +0100 (CET)\n", + "Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=139.178.88.99; helo=sv.mirrors.kernel.org; envelope-from=linux-kernel+bounces-125499-steffen.klassert=secunet.com\@vger.kernel.org; receiver=steffen.klassert\@secunet.com \n", + "DKIM-Filter: OpenDKIM Filter v2.11.0 b.mx.secunet.com 7E62A200BB\n", + "Authentication-Results: b.mx.secunet.com;\n", + "\tdkim=pass (1024-bit key) header.d=amd.com header.i=\@amd.com header.b=\"tsg2jqS4\"\n", + "Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org [139.178.88.99])\n", + "\t(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))\n", + "\t(No client certificate requested)\n", + "\tby b.mx.secunet.com (Postfix) with ESMTPS id 7E62A200BB\n", + "\tfor <steffen.klassert\@secunet.com>; Sat, 30 Mar 2024 00:03:26 +0100 (CET)\n", + "Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140])\n", + "\t(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))\n", + "\t(No client certificate requested)\n", + "\tby sv.mirrors.kernel.org (Postfix) with ESMTPS id C69C228254E\n", + "\tfor <steffen.klassert\@secunet.com>; Fri, 29 Mar 2024 23:03:24 +0000 (UTC)\n", + "Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])\n", + "\tby smtp.subspace.kernel.org (Postfix) with ESMTP id 1B81C13E880;\n", + "\tFri, 29 Mar 2024 23:03:06 +0000 (UTC)\n", + "Authentication-Results: smtp.subspace.kernel.org;\n", + "\tdkim=pass (1024-bit key) header.d=amd.com header.i=\@amd.com header.b=\"tsg2jqS4\"\n", + "Received: from NAM11-BN8-obe.outbound.protection.outlook.com (mail-bn8nam11on2041.outbound.protection.outlook.com [40.107.236.41])\n", + "\t(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))\n", + "\t(No client certificate requested)\n", + "\tby smtp.subspace.kernel.org (Postfix) with ESMTPS id B658F24B21;\n", + "\tFri, 29 Mar 2024 23:02:57 +0000 (UTC)\n", + "Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.236.41\n", + "ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;\n", + "\tt=1711753381; cv=fail; b=ASgCoc4pmkz2vBzguIaJLZZVNBJMtLdJT8A1j5Gp2plNuevF713OSNn7k7u/Xh/j5x7jv9jH1DiJ3uwERThruOXukCQucQ9R8C6BHTb7FcGVSyi9jobpRzt1p3sMEWB7AWrsDnGzohE/u8V1LOrYE2kekbT8zRBwOVdw8bs5eGM=\n", + "ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org;\n", + "\ts=arc-20240116; t=1711753381; c=relaxed/simple;\n", + "\tbh=KHHF/vBYV5yB+doCUDT2LqJVpn4wXbjwTAFdd/Tr7hw=;\n", + "\th=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References:\n", + "\t MIME-Version:Content-Type; b=V+ChY87+uuO2tjKr3OWfY++p39GWLb5XEFU/ybYb8lwg0vZ9LskG3nCjTUkEAp1ui1xTIQAbcvc+gIipheM8dIptkLBE257HhTf038ApMGog29pcErKE7IM4gsVOb0kvRSpB0ymOIbwnQfmKj4CH8Z5mmMeOnuq69gMbm001NzU=\n", + "ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=amd.com; spf=fail smtp.mailfrom=amd.com; dkim=pass (1024-bit key) header.d=amd.com header.i=\@amd.com header.b=tsg2jqS4; arc=fail smtp.client-ip=40.107.236.41\n", + "Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=amd.com\n", + "Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=amd.com\n", + "ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;\n", + " b=lLYVJ2rjiBRdW+iXdllNqIZgZPbKY5JUZuXz84I0MYkGHI2+isS0se4oi/xUVAb7WCpukPlEZ4EnA/TAf/47O5YwigfjX4z64qW0n65Liq7pSTRVQbZIg6hQDzMtF5tAemszDQ9S54y77SMSCrbFO0vgBz/6K8M9xwc2D3JNhOwb1vfNLhsWvLaDKUBNwSndlN7au8+Ihklcg0z97qJpnWdvu2IkGMHsNfwxMYkX01MV0m/RciFc31h98MB/qP7LwW8yrDdBe8bgE1tqE6GfC1TjmwKVJQ6vSnqXRv9sTL0qQZa1HjoTdPMAWEWJX2El0kVFYa/Y94IWHm1Ro9ZmSg==\n", + "ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;\n", + " s=arcselector9901;\n", + " h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;\n", + " bh=hYDUOsZ8oSqdDjPaR5Xc/ME9UC8/Zi2qVp0/kTJliSw=;\n", + " b=JZR18khJWPFbqxfvnhDfSz6vzkLIVM7g+WZGEqcJXuCxovLzBVdk2SVcaEonPSC5OIgWVMSRDRTbWA1quhM5G1ZajXm5cBNlvHTLl8EiqNwjn9MefAshE6md3MR6r9r7EOfPcnn3R8XMJkwBu6c6RDoTcNKIBW07GaJ2LDup6PZSeTpFSz9nc7MxpyZf2UUtgMfj/sKbCcHkMh+66FhpJMXwTo3PBqJPKBKw8ZGizPykZT7zyqdMnXDuAfx0JXEfqvu5mQ8O4c87jxmoOywcragCJynnAOQnF/Oh99uwkrFNFpZ3JZubcu3uOGkPJAlTBu1TX3SSyBS0+fjfurKuPw==\n", + "ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is\n", + " 165.204.84.17) smtp.rcpttodomain=vger.kernel.org smtp.mailfrom=amd.com;\n", + " dmarc=pass (p=quarantine sp=quarantine pct=100) action=none\n", + " header.from=amd.com; dkim=none (message not signed); arc=none (0)\n", + "DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1;\n", + " h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n", + " bh=hYDUOsZ8oSqdDjPaR5Xc/ME9UC8/Zi2qVp0/kTJliSw=;\n", + " b=tsg2jqS42wTV0w9yTC7xM2MdaeE+6YTCo02pkCeadOlCLdUzOWEv9Cdbny0qli+q9EOFf18R1n+DFSolN88DcIl+p17LPAZCmBMVf83MvzKXZRO89mIaSyNP3VQhPVpOuMmISAhQyrR+6eCZtW27hj4N8M0imnZzJJTqoJlBzo0=\n", + "Received: from SJ0PR03CA0153.namprd03.prod.outlook.com (2603:10b6:a03:338::8)\n", + " by PH0PR12MB8032.namprd12.prod.outlook.com (2603:10b6:510:26f::15) with\n", + " Microsoft SMTP Server (version=TLS1_2,\n", + " cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7409.42; Fri, 29 Mar\n", + " 2024 23:02:52 +0000\n", + "Received: from SJ1PEPF00001CE2.namprd05.prod.outlook.com\n", + " (2603:10b6:a03:338:cafe::d5) by SJ0PR03CA0153.outlook.office365.com\n", + " (2603:10b6:a03:338::8) with Microsoft SMTP Server (version=TLS1_2,\n", + " cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7409.40 via Frontend\n", + " Transport; Fri, 29 Mar 2024 23:02:52 +0000\n", + "X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17)\n", + " smtp.mailfrom=amd.com; dkim=none (message not signed)\n", + " header.d=none;dmarc=pass action=none header.from=amd.com;\n", + "Received-SPF: Pass (protection.outlook.com: domain of amd.com designates\n", + " 165.204.84.17 as permitted sender) receiver=protection.outlook.com;\n", + " client-ip=165.204.84.17; helo=SATLEXMB04.amd.com; pr=C\n", + "Received: from SATLEXMB04.amd.com (165.204.84.17) by\n", + " SJ1PEPF00001CE2.mail.protection.outlook.com (10.167.242.10) with Microsoft\n", + " SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id\n", + " 15.20.7409.10 via Frontend Transport; Fri, 29 Mar 2024 23:02:52 +0000\n", + "Received: from localhost (10.180.168.240) by SATLEXMB04.amd.com\n", + " (10.181.40.145) with Microsoft SMTP Server (version=TLS1_2,\n", + " cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.35; Fri, 29 Mar\n", + " 2024 18:02:51 -0500\n", + "From: Michael Roth <michael.roth\@amd.com>\n", + "To: <kvm\@vger.kernel.org>\n", + "CC: <linux-coco\@lists.linux.dev>, <linux-mm\@kvack.org>,\n", + "\t<linux-crypto\@vger.kernel.org>, <x86\@kernel.org>,\n", + "\t<linux-kernel\@vger.kernel.org>, <tglx\@linutronix.de>, <mingo\@redhat.com>,\n", + "\t<jroedel\@suse.de>, <thomas.lendacky\@amd.com>, <hpa\@zytor.com>,\n", + "\t<ardb\@kernel.org>, <pbonzini\@redhat.com>, <seanjc\@google.com>,\n", + "\t<vkuznets\@redhat.com>, <jmattson\@google.com>, <luto\@kernel.org>,\n", + "\t<dave.hansen\@linux.intel.com>, <slp\@redhat.com>, <pgonda\@google.com>,\n", + "\t<peterz\@infradead.org>, <srinivas.pandruvada\@linux.intel.com>,\n", + "\t<rientjes\@google.com>, <dovmurik\@linux.ibm.com>, <tobin\@ibm.com>,\n", + "\t<bp\@alien8.de>, <vbabka\@suse.cz>, <kirill\@shutemov.name>,\n", + "\t<ak\@linux.intel.com>, <tony.luck\@intel.com>,\n", + "\t<sathyanarayanan.kuppuswamy\@linux.intel.com>, <alpergun\@google.com>,\n", + "\t<jarkko\@kernel.org>, <ashish.kalra\@amd.com>, <nikunj.dadhania\@amd.com>,\n", + "\t<pankaj.gupta\@amd.com>, <liam.merwick\@oracle.com>, Brijesh Singh\n", + "\t<brijesh.singh\@amd.com>\n", + "Subject: [PATCH v12 19/29] KVM: SEV: Support SEV-SNP AP Creation NAE event\n", + "Date: Fri, 29 Mar 2024 17:58:25 -0500\n", + "Message-ID: <20240329225835.400662-20-michael.roth\@amd.com>\n", + "X-Mailer: git-send-email 2.25.1\n", + "In-Reply-To: <20240329225835.400662-1-michael.roth\@amd.com>\n", + "References: <20240329225835.400662-1-michael.roth\@amd.com>\n", + "Precedence: bulk\n", + "X-Mailing-List: linux-kernel\@vger.kernel.org\n", + "List-Id: <linux-kernel.vger.kernel.org>\n", + "List-Subscribe: <mailto:linux-kernel+subscribe\@vger.kernel.org>\n", + "List-Unsubscribe: <mailto:linux-kernel+unsubscribe\@vger.kernel.org>\n", + "MIME-Version: 1.0\n", + "Content-Transfer-Encoding: 8bit\n", + "Content-Type: text/plain\n", + "X-ClientProxiedBy: SATLEXMB03.amd.com (10.181.40.144) To SATLEXMB04.amd.com\n", + " (10.181.40.145)\n", + "X-EOPAttributedMessage: 0\n", + "X-MS-PublicTrafficType: Email\n", + "X-MS-TrafficTypeDiagnostic: SJ1PEPF00001CE2:EE_|PH0PR12MB8032:EE_\n", + "X-MS-Office365-Filtering-Correlation-Id: 551edada-c896-4c34-cb0b-08dc50445cac\n", + "X-MS-Exchange-SenderADCheck: 1\n", + "X-MS-Exchange-AntiSpam-Relay: 0\n", + "X-Microsoft-Antispam: BCL:0;\n", + "X-Microsoft-Antispam-Message-Info: bjuWmA2FmMrZm/Lj19E04lIhHLtbd7tQjfPwsVQo3kXbjdq069bgIoUjxkhgx8Aog4T4A3SqnXW08ioGCt1IlNphfNVzzruiUNNzLQ2rfJL4u7yg38WZSlbesKmiUQF9+h3hAMV3iEaGIMxQLMiF8/pLqaxrl2T3bnXGI1CY0ZQvFM4cb+jZsMMExqzSFSd2yrWlrsz2v7jxs5jn5GlS3RkBz46l3THP9KVizrwjINvqJ+b7q+DryORFCc74jHbXHwevPI9WRn7c2UINnUyX3Tixqx+JC3wZ53Mu2LAnGHcXCDjY2972TsOFRQ4w2Oopu/P7sFSNb82qrAEqvRiK0UgOzYkkclLrdqjoXVXXHse0DMPB7APNjMriX0HkXip3reXUbUs9eYjYKpvLIXvvDBsrodbz+GFat/Lg2ri8HqMnsu1hyGo++bXUr4Srgtv8wS9ymx6EGwKP0SXqxqrwf8sFmyAfI9ZDuoaQkiTL6hra+gLdWzsb+PrYu/GYSlTGCEKCVH9tQ+j5mGyLi48LciiqqIKfQ8gm1SAmZ5uXUVi6sLHDrFfw4Grx8QBURmbKlNX74pmxPa2UEx31cXvdta3+9GihVK3kWW9p18Tfo7ExRMJ+SbP7H7GTGs+FyDi1abkfQ0Bq0woD+mX7w/e9zlIg2s2lsNjktlMkFmns3T+H6j1u+oetS3cP19luVMG3RojbB2cOx7+b47V+AEvF5odxwKPDE6HJK3hneESmFVGYoHX92nA1oPxul0vafabD\n", + "X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:SATLEXMB04.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230031)(1800799015)(7416005)(376005)(82310400014)(36860700004);DIR:OUT;SFP:1101;\n", + "X-MS-Exchange-CrossTenant-OriginalArrivalTime: 29 Mar 2024 23:02:52.1344\n", + " (UTC)\n", + "X-MS-Exchange-CrossTenant-Network-Message-Id: 551edada-c896-4c34-cb0b-08dc50445cac\n", + "X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d\n", + "X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.17];Helo=[SATLEXMB04.amd.com]\n", + "X-MS-Exchange-CrossTenant-AuthSource: SJ1PEPF00001CE2.namprd05.prod.outlook.com\n", + "X-MS-Exchange-CrossTenant-AuthAs: Anonymous\n", + "X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem\n", + "X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH0PR12MB8032\n", + "Return-Path: linux-kernel+bounces-125499-steffen.klassert=secunet.com\@vger.kernel.org\n", + "X-MS-Exchange-Organization-OriginalArrivalTime: 29 Mar 2024 23:03:27.8753\n", + " (UTC)\n", + "X-MS-Exchange-Organization-Network-Message-Id: af780292-29d4-4036-a8a6-08dc504471e7\n", + "X-MS-Exchange-Organization-OriginalClientIPAddress: 62.96.220.37\n", + "X-MS-Exchange-Organization-OriginalServerIPAddress: 10.53.40.202\n", + "X-MS-Exchange-Organization-Cross-Premises-Headers-Processed: cas-essen-02.secunet.de\n", + "X-MS-Exchange-Organization-OrderedPrecisionLatencyInProgress: LSRV=mbx-essen-02.secunet.de:TOTAL-HUB=33337.492|SMR=0.139(SMRDE=0.005|SMRC=0.133(SMRCL=0.103|X-SMRCR=0.133))|CAT=0.095(CATRESL=0.028\n", + " (CATRESLP2R=0.025)|CATORES=0.063(CATRS=0.062(CATRS-Index Routing\n", + " Agent=0.061))|CATORT=0.001\n", + " (CATRT=0.001))|UNK=0.001|QDM=12182.769|SMSC=0.625(X-SMSDR=0.012)|SMS=5.877(SMSMBXD-INC=5.382\n", + " )|UNK=0.001|QDM=20832.499|SMSC=0.010|SMS=1.288(SMSMBXD-INC=1.278)|QDM=309.051|PSC=0.026\n", + " |CAT=0.008(CATRESL=0.006(CATRESLP2R=0.001))|QDM=5.350|UNK=0.001|CAT=0.005(CATRESL=0.004\n", + " (CATRESLP2R=0.002));2024-03-30T08:19:05.383Z\n", + "X-MS-Exchange-Forest-ArrivalHubServer: mbx-essen-02.secunet.de\n", + "X-MS-Exchange-Organization-AuthSource: cas-essen-02.secunet.de\n", + "X-MS-Exchange-Organization-AuthAs: Anonymous\n", + "X-MS-Exchange-Organization-FromEntityHeader: Internet\n", + "X-MS-Exchange-Organization-OriginalSize: 26856\n", + "X-MS-Exchange-Organization-HygienePolicy: Standard\n", + "X-MS-Exchange-Organization-MessageLatency: SRV=cas-essen-02.secunet.de:TOTAL-FE=0.016|SMR=0.010(SMRPI=0.007(SMRPI-FrontendProxyAgent=0.007))|SMS=0.006\n", + "X-MS-Exchange-Organization-Recipient-Limit-Verified: True\n", + "X-MS-Exchange-Organization-TotalRecipientCount: 1\n", + "X-MS-Exchange-Organization-Rules-Execution-History: 0b0cf904-14ac-4724-8bdf-482ee6223cf2%%%fd34672d-751c-45ae-a963-ed177fcabe23%%%d8080257-b0c3-47b4-b0db-23bc0c8ddb3c%%%95e591a2-5d7d-4afa-b1d0-7573d6c0a5d9%%%f7d0f6bc-4dcc-4876-8c5d-b3d6ddbb3d55%%%16355082-c50b-4214-9c7d-d39575f9f79b\n", + "X-MS-Exchange-Forest-RulesExecuted: mbx-essen-02\n", + "X-MS-Exchange-Organization-RulesExecuted: mbx-essen-02\n", + "X-MS-Exchange-Forest-IndexAgent-0: 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\n", + " E/UxF83oUnPQHTDsUBfNrNW1TXN7p7C1hdd/4WmjulZb3aqcb4+9aM\n", + " Zgwi6acS9d9l3b2abbvvh3R7v6wnTzHkSFUIzK2nTgRKZONz6ksx2r\n", + " YlR63YYskHo6L+0uuAnfCK8geiAHFabGnHdpoZeaRaMx8nA7tT7UH8\n", + " +aSKf1nbUtUvyddQhJCn5CoQ2ROk+1ZLwdAAp7NQOglUgy+DKwa48D\n", + " mXJFwxBkUPxhpnkJyIcO8oaK2pogXEa74xBq6tkgnlTNHsZWmt7kWm\n", + " aTFPfZWWn/OVb+yrsHxSxukwm9sYN3H9d3wMJuaXT+1OVoN3iSyyGe\n", + " 4b5n/YM6/Z4+Bl6HhiiawLgBqVQjjF72jB7Q0DN+0KylYgEzAhid1S\n", + " U1Jw8YrfcVq4OhH7rQptmRU0N69T1h2oChvSzPyom+1uwkxqweZmfc\n", + " W+bblYq1tpbfOF/frORyq5Vqpbq6tbFTs1YnMWbDN8x9vXS7PE+/XM\n", + " A/+VXNN7Orl56d/IYmIGS9OGI1jVrXsjzWAF0AX4CUv/rkdMF3TszL\n", + " UDAivLHJU3kJh36+xi5IQLIj73nIo1tHla5ynkISeyK9QuE/S/QcUJ\n", + " C1YOT9Ic6vTJ+twjrSZ6uwzRGlSqpwGAVZKggCIcA20qZHDp2LuYOr\n", + " 8B8lBK9UZ5A8+MC+8tGl2aCx1nugVMt7HNo03xMPTIfORH9Px/z06j\n", + " GTZ8onXZjAPXxjNRxLT57p0uMnRoS6UEqXoM15+eLI+Ll4XC7uG7t7\n", + " e4dnZfzxi2Fg81+Lx4dLMnXeWiN3vrW+ziz2YjYxw8Wvgysr6IJC4I\n", + " yThQGY5WL5TemQYanr5LpEiNWhRX5HARG/fpzXrjB4wU8mMCNBfJIA\n", + " EUQSohbY1/AfkQ1+snYe0KjMa217Y2tt43yzsLZRzeU281uVte3Njc\n", + " 2tja1R5lWCCDCtsodixNUdviHND/oPd0gSiIAWHoN6M6yhaCT4jj0O\n", + " q9StytuwTAMP3p6Xjk//YuwfvnxZKr+UWcaIq/fyZ0UVUKCMihikPy\n", + " Q5x8taEARcXNj4C6wxdcOxCI5KhUbWW95642sWYzxlHlVdQZSCcqH7\n", + " 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\n", + " E8JfqYdZNqFxYtC8NCZ3VO9cTLXDlKnB9Nmg0PRBIDcJPXiIK24uBa\n", + " 0oKLq4T88rwOVU5BbbpS8HKQyz404cndTdWTaPnhzncw7vb6jCkeub\n", + " hkT36zDBS2ERIOGiGjL9Sw3bPbY5MarecDYqd4dA7umxcWqQ2iM1Zj\n", + " G5+ILFb0bZZIAA4kQ5l0vYe8r4J10Ws2dROIOofO5WVNhNs+VJSZMy\n", + " vIWYsjA617JcqCGY6ZjX3UypAh2HCpMRJztazkMg3HLDV0167yVQW+\n", + " 8FMo7C8lndYqTQKQMaQBYILa5NcRyiQpcURQXDBUllPTAsV896LDHD\n", + " Yj8lCywZH8AFyeUZFw47RBkzyMavXF8zxkSQhXf9zteEqgrmA1xPHH\n", + " N2WdtRYgyWZD4stWGwNxRYrye6w7qjEoq4a2n1UEfJ2D3W6GlUxhmq\n", + " Oia0HCE48WEnqDtTik7hFaOaOyq1iQ+kYsobZbEL+HKiwcTE26p0kI\n", + " isKA8ykDS2M6CSGEAOZOxb4CY1+kRUenNvC2S+08PUpt4Er7Ko8OQg\n", + " ROPgtUEdRgFf1OvDgxy5oD9zDkvDbo4LtOROv1JJgRvEejGRgej1Qd\n", + " wLvmxuRIIcV6xURYyEPyvEKGuWV7+pChe+8DIsetQzjjC1jaMvGKGn\n", + " YmRGIPPiW5zM0upe3JJadsbVNqbzzaEsLPVvK7CEiZlb2VDRvn8vLE\n", + " tpkgcWMzypkSmDdPfXpHfmRjKecsrdwEyBk/QZ6fVuTLlLBFUSfGLz\n", + " hWQ3G64AyYmjXnDvgru7MCnSuyAF4DKR+yqjvoHKxLVnkAQMLTgOTE\n", + " UXRlB4DBBJipRm/K/rkb9S8wUVWc1y0IImFMIelChAeF5D/rbbqG3w\n", + " Lp8mUOA3w5RMytcbmjNKu2aWX/9tIhpamFWuKiZ1cJFlck6edi1yIn\n", + " OTuBajzCtBdFMinXZjeBigoqAbAyUdUPhaXFkVGr84MHTRdEhxPuEG\n", + " yXpW7uZ0U1oFzFse4QLLdNI93xnMmv5UCzMzUtpnJsvckeNJ9W+crS\n", + " Zqu9UqNzyIptN8ZBadDaNbUisPhlMvqaoTqaS3nBhETKzeuxV4CUR5\n", + " W7WdTyPsrD49hLyeMeOIfC0RUl0fVquxOjWsUKBNOJJJF53iZ71AzS\n", + " FBEGKfswNdJOKwAxXKgcZk4wxW7WR0mggZ8MUwnCBH/EB3PYSAmGJM\n", + " vN5Z87/LUXk68C1tuTS8kIoK6IDbNbbR2WGa6KKoMzemBEZ3LsOhhT\n", + " LjYHXvEoTFycIPHnyDB99TckI+6w5vlvlIufDtGB0WJNTZKDZG53kX\n", + " dKwZw+f/AyxJRVqWZQAAAQq9BDw/eG1sIHZlcnNpb249IjEuMCIgZW\n", + " 5jb2Rpbmc9InV0Zi0xNiI/Pg0KPEVtYWlsU2V0Pg0KICA8VmVyc2lv\n", + " bj4xNS4wLjAuMDwvVmVyc2lvbj4NCiAgPEVtYWlscz4NCiAgICA8RW\n", + " 1haWwgU3RhcnRJbmRleD0iMjAiPg0KICAgICAgPEVtYWlsU3RyaW5n\n", + " PnRob21hcy5sZW5kYWNreUBhbWQuY29tPC9FbWFpbFN0cmluZz4NCi\n", + " AgICA8L0VtYWlsPg0KICAgIDxFbWFpbCBTdGFydEluZGV4PSIxNTgw\n", + " IiBQb3NpdGlvbj0iT3RoZXIiPg0KICAgICAgPEVtYWlsU3RyaW5nPm\n", + " JyaWplc2guc2luZ2hAYW1kLmNvbTwvRW1haWxTdHJpbmc+DQogICAg\n", + " PC9FbWFpbD4NCiAgICA8RW1haWwgU3RhcnRJbmRleD0iMTYzMyIgUG\n", + " 9zaXRpb249Ik90aGVyIj4NCiAgICAgIDxFbWFpbFN0cmluZz5hc2hp\n", + " c2gua2FscmFAYW1kLmNvbTwvRW1haWxTdHJpbmc+DQogICAgPC9FbW\n", + " FpbD4NCiAgICA8RW1haWwgU3RhcnRJbmRleD0iMTg0MCIgUG9zaXRp\n", + " b249Ik90aGVyIj4NCiAgICAgIDxFbWFpbFN0cmluZz5taWNoYWVsLn\n", + " JvdGhAYW1kLmNvbTwvRW1haWxTdHJpbmc+DQogICAgPC9FbWFpbD4N\n", + " CiAgPC9FbWFpbHM+DQo8L0VtYWlsU2V0PgEL2wE8P3htbCB2ZXJzaW\n", + " 9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtMTYiPz4NCjxVcmxTZXQ+DQog\n", + " IDxWZXJzaW9uPjE1LjAuMC4wPC9WZXJzaW9uPg0KICA8VXJscz4NCi\n", + " AgICA8VXJsIFN0YXJ0SW5kZXg9IjE3ODQiIFBvc2l0aW9uPSJPdGhl\n", + " ciIgVHlwZT0iVXJsIj4NCiAgICAgIDxVcmxTdHJpbmc+YXJjaC5tcD\n", + " wvVXJsU3RyaW5nPg0KICAgIDwvVXJsPg0KICA8L1VybHM+DQo8L1Vy\n", + " bFNldD4BDtABUmV0cmlldmVyT3BlcmF0b3IsMTAsMTtSZXRyaWV2ZX\n", + " JPcGVyYXRvciwxMSw0O1Bvc3REb2NQYXJzZXJPcGVyYXRvciwxMCwx\n", + " O1Bvc3REb2NQYXJzZXJPcGVyYXRvciwxMSwwO1Bvc3RXb3JkQnJlYW\n", + " tlckRpYWdub3N0aWNPcGVyYXRvciwxMCwxMTtQb3N0V29yZEJyZWFr\n", + " ZXJEaWFnbm9zdGljT3BlcmF0b3IsMTEsMDtUcmFuc3BvcnRXcml0ZX JQcm9kdWNlciwyMCwyOQ==\n", + "X-MS-Exchange-Forest-IndexAgent: 1 8479\n", + "X-MS-Exchange-Forest-EmailMessageHash: F69556A6\n", + "X-MS-Exchange-Forest-Language: en\n", + "X-MS-Exchange-Organization-Processed-By-Journaling: Journal Agent\n", + "X-MS-Exchange-Organization-Transport-Properties: DeliveryPriority=Low\n", + "X-MS-Exchange-Organization-Prioritization: 2:RC:REDACTED-af51df60fd698f80b064826f9ee192ca\@secunet.com:91/10|SR\n", + "X-MS-Exchange-Organization-IncludeInSla: False:RecipientCountThresholdExceeded\n", + "\n", + "From: Tom Lendacky <thomas.lendacky\@amd.com>\n", + "\n", + "Add support for the SEV-SNP AP Creation NAE event. This allows SEV-SNP\n", + "guests to alter the register state of the APs on their own. This allows\n", + "the guest a way of simulating INIT-SIPI.\n", + "\n", + "A new event, KVM_REQ_UPDATE_PROTECTED_GUEST_STATE, is created and used\n", + "so as to avoid updating the VMSA pointer while the vCPU is running.\n", + "\n", + "For CREATE\n", + " The guest supplies the GPA of the VMSA to be used for the vCPU with\n", + " the specified APIC ID. The GPA is saved in the svm struct of the\n", + " target vCPU, the KVM_REQ_UPDATE_PROTECTED_GUEST_STATE event is added\n", + " to the vCPU and then the vCPU is kicked.\n", + "\n", + "For CREATE_ON_INIT:\n", + " The guest supplies the GPA of the VMSA to be used for the vCPU with\n", + " the specified APIC ID the next time an INIT is performed. The GPA is\n", + " saved in the svm struct of the target vCPU.\n", + "\n", + "For DESTROY:\n", + " The guest indicates it wishes to stop the vCPU. The GPA is cleared\n", + " from the svm struct, the KVM_REQ_UPDATE_PROTECTED_GUEST_STATE event is\n", + " added to vCPU and then the vCPU is kicked.\n", + "\n", + "The KVM_REQ_UPDATE_PROTECTED_GUEST_STATE event handler will be invoked\n", + "as a result of the event or as a result of an INIT. If a new VMSA is to\n", + "be installed, the VMSA guest page is set as the VMSA in the vCPU VMCB\n", + "and the vCPU state is set to KVM_MP_STATE_RUNNABLE. If a new VMSA is not\n", + "to be installed, the VMSA is cleared in the vCPU VMCB and the vCPU state\n", + "is set to KVM_MP_STATE_HALTED to prevent it from being run.\n", + "\n", + "Signed-off-by: Tom Lendacky <thomas.lendacky\@amd.com>\n", + "Signed-off-by: Brijesh Singh <brijesh.singh\@amd.com>\n", + "Signed-off-by: Ashish Kalra <ashish.kalra\@amd.com>\n", + "[mdr: add handling for gmem, move MP_STATE_UNINITIALIZED -> RUNNABLE\n", + " transition to target vCPU side rather than setting vcpu->arch.mp_state\n", + " remotely]\n", + "Signed-off-by: Michael Roth <michael.roth\@amd.com>\n", + "---\n", + " arch/x86/include/asm/kvm_host.h | 1 +\n", + " arch/x86/include/asm/svm.h | 6 +\n", + " arch/x86/kvm/svm/sev.c | 217 +++++++++++++++++++++++++++++++-\n", + " arch/x86/kvm/svm/svm.c | 11 +-\n", + " arch/x86/kvm/svm/svm.h | 8 ++\n", + " arch/x86/kvm/x86.c | 11 ++\n", + " 6 files changed, 252 insertions(+), 2 deletions(-)\n", + "\n", + "diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h\n", + "index 49b294a8d917..0fdacacd6e8e 100644\n", + "--- a/arch/x86/include/asm/kvm_host.h\n", + "+++ b/arch/x86/include/asm/kvm_host.h\n", + "\@\@ -121,6 +121,7 \@\@\n", + " \tKVM_ARCH_REQ_FLAGS(31, KVM_REQUEST_WAIT | KVM_REQUEST_NO_WAKEUP)\n", + " #define KVM_REQ_HV_TLB_FLUSH \\\n", + " \tKVM_ARCH_REQ_FLAGS(32, KVM_REQUEST_WAIT | KVM_REQUEST_NO_WAKEUP)\n", + "+#define KVM_REQ_UPDATE_PROTECTED_GUEST_STATE\tKVM_ARCH_REQ(34)\n", + " \n", + " #define CR0_RESERVED_BITS \\\n", + " \t(~(unsigned long)(X86_CR0_PE | X86_CR0_MP | X86_CR0_EM | X86_CR0_TS \\\n", + "diff --git a/arch/x86/include/asm/svm.h b/arch/x86/include/asm/svm.h\n", + "index 544a43c1cf11..f0dea3750ca9 100644\n", + "--- a/arch/x86/include/asm/svm.h\n", + "+++ b/arch/x86/include/asm/svm.h\n", + "\@\@ -286,8 +286,14 \@\@ static_assert((X2AVIC_MAX_PHYSICAL_ID & AVIC_PHYSICAL_MAX_INDEX_MASK) == X2AVIC_\n", + " #define AVIC_HPA_MASK\t~((0xFFFULL << 52) | 0xFFF)\n", + " \n", + " #define SVM_SEV_FEAT_SNP_ACTIVE\t\t\t\tBIT(0)\n", + "+#define SVM_SEV_FEAT_RESTRICTED_INJECTION\t\tBIT(3)\n", + "+#define SVM_SEV_FEAT_ALTERNATE_INJECTION\t\tBIT(4)\n", + " #define SVM_SEV_FEAT_DEBUG_SWAP\t\t\t\tBIT(5)\n", + " \n", + "+#define SVM_SEV_FEAT_INT_INJ_MODES\t\t\\\n", + "+\t(SVM_SEV_FEAT_RESTRICTED_INJECTION |\t\\\n", + "+\t SVM_SEV_FEAT_ALTERNATE_INJECTION)\n", + "+\n", + " struct vmcb_seg {\n", + " \tu16 selector;\n", + " \tu16 attrib;\n", + "diff --git a/arch/x86/kvm/svm/sev.c b/arch/x86/kvm/svm/sev.c\n", + "index ce1c727bad23..7dfbf12b454b 100644\n", + "--- a/arch/x86/kvm/svm/sev.c\n", + "+++ b/arch/x86/kvm/svm/sev.c\n", + "\@\@ -37,7 +37,7 \@\@\n", + " #define GHCB_VERSION_MAX\t2ULL\n", + " #define GHCB_VERSION_MIN\t1ULL\n", + " \n", + "-#define GHCB_HV_FT_SUPPORTED\tGHCB_HV_FT_SNP\n", + "+#define GHCB_HV_FT_SUPPORTED\t(GHCB_HV_FT_SNP | GHCB_HV_FT_SNP_AP_CREATION)\n", + " \n", + " /* enable/disable SEV support */\n", + " static bool sev_enabled = true;\n", + "\@\@ -3203,6 +3203,11 \@\@ static int sev_es_validate_vmgexit(struct vcpu_svm *svm)\n", + " \t\tif (!kvm_ghcb_sw_scratch_is_valid(svm))\n", + " \t\t\tgoto vmgexit_err;\n", + " \t\tbreak;\n", + "+\tcase SVM_VMGEXIT_AP_CREATION:\n", + "+\t\tif (lower_32_bits(control->exit_info_1) != SVM_VMGEXIT_AP_DESTROY)\n", + "+\t\t\tif (!kvm_ghcb_rax_is_valid(svm))\n", + "+\t\t\t\tgoto vmgexit_err;\n", + "+\t\tbreak;\n", + " \tcase SVM_VMGEXIT_NMI_COMPLETE:\n", + " \tcase SVM_VMGEXIT_AP_HLT_LOOP:\n", + " \tcase SVM_VMGEXIT_AP_JUMP_TABLE:\n", + "\@\@ -3443,6 +3448,195 \@\@ static int snp_complete_psc(struct kvm_vcpu *vcpu)\n", + " \treturn 1; /* resume guest */\n", + " }\n", + " \n", + "+static int __sev_snp_update_protected_guest_state(struct kvm_vcpu *vcpu)\n", + "+{\n", + "+\tstruct vcpu_svm *svm = to_svm(vcpu);\n", + "+\n", + "+\tWARN_ON(!mutex_is_locked(&svm->sev_es.snp_vmsa_mutex));\n", + "+\n", + "+\t/* Mark the vCPU as offline and not runnable */\n", + "+\tvcpu->arch.pv.pv_unhalted = false;\n", + "+\tvcpu->arch.mp_state = KVM_MP_STATE_HALTED;\n", + "+\n", + "+\t/* Clear use of the VMSA */\n", + "+\tsvm->sev_es.vmsa_pa = INVALID_PAGE;\n", + "+\tsvm->vmcb->control.vmsa_pa = INVALID_PAGE;\n", + "+\n", + "+\tif (VALID_PAGE(svm->sev_es.snp_vmsa_gpa)) {\n", + "+\t\tgfn_t gfn = gpa_to_gfn(svm->sev_es.snp_vmsa_gpa);\n", + "+\t\tstruct kvm_memory_slot *slot;\n", + "+\t\tkvm_pfn_t pfn;\n", + "+\n", + "+\t\tslot = gfn_to_memslot(vcpu->kvm, gfn);\n", + "+\t\tif (!slot)\n", + "+\t\t\treturn -EINVAL;\n", + "+\n", + "+\t\t/*\n", + "+\t\t * The new VMSA will be private memory guest memory, so\n", + "+\t\t * retrieve the PFN from the gmem backend.\n", + "+\t\t */\n", + "+\t\tif (kvm_gmem_get_pfn(vcpu->kvm, slot, gfn, &pfn, NULL))\n", + "+\t\t\treturn -EINVAL;\n", + "+\n", + "+\t\t/* Use the new VMSA */\n", + "+\t\tsvm->sev_es.vmsa_pa = pfn_to_hpa(pfn);\n", + "+\t\tsvm->vmcb->control.vmsa_pa = svm->sev_es.vmsa_pa;\n", + "+\n", + "+\t\t/* Mark the vCPU as runnable */\n", + "+\t\tvcpu->arch.pv.pv_unhalted = false;\n", + "+\t\tvcpu->arch.mp_state = KVM_MP_STATE_RUNNABLE;\n", + "+\n", + "+\t\tsvm->sev_es.snp_vmsa_gpa = INVALID_PAGE;\n", + "+\n", + "+\t\t/*\n", + "+\t\t * gmem pages aren't currently migratable, but if this ever\n", + "+\t\t * changes then care should be taken to ensure\n", + "+\t\t * svm->sev_es.vmsa_pa is pinned through some other means.\n", + "+\t\t */\n", + "+\t\tkvm_release_pfn_clean(pfn);\n", + "+\t}\n", + "+\n", + "+\t/*\n", + "+\t * When replacing the VMSA during SEV-SNP AP creation,\n", + "+\t * mark the VMCB dirty so that full state is always reloaded.\n", + "+\t */\n", + "+\tvmcb_mark_all_dirty(svm->vmcb);\n", + "+\n", + "+\treturn 0;\n", + "+}\n", + "+\n", + "+/*\n", + "+ * Invoked as part of svm_vcpu_reset() processing of an init event.\n", + "+ */\n", + "+void sev_snp_init_protected_guest_state(struct kvm_vcpu *vcpu)\n", + "+{\n", + "+\tstruct vcpu_svm *svm = to_svm(vcpu);\n", + "+\tint ret;\n", + "+\n", + "+\tif (!sev_snp_guest(vcpu->kvm))\n", + "+\t\treturn;\n", + "+\n", + "+\tmutex_lock(&svm->sev_es.snp_vmsa_mutex);\n", + "+\n", + "+\tif (!svm->sev_es.snp_ap_create)\n", + "+\t\tgoto unlock;\n", + "+\n", + "+\tsvm->sev_es.snp_ap_create = false;\n", + "+\n", + "+\tret = __sev_snp_update_protected_guest_state(vcpu);\n", + "+\tif (ret)\n", + "+\t\tvcpu_unimpl(vcpu, \"snp: AP state update on init failed\\n\");\n", + "+\n", + "+unlock:\n", + "+\tmutex_unlock(&svm->sev_es.snp_vmsa_mutex);\n", + "+}\n", + "+\n", + "+static int sev_snp_ap_creation(struct vcpu_svm *svm)\n", + "+{\n", + "+\tstruct kvm_sev_info *sev = &to_kvm_svm(svm->vcpu.kvm)->sev_info;\n", + "+\tstruct kvm_vcpu *vcpu = &svm->vcpu;\n", + "+\tstruct kvm_vcpu *target_vcpu;\n", + "+\tstruct vcpu_svm *target_svm;\n", + "+\tunsigned int request;\n", + "+\tunsigned int apic_id;\n", + "+\tbool kick;\n", + "+\tint ret;\n", + "+\n", + "+\trequest = lower_32_bits(svm->vmcb->control.exit_info_1);\n", + "+\tapic_id = upper_32_bits(svm->vmcb->control.exit_info_1);\n", + "+\n", + "+\t/* Validate the APIC ID */\n", + "+\ttarget_vcpu = kvm_get_vcpu_by_id(vcpu->kvm, apic_id);\n", + "+\tif (!target_vcpu) {\n", + "+\t\tvcpu_unimpl(vcpu, \"vmgexit: invalid AP APIC ID [%#x] from guest\\n\",\n", + "+\t\t\t apic_id);\n", + "+\t\treturn -EINVAL;\n", + "+\t}\n", + "+\n", + "+\tret = 0;\n", + "+\n", + "+\ttarget_svm = to_svm(target_vcpu);\n", + "+\n", + "+\t/*\n", + "+\t * The target vCPU is valid, so the vCPU will be kicked unless the\n", + "+\t * request is for CREATE_ON_INIT. For any errors at this stage, the\n", + "+\t * kick will place the vCPU in an non-runnable state.\n", + "+\t */\n", + "+\tkick = true;\n", + "+\n", + "+\tmutex_lock(&target_svm->sev_es.snp_vmsa_mutex);\n", + "+\n", + "+\ttarget_svm->sev_es.snp_vmsa_gpa = INVALID_PAGE;\n", + "+\ttarget_svm->sev_es.snp_ap_create = true;\n", + "+\n", + "+\t/* Interrupt injection mode shouldn't change for AP creation */\n", + "+\tif (request < SVM_VMGEXIT_AP_DESTROY) {\n", + "+\t\tu64 sev_features;\n", + "+\n", + "+\t\tsev_features = vcpu->arch.regs[VCPU_REGS_RAX];\n", + "+\t\tsev_features ^= sev->vmsa_features;\n", + "+\n", + "+\t\tif (sev_features & SVM_SEV_FEAT_INT_INJ_MODES) {\n", + "+\t\t\tvcpu_unimpl(vcpu, \"vmgexit: invalid AP injection mode [%#lx] from guest\\n\",\n", + "+\t\t\t\t vcpu->arch.regs[VCPU_REGS_RAX]);\n", + "+\t\t\tret = -EINVAL;\n", + "+\t\t\tgoto out;\n", + "+\t\t}\n", + "+\t}\n", + "+\n", + "+\tswitch (request) {\n", + "+\tcase SVM_VMGEXIT_AP_CREATE_ON_INIT:\n", + "+\t\tkick = false;\n", + "+\t\tfallthrough;\n", + "+\tcase SVM_VMGEXIT_AP_CREATE:\n", + "+\t\tif (!page_address_valid(vcpu, svm->vmcb->control.exit_info_2)) {\n", + "+\t\t\tvcpu_unimpl(vcpu, \"vmgexit: invalid AP VMSA address [%#llx] from guest\\n\",\n", + "+\t\t\t\t svm->vmcb->control.exit_info_2);\n", + "+\t\t\tret = -EINVAL;\n", + "+\t\t\tgoto out;\n", + "+\t\t}\n", + "+\n", + "+\t\t/*\n", + "+\t\t * Malicious guest can RMPADJUST a large page into VMSA which\n", + "+\t\t * will hit the SNP erratum where the CPU will incorrectly signal\n", + "+\t\t * an RMP violation #PF if a hugepage collides with the RMP entry\n", + "+\t\t * of VMSA page, reject the AP CREATE request if VMSA address from\n", + "+\t\t * guest is 2M aligned.\n", + "+\t\t */\n", + "+\t\tif (IS_ALIGNED(svm->vmcb->control.exit_info_2, PMD_SIZE)) {\n", + "+\t\t\tvcpu_unimpl(vcpu,\n", + "+\t\t\t\t \"vmgexit: AP VMSA address [%llx] from guest is unsafe as it is 2M aligned\\n\",\n", + "+\t\t\t\t svm->vmcb->control.exit_info_2);\n", + "+\t\t\tret = -EINVAL;\n", + "+\t\t\tgoto out;\n", + "+\t\t}\n", + "+\n", + "+\t\ttarget_svm->sev_es.snp_vmsa_gpa = svm->vmcb->control.exit_info_2;\n", + "+\t\tbreak;\n", + "+\tcase SVM_VMGEXIT_AP_DESTROY:\n", + "+\t\tbreak;\n", + "+\tdefault:\n", + "+\t\tvcpu_unimpl(vcpu, \"vmgexit: invalid AP creation request [%#x] from guest\\n\",\n", + "+\t\t\t request);\n", + "+\t\tret = -EINVAL;\n", + "+\t\tbreak;\n", + "+\t}\n", + "+\n", + "+out:\n", + "+\tif (kick) {\n", + "+\t\tkvm_make_request(KVM_REQ_UPDATE_PROTECTED_GUEST_STATE, target_vcpu);\n", + "+\n", + "+\t\tif (target_vcpu->arch.mp_state == KVM_MP_STATE_UNINITIALIZED)\n", + "+\t\t\tkvm_make_request(KVM_REQ_UNBLOCK, target_vcpu);\n", + "+\n", + "+\t\tkvm_vcpu_kick(target_vcpu);\n", + "+\t}\n", + "+\n", + "+\tmutex_unlock(&target_svm->sev_es.snp_vmsa_mutex);\n", + "+\n", + "+\treturn ret;\n", + "+}\n", + "+\n", + " static int sev_handle_vmgexit_msr_protocol(struct vcpu_svm *svm)\n", + " {\n", + " \tstruct vmcb_control_area *control = &svm->vmcb->control;\n", + "\@\@ -3686,6 +3880,15 \@\@ int sev_handle_vmgexit(struct kvm_vcpu *vcpu)\n", + " \t\tvcpu->run->vmgexit.psc.shared_gpa = svm->sev_es.sw_scratch;\n", + " \t\tvcpu->arch.complete_userspace_io = snp_complete_psc;\n", + " \t\tbreak;\n", + "+\tcase SVM_VMGEXIT_AP_CREATION:\n", + "+\t\tret = sev_snp_ap_creation(svm);\n", + "+\t\tif (ret) {\n", + "+\t\t\tghcb_set_sw_exit_info_1(svm->sev_es.ghcb, 2);\n", + "+\t\t\tghcb_set_sw_exit_info_2(svm->sev_es.ghcb, GHCB_ERR_INVALID_INPUT);\n", + "+\t\t}\n", + "+\n", + "+\t\tret = 1;\n", + "+\t\tbreak;\n", + " \tcase SVM_VMGEXIT_UNSUPPORTED_EVENT:\n", + " \t\tvcpu_unimpl(vcpu,\n", + " \t\t\t \"vmgexit: unsupported event - exit_info_1=%#llx, exit_info_2=%#llx\\n\",\n", + "\@\@ -3852,6 +4055,8 \@\@ void sev_es_vcpu_reset(struct vcpu_svm *svm)\n", + " \tset_ghcb_msr(svm, GHCB_MSR_SEV_INFO(GHCB_VERSION_MAX,\n", + " \t\t\t\t\t GHCB_VERSION_MIN,\n", + " \t\t\t\t\t sev_enc_bit));\n", + "+\n", + "+\tmutex_init(&svm->sev_es.snp_vmsa_mutex);\n", + " }\n", + " \n", + " void sev_es_prepare_switch_to_guest(struct vcpu_svm *svm, struct sev_es_save_area *hostsa)\n", + "\@\@ -3963,6 +4168,16 \@\@ struct page *snp_safe_alloc_page(struct kvm_vcpu *vcpu)\n", + " \treturn p;\n", + " }\n", + " \n", + "+void sev_vcpu_unblocking(struct kvm_vcpu *vcpu)\n", + "+{\n", + "+\tif (!sev_snp_guest(vcpu->kvm))\n", + "+\t\treturn;\n", + "+\n", + "+\tif (kvm_test_request(KVM_REQ_UPDATE_PROTECTED_GUEST_STATE, vcpu) &&\n", + "+\t vcpu->arch.mp_state == KVM_MP_STATE_UNINITIALIZED)\n", + "+\t\tvcpu->arch.mp_state = KVM_MP_STATE_RUNNABLE;\n", + "+}\n", + "+\n", + " void sev_handle_rmp_fault(struct kvm_vcpu *vcpu, gpa_t gpa, u64 error_code)\n", + " {\n", + " \tstruct kvm_memory_slot *slot;\n", + "diff --git a/arch/x86/kvm/svm/svm.c b/arch/x86/kvm/svm/svm.c\n", + "index e036a8927717..a895d3f07cb8 100644\n", + "--- a/arch/x86/kvm/svm/svm.c\n", + "+++ b/arch/x86/kvm/svm/svm.c\n", + "\@\@ -1398,6 +1398,9 \@\@ static void svm_vcpu_reset(struct kvm_vcpu *vcpu, bool init_event)\n", + " \tsvm->spec_ctrl = 0;\n", + " \tsvm->virt_spec_ctrl = 0;\n", + " \n", + "+\tif (init_event)\n", + "+\t\tsev_snp_init_protected_guest_state(vcpu);\n", + "+\n", + " \tinit_vmcb(vcpu);\n", + " \n", + " \tif (!init_event)\n", + "\@\@ -4937,6 +4940,12 \@\@ static void *svm_alloc_apic_backing_page(struct kvm_vcpu *vcpu)\n", + " \treturn page_address(page);\n", + " }\n", + " \n", + "+static void svm_vcpu_unblocking(struct kvm_vcpu *vcpu)\n", + "+{\n", + "+\tsev_vcpu_unblocking(vcpu);\n", + "+\tavic_vcpu_unblocking(vcpu);\n", + "+}\n", + "+\n", + " static struct kvm_x86_ops svm_x86_ops __initdata = {\n", + " \t.name = KBUILD_MODNAME,\n", + " \n", + "\@\@ -4959,7 +4968,7 \@\@ static struct kvm_x86_ops svm_x86_ops __initdata = {\n", + " \t.vcpu_load = svm_vcpu_load,\n", + " \t.vcpu_put = svm_vcpu_put,\n", + " \t.vcpu_blocking = avic_vcpu_blocking,\n", + "-\t.vcpu_unblocking = avic_vcpu_unblocking,\n", + "+\t.vcpu_unblocking = svm_vcpu_unblocking,\n", + " \n", + " \t.update_exception_bitmap = svm_update_exception_bitmap,\n", + " \t.get_msr_feature = svm_get_msr_feature,\n", + "diff --git a/arch/x86/kvm/svm/svm.h b/arch/x86/kvm/svm/svm.h\n", + "index 8cce3315b46c..0cdcd0759fe0 100644\n", + "--- a/arch/x86/kvm/svm/svm.h\n", + "+++ b/arch/x86/kvm/svm/svm.h\n", + "\@\@ -211,6 +211,10 \@\@ struct vcpu_sev_es_state {\n", + " \tbool ghcb_sa_free;\n", + " \n", + " \tu64 ghcb_registered_gpa;\n", + "+\n", + "+\tstruct mutex snp_vmsa_mutex; /* Used to handle concurrent updates of VMSA. */\n", + "+\tgpa_t snp_vmsa_gpa;\n", + "+\tbool snp_ap_create;\n", + " };\n", + " \n", + " struct vcpu_svm {\n", + "\@\@ -724,6 +728,8 \@\@ int sev_cpu_init(struct svm_cpu_data *sd);\n", + " int sev_dev_get_attr(u64 attr, u64 *val);\n", + " extern unsigned int max_sev_asid;\n", + " void sev_handle_rmp_fault(struct kvm_vcpu *vcpu, gpa_t gpa, u64 error_code);\n", + "+void sev_vcpu_unblocking(struct kvm_vcpu *vcpu);\n", + "+void sev_snp_init_protected_guest_state(struct kvm_vcpu *vcpu);\n", + " #else\n", + " static inline struct page *snp_safe_alloc_page(struct kvm_vcpu *vcpu) {\n", + " \treturn alloc_page(GFP_KERNEL_ACCOUNT | __GFP_ZERO);\n", + "\@\@ -738,6 +744,8 \@\@ static inline int sev_cpu_init(struct svm_cpu_data *sd) { return 0; }\n", + " static inline int sev_dev_get_attr(u64 attr, u64 *val) { return -ENXIO; }\n", + " #define max_sev_asid 0\n", + " static inline void sev_handle_rmp_fault(struct kvm_vcpu *vcpu, gpa_t gpa, u64 error_code) {}\n", + "+static inline void sev_vcpu_unblocking(struct kvm_vcpu *vcpu) {}\n", + "+static inline void sev_snp_init_protected_guest_state(struct kvm_vcpu *vcpu) {}\n", + " \n", + " #endif\n", + " \n", + "diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c\n", + "index f85735b6235d..617c38656757 100644\n", + "--- a/arch/x86/kvm/x86.c\n", + "+++ b/arch/x86/kvm/x86.c\n", + "\@\@ -10943,6 +10943,14 \@\@ static int vcpu_enter_guest(struct kvm_vcpu *vcpu)\n", + " \n", + " \t\tif (kvm_check_request(KVM_REQ_UPDATE_CPU_DIRTY_LOGGING, vcpu))\n", + " \t\t\tstatic_call(kvm_x86_update_cpu_dirty_logging)(vcpu);\n", + "+\n", + "+\t\tif (kvm_check_request(KVM_REQ_UPDATE_PROTECTED_GUEST_STATE, vcpu)) {\n", + "+\t\t\tkvm_vcpu_reset(vcpu, true);\n", + "+\t\t\tif (vcpu->arch.mp_state != KVM_MP_STATE_RUNNABLE) {\n", + "+\t\t\t\tr = 1;\n", + "+\t\t\t\tgoto out;\n", + "+\t\t\t}\n", + "+\t\t}\n", + " \t}\n", + " \n", + " \tif (kvm_check_request(KVM_REQ_EVENT, vcpu) || req_int_win ||\n", + "\@\@ -13150,6 +13158,9 \@\@ static inline bool kvm_vcpu_has_events(struct kvm_vcpu *vcpu)\n", + " \tif (kvm_test_request(KVM_REQ_PMI, vcpu))\n", + " \t\treturn true;\n", + " \n", + "+\tif (kvm_test_request(KVM_REQ_UPDATE_PROTECTED_GUEST_STATE, vcpu))\n", + "+\t\treturn true;\n", + "+\n", + " \tif (kvm_arch_interrupt_allowed(vcpu) &&\n", + " \t (kvm_cpu_has_interrupt(vcpu) ||\n", + " \t kvm_guest_apic_has_interrupt(vcpu)))\n", + "-- \n", "2.25.1" ] -6ce9d34387543159aa200d80c6a4e01b4b165e7c5fb714c636fd3912f6b33e93 +acf89d237f354e139222d2eb6d6ea421fce33dfae37fd66ae22a8aa9afa9b713
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.