All the mail mirrored from lore.kernel.org
 help / color / mirror / Atom feed
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",
+  " 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.