From nobody Fri Apr 3 04:37:58 2026 Received: from CO1PR03CU002.outbound.protection.outlook.com (mail-westus2azon11010019.outbound.protection.outlook.com [52.101.46.19]) (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 2CD5E2C3255; Tue, 17 Feb 2026 20:09:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.46.19 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771358980; cv=fail; b=n1sj/skxgm58HxL0OcoZOzOXOXxjtRPbp7L0yiTO33Rwdnpwu1V0pYXkINiiOgzEyQ+MrvwJP6+nZ7eaQzEEvBhHuOSjuFgUNVaS4i7P44u7NhGklqQCZ9GOoTQ5JskyAR6ElZ1D2vU/QdZk19oqqEbbqQgCz4wupyPwhwtHIwA= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771358980; c=relaxed/simple; bh=42iAD4yNR0BHytSVc0BwrwEATm9HNltn86vyDwCRC+0=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=sSVTcB/tvi7QMFi1OX2LmCOeLsvfXWiJfvQYquUH5prLqhBdmtp038A/Wm242SjggRcrD+s6ABhi2aqI5eD5lL/nKNLCvvsmvwZXbJOg6ecP3nuMLNMd4zQ2OcZ4zo/OHHJ8oUfaSWsNJ07DfajRMb8JqbmhSgoCS6vg4K7ypRE= 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=BGW+vX3J; arc=fail smtp.client-ip=52.101.46.19 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 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=amd.com header.i=@amd.com header.b="BGW+vX3J" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=DkxSIvhJvgNNByS/HRfVreVfqchFj40A7AkDv2Bdv5Iv/zoD8eG2gEgGN9YZnF8Gf+DlmMZs4XpOaf0u8CMB9XrlhB2ZzkmpoP6HuYjfsTWoJ1jTyS99withS0fNPDEUhnx7W/H8q5DhKFry8eYzNOJVM76ZO476hSc5r09baCkau8uoTwHDgv4uyTBN4uJUDJxVuc2GCIkyH+ZCBC7qAvhwV3fk3Ox2CIbka7dD9m8/DOigQj3cYUicTcZF3gvC6clWXILRHKPhzkox0gvOdWtBfxVXiXl8HaNXw/wj9uK6G5DgzEYh8fBr2KRNRe2pUD48FuP+DOinO9hUCmhcGQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=z2XoWPMZjBR56Mc1kgY1SJsdsppsFl/AmWTP5xZdRzY=; b=mjBhz19eU6U6LVlP71nbJ9xrXMRyAGi5ln1TiNs06oNt6fjEXChoFb1GVlpHWtmByHEexPDbuomz7WqelqYS5rw0tabLo45g2wf18+8MxMT2sLswDxXLzBVp3bof5PRbQgEctwlJo0XoRnQSE9JR+3TFcK2noJeHVD/rCYUxbxkDPWHREM69qHgmSrgn0xBwDOIoQs9S7oO1dLaCN2EIYvNHN/wZ/lA2ETb16HXIOKVzeq1c3/MaDG9kKCFjq+B5U+Yo4l7Z9bQ8LWmRnPNMgjtfvyTT5Rc4hTdYHgWC3Rc+QfQZj2ObupDOb7ubSZLb0J/E9ykTJpts+DaE3z6Tzg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=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=z2XoWPMZjBR56Mc1kgY1SJsdsppsFl/AmWTP5xZdRzY=; b=BGW+vX3JvyFRo/nZKpqZqdZ7xwhKafE+7MOMVH0dXZFcJvsjfjku1P7NHS7JEWv2pnIaTQaN8adAcosoCuNRYkVRa2POvki2pPwe+shiXolFtJyW1e3ZteoiUYrHbSbckHJla17+6wD1fwtUrH3nHpKGN9kcyHkL/bihmhZ1wG8= Received: from MN2PR11CA0025.namprd11.prod.outlook.com (2603:10b6:208:23b::30) by PH7PR12MB7916.namprd12.prod.outlook.com (2603:10b6:510:26a::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9632.13; Tue, 17 Feb 2026 20:09:33 +0000 Received: from BL6PEPF0001AB58.namprd02.prod.outlook.com (2603:10b6:208:23b:cafe::90) by MN2PR11CA0025.outlook.office365.com (2603:10b6:208:23b::30) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9632.13 via Frontend Transport; Tue, 17 Feb 2026 20:09:30 +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=satlexmb07.amd.com; pr=C Received: from satlexmb07.amd.com (165.204.84.17) by BL6PEPF0001AB58.mail.protection.outlook.com (10.167.241.10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9611.8 via Frontend Transport; Tue, 17 Feb 2026 20:09:33 +0000 Received: from nigeria-2635-os.aus-spse (10.180.168.240) by satlexmb07.amd.com (10.181.42.216) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.17; Tue, 17 Feb 2026 14:09:31 -0600 From: Ashish Kalra To: , , , , , , , , , , , CC: , , , , , , , , , , , , , , , , , , , , Subject: [PATCH 1/6] x86/cpufeatures: Add X86_FEATURE_AMD_RMPOPT feature flag Date: Tue, 17 Feb 2026 20:09:07 +0000 Message-ID: <6e004cd8c4deb4660bc5887309fc64aece0a5b25.1771321114.git.ashish.kalra@amd.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: satlexmb08.amd.com (10.181.42.217) To satlexmb07.amd.com (10.181.42.216) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL6PEPF0001AB58:EE_|PH7PR12MB7916:EE_ X-MS-Office365-Filtering-Correlation-Id: c8303793-5cda-4e3b-25fe-08de6e607750 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|36860700013|82310400026|376014|7416014|1800799024|921020; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?mxfLN0y69GFq8z1MB/57h/uMt533RqiaQ9C9nlQDOIehiBUWzGWl1E3gKWVG?= =?us-ascii?Q?BcpYK786WEiQEiRfUeKcfDUqVMCGj+H2jXg5SNSus3LV3TmOuQrluR6EPWwB?= =?us-ascii?Q?bcCXFuczkMWl0sWOmrzUbJ1GVv0GVrNFeN7l7jNml0NNitTN058/ljA/uI0R?= =?us-ascii?Q?0IomHV8jpwUSOJO97FWki3jYtA4zmYH5ZoIVdIXadaUKmxHmtRgaAZ9XL+Rc?= =?us-ascii?Q?6htzk8TdwAEaylfs6cSqeQ8PG8/t4KZ22xEdPSu4w+HkTb4kXMeHh8y/v1Bw?= =?us-ascii?Q?IkcnRn97DzEJQqGQCPXS/ccCsWAgyDQUFCZKkL2TX/99h4FOk3aBEDKG2zfI?= =?us-ascii?Q?1vy/B6G384aaFr2p340R8Pc9V7B8NrUYu2tdpSmhSbYgljhKmfj9PD/SUaDb?= =?us-ascii?Q?N2E5onmpJcIxpxIpoAijmua9tOtYe2xZ7qbAH0up9/gSAc2y9qVInnT+x/Te?= =?us-ascii?Q?tMBYSUENkjwU/kFIJhoYAG2PmHB9X+FzwAwya3GbRDP/7hAkyC8E8DW3b18d?= =?us-ascii?Q?uCH6F0h4pmurALZ3RviM26cVdDhQyHHwP6GNA7dcnu8lMe3jWPIv9Pv19qGZ?= =?us-ascii?Q?O0O8oPDCnwpW+vQQs2YdK84Q9XCbM1Rfhp5M6M9Lc0VvyAorblOoBiDdHcJ1?= =?us-ascii?Q?xX6waafaO0PAxJmEZrD5MCVj6A+s47OR6eFW3noiymLgq9iWVvBeFfG4lOfm?= =?us-ascii?Q?g2Fd+mWB1zXvwHHDY9cHsvEMSN4JsGkhVyOsi8OyrkE9CpzfymRLUPzOF9ou?= =?us-ascii?Q?wspQpmmsAFLbkoDjESoc2fmvGTQ6M1V5Gie0yo+cQqBv7sFS7HvP3nRsRPyh?= =?us-ascii?Q?MpNuxnhvvOX7noopsdz6Ggs5wSRYj6GdvFiIX7BBhpiaQXpg/3nPpwUxm7h5?= =?us-ascii?Q?+ZTKwrt4RnldDWWPd/X83plbwyVLONED8zzeExhZh+7OaFrrHxHCG1At5iIl?= =?us-ascii?Q?vSyyHZ88KQXMwOUzSYA//AzA0uEIIkyYOtJW7giyxgsq9t8cu9P79SS79319?= =?us-ascii?Q?e8VameqaEOQO+SmIxMsjW8wNLYDCfgqOeYoxsHFecEJAwNNk3pJIzxGsf7sE?= =?us-ascii?Q?dr+AuK5CGeUniVOlgIzV+HyeJ2uYPHjq4jddhhs4vnVkkTS3UfEvq+7kSIQ6?= =?us-ascii?Q?nXCAhlZEY0YqyASCsrnR2SQ/dgoT5AQdWHa4CT5fx4kdsa8J9cAnODLs1aet?= =?us-ascii?Q?aKXM0tvWj9ARFMQ+QoNSraXTA7fGBYzNJNKnK647r2eK7YsL6Yj6n1F2QT2q?= =?us-ascii?Q?qEj+AMPikxcOHTNd9Uk2NM3QhD1bKGDjyoirkIkEhiefAEkMp9TJ9DqCQH21?= =?us-ascii?Q?H0iGHuOnObiKroinSKTjYyMizrscz6kEbRpe9oucpOI8vmBBjscaH5Ws2ZX6?= =?us-ascii?Q?3Ugpb68pg4r8PwxWFL4BwBxFfrp+XKX9wBYsLpqK6ftC9zbEJUoqKKDCpzgr?= =?us-ascii?Q?qNLgCiU+ZBoeSr6WySkJZorbQBQwY1i0fhq6ZdjwQ34o2LGH5Vp8K+kvvRo/?= =?us-ascii?Q?TZAK07UKyBL6fvR5j/YfIcbGJVOvFQoz1oLeJqLFuZtkCCbUyC+UV1Yijp9M?= =?us-ascii?Q?pnt/6w/iqeH2+2ujdZ8l1WRmqjf1v+RXdPB7c62GcHX4sXCXoe4KU4kQmj4H?= =?us-ascii?Q?Ru41koHVCx4d/swtkWNJixI6KJfLR+mYpGgpXzSrRGRFF3nqqR02czVSBp1+?= =?us-ascii?Q?sR8b7w=3D=3D?= X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:satlexmb07.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(36860700013)(82310400026)(376014)(7416014)(1800799024)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 1lfRBswbFYA6YOLE163xQHue+sgXtCct3QFVKzPOsZbinwtPsStuZRgFpkSLqpwTAKdXSrnlN//EZLLsYaF4/GY6l5vciRn3MMDckmJqrtFsY5Ld28mT6s7LuQHeNq0CjCIpxxtpD7gt88XZgpkhw/Bf9OU58AL1YLnqIrJFvoI4owzHhwKOVz8RgkFxKVslUkheuquDYAAyWOJFcBqTSwXccQa9TBnYgPdP18E5lw0hBdKeacU6ExDM3NUuumbItqK4kH9Q5zkds2z5Ebipl1AKie+intbzTLaXAX2wBFbDSOEAsx6+bh7EugDnjVXfefwobzmPRcLKeUOwqxzoLPptB40E0Ke3FjEtAaB1F91+HsppWxZd1TVoTJQp8/3Mn9LR+JtzfSjWV+eWWGqZWv+ry/pI5RVAg1CAoErrVIhoUDM96/yQ3/WADJSY7tCq X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Feb 2026 20:09:33.0402 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: c8303793-5cda-4e3b-25fe-08de6e607750 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=[satlexmb07.amd.com] X-MS-Exchange-CrossTenant-AuthSource: BL6PEPF0001AB58.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR12MB7916 Content-Type: text/plain; charset="utf-8" From: Ashish Kalra Add a flag indicating whether RMPOPT instruction is supported. RMPOPT is a new instruction designed to minimize the performance overhead of RMP checks on the hypervisor and on non-SNP guests by allowing RMP checks to be skipped when 1G regions of memory are known not to contain any SEV-SNP guest memory. Signed-off-by: Ashish Kalra --- arch/x86/include/asm/cpufeatures.h | 2 +- arch/x86/kernel/cpu/scattered.c | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/arch/x86/include/asm/cpufeatures.h b/arch/x86/include/asm/cpuf= eatures.h index dbe104df339b..bce1b2e2a35c 100644 --- a/arch/x86/include/asm/cpufeatures.h +++ b/arch/x86/include/asm/cpufeatures.h @@ -76,7 +76,7 @@ #define X86_FEATURE_K8 ( 3*32+ 4) /* Opteron, Athlon64 */ #define X86_FEATURE_ZEN5 ( 3*32+ 5) /* CPU based on Zen5 microarchitectur= e */ #define X86_FEATURE_ZEN6 ( 3*32+ 6) /* CPU based on Zen6 microarchitectur= e */ -/* Free ( 3*32+ 7) */ +#define X86_FEATURE_RMPOPT ( 3*32+ 7) /* Support for AMD RMPOPT instructi= on */ #define X86_FEATURE_CONSTANT_TSC ( 3*32+ 8) /* "constant_tsc" TSC ticks at= a constant rate */ #define X86_FEATURE_UP ( 3*32+ 9) /* "up" SMP kernel running on UP */ #define X86_FEATURE_ART ( 3*32+10) /* "art" Always running timer (ART) */ diff --git a/arch/x86/kernel/cpu/scattered.c b/arch/x86/kernel/cpu/scattere= d.c index 42c7eac0c387..7ac3818c4502 100644 --- a/arch/x86/kernel/cpu/scattered.c +++ b/arch/x86/kernel/cpu/scattered.c @@ -65,6 +65,7 @@ static const struct cpuid_bit cpuid_bits[] =3D { { X86_FEATURE_PERFMON_V2, CPUID_EAX, 0, 0x80000022, 0 }, { X86_FEATURE_AMD_LBR_V2, CPUID_EAX, 1, 0x80000022, 0 }, { X86_FEATURE_AMD_LBR_PMC_FREEZE, CPUID_EAX, 2, 0x80000022, 0 }, + { X86_FEATURE_RMPOPT, CPUID_EDX, 0, 0x80000025, 0 }, { X86_FEATURE_AMD_HTR_CORES, CPUID_EAX, 30, 0x80000026, 0 }, { 0, 0, 0, 0, 0 } }; --=20 2.43.0 From nobody Fri Apr 3 04:37:58 2026 Received: from BYAPR05CU005.outbound.protection.outlook.com (mail-westusazon11010041.outbound.protection.outlook.com [52.101.85.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 84C6B37757B; Tue, 17 Feb 2026 20:10:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.85.41 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771359034; cv=fail; b=Vs3RtQFwB2EZbQkocBJO1VZhMFS75nmGSs+/6rY8Z2lXj1n5tZXvPgSbFU3ib6+5VBRT4/QQPAt6a4wUjMg/vYHWPqcp4k2P0ESWpZAMEPgzXVsipzBevA4mS9twZWKBZzyWbWsEq9zwJuMbUbnsV2JvMgEKZDhztHrrcQb47ek= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771359034; c=relaxed/simple; bh=aTwkGrCwDZxhKyNyWn/R5Mt581M9gH6qa3D+9h8BwAA=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=pVcBOFfL6bbckEc3XHlnl7ecNBlberu76Mehp8osrD31Nk6bnkG/9NzX9FNdRjBsvgTSDsZVlk/+8wbF3ypgQ+E6msAjBJ/mwuETAXEUU3+Y6dtwhCwjVZBDF4luAnSjny61D0gwWYCMjNm5+FjW69CEWc93IIdCz8ePogHSPeo= 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=yVmJqqea; arc=fail smtp.client-ip=52.101.85.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 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=amd.com header.i=@amd.com header.b="yVmJqqea" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=eA7RCHnEL6gmxV1gTGUxxA84kyzOFIrX2DCtMRqWKaImPyePFg1TWO9nuDpxY+kU+v2BXPTYR7xJfPwxrx2/Zx8Aj0NH3ElRM53G5/v61L+X4BCT6KtfsAhAmIcb+oYUnyNYw7tPGFLh0l8a6Vcr7MB9yXqB/8G1Zsci9avOLobQVRhkFjLBBjZT+pCpvUUEajGIiupSXonmUgTBObGbq6cb5Bw1RKIZ73ZnGx4geeClx/Di214yv0fz0i9VfbeGFAVEq3D6Bn9roGvaqJjICenEWFA3eyEzc8cZxI8FhsLbzgRJurBfWH5Bx/z312P1BGb5PmXFVkB8KI1GI/TgRw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=ls2hNN1ZZxjZgfEtQ1PCr5cJVtEhFB6Wo6P3T30CpqM=; b=pxynAgq4eiBNv++QZwkVyn6SQubGkdhFTZ8um9u1ISss1mB5JKhgT6qiiLzzxJ+xG8siHgGSMPK32r7ABeWdVB5MXYsm8nNl8JGTbrj4La7ZWfeqHUGMa5CH4SzlpsCYagFqb3PBIPyAEBxmOGhfrIt3SXFrTZRVox1tqG5Uy6E8AN0diwXkGBUgLIhSdFnO4z3fV8sn1PKGZUdxcVEhA9QkTPEPcwXtcYdrOJn+gmtPeia4Yoe7qRhzV5GLofoEIiZCg2WbykZl8MJG6I5af7gfndP0osxgi+7SQ8YE8DBTvH5lWDeadqrvT14wZliX1KT2VhAi+1KbDy9XLPVDnw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=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=ls2hNN1ZZxjZgfEtQ1PCr5cJVtEhFB6Wo6P3T30CpqM=; b=yVmJqqeabFk+oS9RQuED+9ZlGL3F7f151vjJPDiPMojeuXhYk/rLqlPTcgpATmwnVqEKK/EmJWDAKtfh3uWNNJMYak9xnM125cG/HVxGLTMgV83zneruw9gnXRkPKFIcjcxlgy2CpSjfBJqaHTOGNEttTvrZ4RkP5mn9znETm5g= Received: from MN2PR20CA0058.namprd20.prod.outlook.com (2603:10b6:208:235::27) by DM4PR12MB8497.namprd12.prod.outlook.com (2603:10b6:8:180::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9632.13; Tue, 17 Feb 2026 20:10:25 +0000 Received: from BL6PEPF0001AB53.namprd02.prod.outlook.com (2603:10b6:208:235:cafe::32) by MN2PR20CA0058.outlook.office365.com (2603:10b6:208:235::27) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9632.13 via Frontend Transport; Tue, 17 Feb 2026 20:10:23 +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=satlexmb07.amd.com; pr=C Received: from satlexmb07.amd.com (165.204.84.17) by BL6PEPF0001AB53.mail.protection.outlook.com (10.167.241.5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9632.12 via Frontend Transport; Tue, 17 Feb 2026 20:10:23 +0000 Received: from nigeria-2635-os.aus-spse (10.180.168.240) by satlexmb07.amd.com (10.181.42.216) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.17; Tue, 17 Feb 2026 14:10:22 -0600 From: Ashish Kalra To: , , , , , , , , , , , CC: , , , , , , , , , , , , , , , , , , , , Subject: [PATCH 2/6] x86/sev: add support for enabling RMPOPT Date: Tue, 17 Feb 2026 20:10:11 +0000 Message-ID: <7df872903e16ccee9fce73b34280ede8dfc37063.1771321114.git.ashish.kalra@amd.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: satlexmb08.amd.com (10.181.42.217) To satlexmb07.amd.com (10.181.42.216) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL6PEPF0001AB53:EE_|DM4PR12MB8497:EE_ X-MS-Office365-Filtering-Correlation-Id: 718e790e-b86b-4d68-d6e1-08de6e609545 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|82310400026|376014|7416014|36860700013|1800799024|921020; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?xuQAxLfgmCRPH/gr0lfkscrW/S+N17A92d37iUacC4flEtACcNBs1YFTueA5?= =?us-ascii?Q?FTh/CpnqLilDNY926JZmL6hcxsHkaiCsDRmTWcj/PYV4bGnJaBwX6ShkvcFy?= =?us-ascii?Q?C0I+A62XryH3dzS7e+tcTi7egPojhz0XNQDku75J6R8R3zIdpO1gbpFwxbCZ?= =?us-ascii?Q?OR2QMXcq+jZ7hyeU8rhALMRko7LhQKRSyY5JI9IZVdeAW3Eype0FBSIVVq2y?= =?us-ascii?Q?zlRATc70mq6AHQdfgk2LAkqR9wGZiPSDSnKszRqruqUTjgQNVOsuD+LeNRss?= =?us-ascii?Q?1FjmQlSbvw1kK5d+5MxXuqOSSZlltGt+ZLAdD1HysE1Z2g/e9SCEuycVq8HA?= =?us-ascii?Q?ADrEGcCzkiNe+9Se91hr5YNHbANRJYxzw2rNNsfSIJ6vp2Lgmy2KsUxJl7/c?= =?us-ascii?Q?LUTiMdQgoDYjI+5WPZvjSAOcYolBUpSvgtEK7za1x5lilfmb3Gl4aIE00Sol?= =?us-ascii?Q?SEn3PUKDiu4ghgMvRnZtsOtBK2GYOeFwab/8pi+GT7i0+hCjsA0BZb1pzXM5?= =?us-ascii?Q?ZkryY58zQ2Fm6imCAdYNbuvKy90PnWtTLzQBqpWTnniCrrzjKli5mJQcITEN?= =?us-ascii?Q?DcDj+DQac2MYpDpxLOqsZqLhadM8oIlccUaXbk8TnUpcBYTyLgG2KS5dyz3K?= =?us-ascii?Q?DulZFCHkSVRMhmkb/DmqpvemZbcQJNPS0JzBhNt/vu1iQhEjuU5Mk93+Huds?= =?us-ascii?Q?G8Y+pfowLfYx1cgybir+w8Fu/fvHaWqKnBbrtavzrRKybc/Gi2aQ13JLwgwg?= =?us-ascii?Q?+mG5GIyFSp+kHyj8CcnuURp2Dgq199x3BbutaroByGxQoWk67+kCdP8KjrYA?= =?us-ascii?Q?d3J3floAmGyi+7lk53DjoMj/C/pv6uocL4QQB8pNtb+IpGMKOdK4X8CHIvs4?= =?us-ascii?Q?ai+QiId6AU2qGF7fJIynCr1TzcJw+lTECLlffWUezQit4hqX1yYVghxeRJuF?= =?us-ascii?Q?WeO6mNYkgLQa4nAOrIoYBVWQ/tZM6I27k3iMa/cjpejDucfeF1Lm1YELOaw9?= =?us-ascii?Q?0cWRs57PGHYr2Y76kCdDpHzke6s11s5GMpO5nvX1MyUF/5y0dL6ARxS4KBSD?= =?us-ascii?Q?UoxsR21WEifmUZmvY5Tyelvf4kulC884VTjHC5sgRpm4yHDvV8caL77KWRwg?= =?us-ascii?Q?kbG0g0cf3pahUarl01C3AWRn/5NhDbfRL9QMXzXifZW2f7nnxWAyHBeUdies?= =?us-ascii?Q?tw3eDa0C8t80NpDbe5t+0JDKR+vUjVRUNkpjIRiwUJfxJcGGKGZR4S8HBDKW?= =?us-ascii?Q?1UJqJfeVaUlG5TcFrdOtcrkszsuezf91YBAzE8AO6OJsh7Bd40fpgB1QPvw5?= =?us-ascii?Q?19eH1eHxLICe0bev+HIxT5549m2QY6fjtgqbLNp8ncsaL7pI1IGeRHOtFWY5?= =?us-ascii?Q?t36ZN9SrYYR9Hz8P+gYfPBfzL8kV461eH1UMSkCz39yINSRu5DIJX7IBJ4VT?= =?us-ascii?Q?H4z7QBfSc6Zz8YA9BQPvlUazROgRz93F8pBWjvJwxSnJkydTyuQCkTkTfnTB?= =?us-ascii?Q?spKaP3Ys/11M2UeLbfws/FitQw6/zBILVT2D2nW6sfIGTOwDu8xK8pzzZruN?= =?us-ascii?Q?evCAusz7kVm1ZpFO9vOjzbpZ0T9mZmCxDsTar48S2pgXhNURNN7WZrS6Ll97?= =?us-ascii?Q?Mg+70TCnYUSXM2q1jKT2zyHhfQcpet6yKcV/Oab0jmHgLM8dn3Hfo3JB+WHo?= =?us-ascii?Q?RAewBzEUaGNtRUH+VyqL0t4S9TQ=3D?= X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:satlexmb07.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(82310400026)(376014)(7416014)(36860700013)(1800799024)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: su9fFWi7xXb69oDXzTBjZThIdkIbF4rqnidNTQKYLjHav3m7MPq/s+LxW49YjTMkMND30lTH85Zr5OFdnzMxB0JQy1U84YL/TA20YjV6YHZMS9NI1F9jRpddMO00daU0RIzH0s7N9z9LDtF3ms1s/eHaTW3+zMKfYccvZfpnMe1fNwJagXVxpw87J59AolmaG43o8la36eGVcYxlS+/ymzXBcxOW6fmPvCw2gg6sF6pcwC5A8mw+piN/271PQqGKTPUzFEHtumBf9INdgIlMboyIzHeIUKlvzSR2z2/FAZT1DVe+aczai8vxMjuqWIcqmR4oRFlf88kYB29FvA2cGjnWNjAUYjH0l3yHXbDtZC3e59FebasHjzoU6SrSdNTfFn8LIvo6F01wSgUV6fT2VLpLBaKAJ8rq6Xb+kmbGzdVZrZaoQzqwNipLZEWZECAB X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Feb 2026 20:10:23.3127 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 718e790e-b86b-4d68-d6e1-08de6e609545 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=[satlexmb07.amd.com] X-MS-Exchange-CrossTenant-AuthSource: BL6PEPF0001AB53.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM4PR12MB8497 Content-Type: text/plain; charset="utf-8" From: Ashish Kalra The new RMPOPT instruction sets bits in a per-CPU RMPOPT table, which indicates whether specific 1GB physical memory regions contain SEV-SNP guest memory. Per-CPU RMPOPT tables support at most 2 TB of addressable memory for RMP optimizations. To handle this limitation: For systems with 2 TB of RAM or less, configure each per-CPU RMPOPT table base to 0 so that all system RAM is RMP-optimized on every CPU. For systems with more than 2 TB of RAM, configure per-CPU RMPOPT tables to cover the memory local to each NUMA node so RMP optimizations can take advantage of NUMA locality. This must also accommodate virtualized NUMA software domains (for example, AMD NPS configurations) and ensure that the 2 TB RAM range local to each physical socket is RMP-optimized. Suggested-by: Thomas Lendacky Suggested-by: K Prateek Nayak Signed-off-by: Ashish Kalra --- arch/x86/include/asm/msr-index.h | 3 + arch/x86/virt/svm/sev.c | 192 +++++++++++++++++++++++++++++++ 2 files changed, 195 insertions(+) diff --git a/arch/x86/include/asm/msr-index.h b/arch/x86/include/asm/msr-in= dex.h index da5275d8eda6..8e7da03abd5b 100644 --- a/arch/x86/include/asm/msr-index.h +++ b/arch/x86/include/asm/msr-index.h @@ -753,6 +753,9 @@ #define MSR_AMD64_SEG_RMP_ENABLED_BIT 0 #define MSR_AMD64_SEG_RMP_ENABLED BIT_ULL(MSR_AMD64_SEG_RMP_ENABLED_BIT) #define MSR_AMD64_RMP_SEGMENT_SHIFT(x) (((x) & GENMASK_ULL(13, 8)) >> 8) +#define MSR_AMD64_RMPOPT_BASE 0xc0010139 +#define MSR_AMD64_RMPOPT_ENABLE_BIT 0 +#define MSR_AMD64_RMPOPT_ENABLE BIT_ULL(MSR_AMD64_RMPOPT_ENABLE_BIT) =20 #define MSR_SVSM_CAA 0xc001f000 =20 diff --git a/arch/x86/virt/svm/sev.c b/arch/x86/virt/svm/sev.c index ee643a6cd691..e6b784d26c33 100644 --- a/arch/x86/virt/svm/sev.c +++ b/arch/x86/virt/svm/sev.c @@ -127,6 +127,17 @@ static DEFINE_SPINLOCK(snp_leaked_pages_list_lock); =20 static unsigned long snp_nr_leaked_pages; =20 +#define RMPOPT_TABLE_MAX_LIMIT_IN_TB 2 +#define NUM_TB(pfn_min, pfn_max) \ + (((pfn_max) - (pfn_min)) / (1 << (40 - PAGE_SHIFT))) + +struct rmpopt_socket_config { + unsigned long start_pfn, end_pfn; + cpumask_var_t cpulist; + int *node_id; + int current_node_idx; +}; + #undef pr_fmt #define pr_fmt(fmt) "SEV-SNP: " fmt =20 @@ -500,6 +511,185 @@ static bool __init setup_rmptable(void) } } =20 +/* + * Build a cpumask of online primary threads, accounting for primary threa= ds + * that have been offlined while their secondary threads are still online. + */ +static void get_cpumask_of_primary_threads(cpumask_var_t cpulist) +{ + cpumask_t cpus; + int cpu; + + cpumask_copy(&cpus, cpu_online_mask); + for_each_cpu(cpu, &cpus) { + cpumask_set_cpu(cpu, cpulist); + cpumask_andnot(&cpus, &cpus, cpu_smt_mask(cpu)); + } +} + +static void __configure_rmpopt(void *val) +{ + u64 rmpopt_base =3D ((u64)val & PUD_MASK) | MSR_AMD64_RMPOPT_ENABLE; + + wrmsrq(MSR_AMD64_RMPOPT_BASE, rmpopt_base); +} + +static void configure_rmpopt_non_numa(cpumask_var_t primary_threads_cpulis= t) +{ + on_each_cpu_mask(primary_threads_cpulist, __configure_rmpopt, (void *)0, = true); +} + +static void free_rmpopt_socket_config(struct rmpopt_socket_config *socket) +{ + int i; + + if (!socket) + return; + + for (i =3D 0; i < topology_max_packages(); i++) { + free_cpumask_var(socket[i].cpulist); + kfree(socket[i].node_id); + } + + kfree(socket); +} +DEFINE_FREE(free_rmpopt_socket_config, struct rmpopt_socket_config *, free= _rmpopt_socket_config(_T)) + +static void configure_rmpopt_large_physmem(cpumask_var_t primary_threads_c= pulist) +{ + struct rmpopt_socket_config *socket __free(free_rmpopt_socket_config) =3D= NULL; + int max_packages =3D topology_max_packages(); + struct rmpopt_socket_config *sc; + int cpu, i; + + socket =3D kcalloc(max_packages, sizeof(struct rmpopt_socket_config), GFP= _KERNEL); + if (!socket) + return; + + for (i =3D 0; i < max_packages; i++) { + sc =3D &socket[i]; + if (!zalloc_cpumask_var(&sc->cpulist, GFP_KERNEL)) + return; + sc->node_id =3D kcalloc(nr_node_ids, sizeof(int), GFP_KERNEL); + if (!sc->node_id) + return; + sc->current_node_idx =3D -1; + } + + /* + * Handle case of virtualized NUMA software domains, such as AMD Nodes Pe= r Socket(NPS) + * configurations. The kernel does not have an abstraction for physical s= ockets, + * therefore, enumerate the physical sockets and Nodes Per Socket(NPS) in= formation by + * walking the online CPU list. + */ + for_each_cpu(cpu, primary_threads_cpulist) { + int socket_id, nid; + + socket_id =3D topology_logical_package_id(cpu); + nid =3D cpu_to_node(cpu); + sc =3D &socket[socket_id]; + + /* + * For each socket, determine the corresponding nodes and the socket's s= tart + * and end PFNs. + * Record the node and the start and end PFNs of the first node found on= the + * socket, then record each subsequent node and update the end PFN for t= hat + * socket as additional nodes are found. + */ + if (sc->current_node_idx =3D=3D -1) { + sc->current_node_idx =3D 0; + sc->node_id[sc->current_node_idx] =3D nid; + sc->start_pfn =3D node_start_pfn(nid); + sc->end_pfn =3D node_end_pfn(nid); + } else if (sc->node_id[sc->current_node_idx] !=3D nid) { + sc->current_node_idx++; + sc->node_id[sc->current_node_idx] =3D nid; + sc->end_pfn =3D node_end_pfn(nid); + } + + cpumask_set_cpu(cpu, sc->cpulist); + } + + /* + * If the "physical" socket has up to 2TB of memory, the per-CPU RMPOPT t= ables are + * configured to the starting physical address of the socket, otherwise t= he tables + * are configured per-node. + */ + for (i =3D 0; i < max_packages; i++) { + int num_tb_socket; + phys_addr_t pa; + int j; + + sc =3D &socket[i]; + num_tb_socket =3D NUM_TB(sc->start_pfn, sc->end_pfn) + 1; + + pr_debug("socket start_pfn 0x%lx, end_pfn 0x%lx, socket cpu mask %*pbl\n= ", + sc->start_pfn, sc->end_pfn, cpumask_pr_args(sc->cpulist)); + + if (num_tb_socket <=3D RMPOPT_TABLE_MAX_LIMIT_IN_TB) { + pa =3D PFN_PHYS(sc->start_pfn); + on_each_cpu_mask(sc->cpulist, __configure_rmpopt, (void *)pa, true); + continue; + } + + for (j =3D 0; j <=3D sc->current_node_idx; j++) { + int nid =3D sc->node_id[j]; + struct cpumask node_mask; + + cpumask_and(&node_mask, cpumask_of_node(nid), sc->cpulist); + pa =3D PFN_PHYS(node_start_pfn(nid)); + + pr_debug("RMPOPT_BASE MSR on nodeid %d cpu mask %*pbl set to 0x%llx\n", + nid, cpumask_pr_args(&node_mask), pa); + on_each_cpu_mask(&node_mask, __configure_rmpopt, (void *)pa, true); + } + } +} + +static __init void configure_and_enable_rmpopt(void) +{ + cpumask_var_t primary_threads_cpulist; + int num_tb; + + if (!cpu_feature_enabled(X86_FEATURE_RMPOPT)) { + pr_debug("RMPOPT not supported on this platform\n"); + return; + } + + if (!cc_platform_has(CC_ATTR_HOST_SEV_SNP)) { + pr_debug("RMPOPT optimizations not enabled as SNP support is not enabled= \n"); + return; + } + + if (!(rmp_cfg & MSR_AMD64_SEG_RMP_ENABLED)) { + pr_info("RMPOPT optimizations not enabled, segmented RMP required\n"); + return; + } + + if (!zalloc_cpumask_var(&primary_threads_cpulist, GFP_KERNEL)) + return; + + num_tb =3D NUM_TB(min_low_pfn, max_pfn) + 1; + pr_debug("NUM_TB pages in system %d\n", num_tb); + + /* Only one thread per core needs to set RMPOPT_BASE MSR as it is per-cor= e */ + get_cpumask_of_primary_threads(primary_threads_cpulist); + + /* + * Per-CPU RMPOPT tables support at most 2 TB of addressable memory for R= MP optimizations. + * + * Fastpath RMPOPT configuration and setup: + * For systems with <=3D 2 TB of RAM, configure each per-core RMPOPT base= to 0, + * ensuring all system RAM is RMP-optimized on all CPUs. + */ + if (num_tb <=3D RMPOPT_TABLE_MAX_LIMIT_IN_TB) + configure_rmpopt_non_numa(primary_threads_cpulist); + else + configure_rmpopt_large_physmem(primary_threads_cpulist); + + free_cpumask_var(primary_threads_cpulist); +} + /* * Do the necessary preparations which are verified by the firmware as * described in the SNP_INIT_EX firmware command description in the SNP @@ -555,6 +745,8 @@ int __init snp_rmptable_init(void) skip_enable: cpuhp_setup_state(CPUHP_AP_ONLINE_DYN, "x86/rmptable_init:online", __snp_= enable, NULL); =20 + configure_and_enable_rmpopt(); + /* * Setting crash_kexec_post_notifiers to 'true' to ensure that SNP panic * notifier is invoked to do SNP IOMMU shutdown before kdump. --=20 2.43.0 From nobody Fri Apr 3 04:37:58 2026 Received: from SN4PR2101CU001.outbound.protection.outlook.com (mail-southcentralusazon11012042.outbound.protection.outlook.com [40.93.195.42]) (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 8111136BCEB; Tue, 17 Feb 2026 20:10:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.93.195.42 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771359046; cv=fail; b=Gj+iW7KlXluBp72sKhqJM/8TNh0GxColUrGDE2DEA3eCMEeQf617mZ5ATXMgdv0doQbGa76F88XjDA+Isp1G5p52CGD1uKpRgcbXyvijoqLcEQrca6zg88JvFDlOiQwPpbgp/iQoCKSMtKk+tAhY9ZxtBafq2coArC3fM12NAYI= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771359046; c=relaxed/simple; bh=emJqWVQ/jzlyWyQc3S8WnXYq+0HIN3tksnP9HSfXVAw=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=rLORAWgyCC/Fv9wJgkjs/yXuSRFyILS+cr4/IBDMq5WVsuadOGQeyvCMjaFNyA7V99sAQ8GDgB3z35kT8IAqAviPICu4wx5IrDZqUx18wOgXITa/mnSmIW6AGugYEbtfHr2mvD8QZ0/dAOl5EcaK1VAuciVq/5tUGg2c5TLkxjw= 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=0Wwz6NAu; arc=fail smtp.client-ip=40.93.195.42 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 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=amd.com header.i=@amd.com header.b="0Wwz6NAu" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=UJdPvqQc0nqmzl4Z0eJOGYCUlx0rWESEAj1odzAc7pQwt3CeldApYNj/vrAkFdltB8+xzKuX6SfFUyu3vGejzZqpGFxiqNtjGOi6tG8UvGljvgT8MQVWM4VwXjl+L3ywYekJxHGLrS8/kBUVtsYKFzivhZ6RIQc30BSA2wP96z6pivHmoaucyPv5vuY8vdx3l/PdK6TlFtJpFkh8VFj+O/QhCy5wIZY72L0DROP3MKWAVJgMc2I0dzHWV2ZRd2pNeG5HR9TkY2Cc8Y3B9ATIU6hG4TEPl77vtCFdysuJhhbEnSfxj6Bea07xEaMWmYE4xMGW/mviQQwnWcutFJ7k8w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=fIm6XdEDUaHIIO5IsZChxVVSaiBE5Y2QCJF1VgkAXSs=; b=k6nOoaSLjU1WMspxaRRvcXOZjo5o7fv9hUvqRq6RVHMjpxGDw7YiNggd4Wv8AQZVINKSzU9sbywul6rsV4T3aXZfAfG8Yy8v2HGXcCshODHZ8I/uYtADi4JJYs+/31rAiXaTHz5XdK6csqodzRXN9VFQsRB0MdA0jXwGEsT6clRzxy1XzCaN588UHrHt59IxIKpi0EkbEAOYcAjsRMYN1Uzer1oAoHOGieLqQ1nA7xLgEeYUtES4yyIZR9zH7qB1QdLpyGrribtaYEJMuOfbAQA0hNmNv2RWTa+i5lLfY/z+Si2KFZ/6Ge9C5ZTqDtl1v5iSuCVIyPMoADZw9v2MfQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=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=fIm6XdEDUaHIIO5IsZChxVVSaiBE5Y2QCJF1VgkAXSs=; b=0Wwz6NAul2iLxM2qEw6IGIqCZRQ2h2cFiH1X5yuU6lgoeGqLdTiLyjCEIbYo84fUfvksxRqNTsZVCz9k3B4girsWV0X6o6PHaWD3MSSmC4aY8HWnCrgxRo+G1Sy42j+bTRNIwzKlL/6rA6vh6hShMAyFniGh/NsfRt9pap4+aOk= Received: from BLAPR03CA0112.namprd03.prod.outlook.com (2603:10b6:208:32a::27) by SN7PR12MB6792.namprd12.prod.outlook.com (2603:10b6:806:267::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9611.16; Tue, 17 Feb 2026 20:10:40 +0000 Received: from BL6PEPF0001AB52.namprd02.prod.outlook.com (2603:10b6:208:32a:cafe::f8) by BLAPR03CA0112.outlook.office365.com (2603:10b6:208:32a::27) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9632.13 via Frontend Transport; Tue, 17 Feb 2026 20:10:38 +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=satlexmb07.amd.com; pr=C Received: from satlexmb07.amd.com (165.204.84.17) by BL6PEPF0001AB52.mail.protection.outlook.com (10.167.241.4) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9632.12 via Frontend Transport; Tue, 17 Feb 2026 20:10:40 +0000 Received: from nigeria-2635-os.aus-spse (10.180.168.240) by satlexmb07.amd.com (10.181.42.216) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.17; Tue, 17 Feb 2026 14:10:38 -0600 From: Ashish Kalra To: , , , , , , , , , , , CC: , , , , , , , , , , , , , , , , , , , , Subject: [PATCH 3/6] x86/sev: add support for RMPOPT instruction Date: Tue, 17 Feb 2026 20:10:28 +0000 Message-ID: <66348e8ad761a1b0ccb26c8027efedf46329db54.1771321114.git.ashish.kalra@amd.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: satlexmb08.amd.com (10.181.42.217) To satlexmb07.amd.com (10.181.42.216) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL6PEPF0001AB52:EE_|SN7PR12MB6792:EE_ X-MS-Office365-Filtering-Correlation-Id: 79a09322-e880-40c5-f950-08de6e609f4a X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|82310400026|1800799024|7416014|376014|36860700013|921020; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?DQWxbzetViajoyIKp6U2YITDhfX0Ij7xH6DOMsy8P9NdxxXVkR0ozNlM7ouw?= =?us-ascii?Q?NZf3BI46A+52FXZtNMV2EeVtn91NY+9vRw5as5D13BLwlDkWgYDfdv+N6t3M?= =?us-ascii?Q?G4kdgsctbuXwPVlm7uy/qQ/pFhh3kOQ7X84aevJcMgKgtSB2QqvrZqRkEkyO?= =?us-ascii?Q?XZXkU9ykrwijxphK5oF/xmovaOWJ+sHtWT5xpr4267AXgu2yd8KtrUxggokZ?= =?us-ascii?Q?TXIQ9kzm3f0ueVbMn1Mbenl0BLclN4MAIppZh0htyEhCwGKMsjqiCxXl5taU?= =?us-ascii?Q?1Qa6CJrIGZZJ5Bi+cvze7+3sYo7TVpWB25ZQIzmpKUuz6AuWCR42lONLZvM4?= =?us-ascii?Q?Y7Hx8+9gb+QynR+l49sJZyi7MrGy6o0qByWwDE90w47UJokWQLUIrYcGWM3Y?= =?us-ascii?Q?xEtmcfXyiXlrtkdUzKnERfUU36gMOTrQamn/EbY1+BPZYV0R4u9/LX2FXWxc?= =?us-ascii?Q?lcOmmmUN1nA5+fWiF0WAjxB5Ejcq2d5PjSJOsYcxSbRy4aOFgPkjxi1rgoPQ?= =?us-ascii?Q?+Ylx8foGTuoqr+UkLSWL3zeomEttOTGhYYITahpQQDltpgWxDd+RDoNrlDm+?= =?us-ascii?Q?GkaicPDAuTEtZ4yptX9qo43CBqn+YsEAo0SNJIufeGzRjQ3H49ftB4Hgw4Pb?= =?us-ascii?Q?9JLIaniptn+/w45M+LbLuDTiisLfLoZ+hmU3FN9trVDs9S6cV+2lruT9yOdB?= =?us-ascii?Q?HzD5tPKMU8DGFn5wf/Reiyirscguu0WACtiOTVxGr9MReBTPX6+usQq/dFm6?= =?us-ascii?Q?p5KL0u6JhIOB+yOzoZsgfXV/jf2UquKdEMkemRk9BoTAk/I6Q3XB4qIU+fyM?= =?us-ascii?Q?Kp2z6Oo84bUjAJ7Z15G27LJf56VJftIaZgLHJTMJZOpcPSb3qym+3OqFIJ3R?= =?us-ascii?Q?kMLtJR4NOuJQr/pzKVQ/eCF0R6DI7GB8hRUrKeWLdxal6DIrRDQR3yK42T9/?= =?us-ascii?Q?i7m1neZeBZZFEA+W0sivLrVd+p2ak4fmiMU2LbkaHPvJsz8qbCphPmhj6eeP?= =?us-ascii?Q?YzYGdk8NAP5SNro2G4v0pla7lM9XKCavQlgw9u9WYo/xPuhi7fNvYHGOvbNS?= =?us-ascii?Q?+rnNKaiz5E+X/XTz6bqCJrSjfSG+IO8Ty5VVm9dLKhCpmvoY6OJUWCDyP+l5?= =?us-ascii?Q?+IMltHcCLM4WdVGIZEpS41fTBwxUSR3FPbyQ486j0i2uEwM941xpe18EkEwo?= =?us-ascii?Q?cQXzhOo3FG5LiTVeiWJ0VyM+BkETO5mGUYj5asevXiq8LWfZ3ZhghjhkTIPJ?= =?us-ascii?Q?JaeOl/Vw6jXCO77xZgVpzvIFm0PKfwqbiiAtsZSKQJ1y/HAtMc/cdJWeUcEk?= =?us-ascii?Q?NFBO/djqF1+seuZCUgh68NMZSmJKlRgFRVgsedjoEZHDpzPmI2mDGTTko0/6?= =?us-ascii?Q?XP2rqJDfDDLBX5C1eUXeBUxnNhGt37mM7uqsmM2i1Klnle/35HO8T5IXD8vP?= =?us-ascii?Q?JR75LlRrtVuAQRgqHjHfFogo6DkJmY3fuLQvgi3kkClTtvSkRjuj30N+vW5E?= =?us-ascii?Q?Mn+NBmRAIm+QZythgCSueLN73mVNWT36sGRKDGygSWLxb/+c2fFcYNKJyH5g?= =?us-ascii?Q?IN4ILVGy5K2ZqF7VPgNr1N+jFuh+vdl1ZQtIZcGP3btj6zl9wRHXjj1bSS+Q?= =?us-ascii?Q?WL9KmlNgti9l36WJNQRo3Uczc//Q49dCoqDrmaXjek1L8HqTCJ8d3XqaRQE8?= =?us-ascii?Q?n2UQJAE+v9xDCoDWHHNHr6lL0aA=3D?= X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:satlexmb07.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(82310400026)(1800799024)(7416014)(376014)(36860700013)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: txCYOG30zOC6iWvPviXJZIB+DNucKcCpCRsb4OiRtfnK+LSwMow5ItHvxJTlngKQReYP98q4zAetyazxTR8MuZNa1KloBiOG82PbhHECxtMP3w905CnNNCvYD1WAnve1wF5FdI6JXzgmlfY2NcwzJXRQWeJiofz9nIw2rG43wBESJHO80w29B4okrd0soDak9lJuVCD6UTQTtc/IN/2WozV6fHN/6xTuVh3ZOLCp5oPILgbIxNnxc36HTjxTWaxN2MKLf6ByvfPRlo8o53DxnSgwvi/KBh7lEbypf1mktqyDrXMtAcGNlxboaPx3SVBdPLEF2ThP36M4mAtiZaVNrCEUIKUZlNLjEgtHpYBX+m9PrYtcHRvTxy9zajNzGBa9kAoUcRcKKSKMlWFYLu4zEA6QG5i/sXL8bMG5aVc3WvxDSL/VIZg+IJdhCYc5RxQQ X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Feb 2026 20:10:40.1147 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 79a09322-e880-40c5-f950-08de6e609f4a 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=[satlexmb07.amd.com] X-MS-Exchange-CrossTenant-AuthSource: BL6PEPF0001AB52.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN7PR12MB6792 Content-Type: text/plain; charset="utf-8" From: Ashish Kalra As SEV-SNP is enabled by default on boot when an RMP table is allocated by BIOS, the hypervisor and non-SNP guests are subject to RMP write checks to provide integrity of SNP guest memory. RMPOPT is a new instruction that minimizes the performance overhead of RMP checks on the hypervisor and on non-SNP guests by allowing RMP checks to be skipped for 1GB regions of memory that are known not to contain any SEV-SNP guest memory. Enable RMPOPT optimizations globally for all system RAM at RMP initialization time. RMP checks can initially be skipped for 1GB memory ranges that do not contain SEV-SNP guest memory (excluding preassigned pages such as the RMP table and firmware pages). As SNP guests are launched, RMPUPDATE will disable the corresponding RMPOPT optimizations. Suggested-by: Thomas Lendacky Signed-off-by: Ashish Kalra --- arch/x86/virt/svm/sev.c | 84 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) diff --git a/arch/x86/virt/svm/sev.c b/arch/x86/virt/svm/sev.c index e6b784d26c33..a0d38fc50698 100644 --- a/arch/x86/virt/svm/sev.c +++ b/arch/x86/virt/svm/sev.c @@ -19,6 +19,7 @@ #include #include #include +#include =20 #include #include @@ -127,10 +128,17 @@ static DEFINE_SPINLOCK(snp_leaked_pages_list_lock); =20 static unsigned long snp_nr_leaked_pages; =20 +enum rmpopt_function { + RMPOPT_FUNC_VERIFY_AND_REPORT_STATUS, + RMPOPT_FUNC_REPORT_STATUS +}; + #define RMPOPT_TABLE_MAX_LIMIT_IN_TB 2 #define NUM_TB(pfn_min, pfn_max) \ (((pfn_max) - (pfn_min)) / (1 << (40 - PAGE_SHIFT))) =20 +static struct task_struct *rmpopt_task; + struct rmpopt_socket_config { unsigned long start_pfn, end_pfn; cpumask_var_t cpulist; @@ -527,6 +535,66 @@ static void get_cpumask_of_primary_threads(cpumask_var= _t cpulist) } } =20 +/* + * 'val' is a system physical address aligned to 1GB OR'ed with + * a function selection. Currently supported functions are 0 + * (verify and report status) and 1 (report status). + */ +static void rmpopt(void *val) +{ + asm volatile(".byte 0xf2, 0x0f, 0x01, 0xfc\n\t" + : : "a" ((u64)val & PUD_MASK), "c" ((u64)val & 0x1) + : "memory", "cc"); +} + +static int rmpopt_kthread(void *__unused) +{ + phys_addr_t pa_start, pa_end; + cpumask_var_t cpus; + + if (!zalloc_cpumask_var(&cpus, GFP_KERNEL)) + return -ENOMEM; + + pa_start =3D ALIGN_DOWN(PFN_PHYS(min_low_pfn), PUD_SIZE); + pa_end =3D ALIGN(PFN_PHYS(max_pfn), PUD_SIZE); + + while (!kthread_should_stop()) { + phys_addr_t pa; + + pr_info("RMP optimizations enabled on physical address range @1GB alignm= ent [0x%016llx - 0x%016llx]\n", + pa_start, pa_end); + + /* Only one thread per core needs to issue RMPOPT instruction */ + get_cpumask_of_primary_threads(cpus); + + /* + * RMPOPT optimizations skip RMP checks at 1GB granularity if this range= of + * memory does not contain any SNP guest memory. + */ + for (pa =3D pa_start; pa < pa_end; pa +=3D PUD_SIZE) { + /* Bit zero passes the function to the RMPOPT instruction. */ + on_each_cpu_mask(cpus, rmpopt, + (void *)(pa | RMPOPT_FUNC_VERIFY_AND_REPORT_STATUS), + true); + + /* Give a chance for other threads to run */ + cond_resched(); + } + + set_current_state(TASK_INTERRUPTIBLE); + schedule(); + } + + free_cpumask_var(cpus); + return 0; +} + +static void rmpopt_all_physmem(void) +{ + if (rmpopt_task) + wake_up_process(rmpopt_task); +} + static void __configure_rmpopt(void *val) { u64 rmpopt_base =3D ((u64)val & PUD_MASK) | MSR_AMD64_RMPOPT_ENABLE; @@ -687,6 +755,22 @@ static __init void configure_and_enable_rmpopt(void) else configure_rmpopt_large_physmem(primary_threads_cpulist); =20 + rmpopt_task =3D kthread_create(rmpopt_kthread, NULL, "rmpopt_kthread"); + if (IS_ERR(rmpopt_task)) { + pr_warn("Unable to start RMPOPT kernel thread\n"); + rmpopt_task =3D NULL; + goto free_cpumask; + } + + pr_info("RMPOPT worker thread created with PID %d\n", task_pid_nr(rmpopt_= task)); + + /* + * Once all per-CPU RMPOPT tables have been configured, enable RMPOPT + * optimizations on all physical memory. + */ + rmpopt_all_physmem(); + +free_cpumask: free_cpumask_var(primary_threads_cpulist); } =20 --=20 2.43.0 From nobody Fri Apr 3 04:37:58 2026 Received: from PH7PR06CU001.outbound.protection.outlook.com (mail-westus3azon11010043.outbound.protection.outlook.com [52.101.201.43]) (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 4E7F73783BA; Tue, 17 Feb 2026 20:11:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.201.43 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771359081; cv=fail; b=g64Ewjeh0phlqNklTIg8FU2yzQY9uDuZuDoP7SPVlrUl20LyloA3C4bQz2z1IoLlku3BsIygiOXJByNGgSIzCwstd80manRJu/mTSVmAGaH+6CdT2mGFiEtQ2YPuR1MkgynXo3e52TKpHwZAH4W5m+4sK1p6mcmsNrlTmLGyZN8= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771359081; c=relaxed/simple; bh=kOIADqZe1e5oV0D/oC1VH8p5lbqSvuQP7AC4ERqur9Y=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=ThcYWDK9JXMJeNa7qsLJV4hSUBSMyqag/5jqHX3b7Vcf2cP8IFZrD3OgdftDXEU4PDZXn0fpyEZZk24hBlU0ndSoZyMkJQaO9Vyo3sjtOLb1QorJowD7CKllLaiNqZaOKkYiAg5vlgmahiMlIqe7z3e7yV5Rv4OlEzFFW+Wi/Qs= 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=xnPBT34R; arc=fail smtp.client-ip=52.101.201.43 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 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=amd.com header.i=@amd.com header.b="xnPBT34R" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=UHXOPHCrFS9HArI12bXagThY29uAi96P0xwq4P1cpdE9CQOFWmf61lKomMkx34neOc8+2JWArIrS/to2nTvkxSGZZ67PPl2gQE94GoY9SKCalOIhR7KiQwq2LYwWH8S7tnVm4faBG/+VWx+tS/4/93/W9dcSSa/6B8+K3uZjw2a8XgXw4c5etz/ZjqFCu6LCpP4F0L9VpmTAb47d7+m8dNKV+0L9o+JgB7jRkyOlCaVMUNPI7Ofk4BC+PlrM3h1ByXg9TZGHdK+pbkI9gVpUtgvaDhLdsisWOMHCMEysisg50Pjx8Ib1ACg4hMx+T5IrG7G40kVkgP6ID7ISiihI8A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=//F2GhOiDp7dpoyo4ouIb6eodIxceJSkpp/KMnoztT8=; b=WW5TTnLDVLgNcbXi9zBsE1FUok1S2Djvt9cZLzdhCuO+XTzFg5/gCmz4PtWtgpI96dQv5LzXwrdgWOp/DicdUZlbZOHMH4M1zfW3oQnCwHl6pJnK/aYXVSbfY27TBNiWn9uNCGKTr07Y9jBJnlb/nVhRPLT+MBGBc2z6Rk0ARC5bNA1Ms5rkfoeupHnUnGzcacOTaG/Flg9tda/CxwhtJRvueeWA7yZaCtz/DojTHjBkYC5pvku5EiakWFuWLY5aXNN8Eu3ooiOoaFNpPdzxnWn8naasI6ZFVFQS8moIgT6jRpJNL2t7rwGI+ABoSQwK1dzr1ZRXWmYB12vti8zA4g== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=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=//F2GhOiDp7dpoyo4ouIb6eodIxceJSkpp/KMnoztT8=; b=xnPBT34Rhrk7ThJqRPqLsPsgq4y25YJmEviDIsIbuc0MMLz/ylc68GP1Pe3ewM9WgPc/ugH5X+DTXnCCLE0DeG/hzpZVI8/fziP7wJPc1mcu6ekKgh35lpErTDrkVbLkJ59s9JVa/121EZqDEGgsmShA474jgflHhMtCWnOexh8= Received: from MN2PR12CA0027.namprd12.prod.outlook.com (2603:10b6:208:a8::40) by MW4PR12MB7192.namprd12.prod.outlook.com (2603:10b6:303:22a::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9632.13; Tue, 17 Feb 2026 20:11:15 +0000 Received: from BL6PEPF0001AB57.namprd02.prod.outlook.com (2603:10b6:208:a8:cafe::1c) by MN2PR12CA0027.outlook.office365.com (2603:10b6:208:a8::40) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9632.13 via Frontend Transport; Tue, 17 Feb 2026 20:11:13 +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=satlexmb07.amd.com; pr=C Received: from satlexmb07.amd.com (165.204.84.17) by BL6PEPF0001AB57.mail.protection.outlook.com (10.167.241.9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9632.12 via Frontend Transport; Tue, 17 Feb 2026 20:11:14 +0000 Received: from nigeria-2635-os.aus-spse (10.180.168.240) by satlexmb07.amd.com (10.181.42.216) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.17; Tue, 17 Feb 2026 14:11:12 -0600 From: Ashish Kalra To: , , , , , , , , , , , CC: , , , , , , , , , , , , , , , , , , , , Subject: [PATCH 4/6] x86/sev: Add interface to re-enable RMP optimizations. Date: Tue, 17 Feb 2026 20:11:02 +0000 Message-ID: X-Mailer: git-send-email 2.43.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: satlexmb08.amd.com (10.181.42.217) To satlexmb07.amd.com (10.181.42.216) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL6PEPF0001AB57:EE_|MW4PR12MB7192:EE_ X-MS-Office365-Filtering-Correlation-Id: bf240555-0730-4fa2-b0e2-08de6e60b3f4 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|36860700013|82310400026|1800799024|7416014|921020; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?CsbCerqTpXfl/rJYEqr6/Qw7gvMYY/F6yuNqNvK8iYTRxKW2rv1rUGtAmgHH?= =?us-ascii?Q?iSq2cJGboisL5rKn0H34KxOkMAILSygMhPaq/hscK97IhTi58Fkg+9lv/Jx5?= =?us-ascii?Q?w8prkiyZCCjAC46wZHIyVT28Vtg6+Xsc+/Q9e9ngpskiePoQyZxp74+hARW8?= =?us-ascii?Q?SMogIucoLgtJWB1vfbP3HhvTeVN8rbAZ9EJZk3L5VfmrrJGezwttGauK3gnz?= =?us-ascii?Q?vH810u5KnAJ4oAAeP+WF6JyfTWeiUWwLHV1VMZGPJYfdbLoi5UuO2anvCmop?= =?us-ascii?Q?6jaDJHUSFxw40fPvcyL5zf6RZlmJ91PsWwFEcBdNJ4pemHBk1Kt23LTG5y2R?= =?us-ascii?Q?RmNJ56jfC3R/ODj9tYMO2JaHGEUzdkJbhvAZFUniCUdUg66eqApZGxuyGh3R?= =?us-ascii?Q?QSrpaBIgqDjCinWp1wNM4Fu0vaZvP2Axv5JW1TDbVKt5aQrWXIUFzokdJcER?= =?us-ascii?Q?ocxe9hrNwwHvTf5fc3QK6SNs18XQlb+eBhOKlquBkMmtXbkJ1DNrglf5lHhM?= =?us-ascii?Q?DKnhWTStyXW4MHc2kSfp42zo538VuHVsotnVv7yPmi/r3hLeU3UonnfN8gdv?= =?us-ascii?Q?3b+RXuqF3vWoypRYGmKggmnxmkG+2Dx7t7+U+PLjsMYI7Rgg87CN7BUNIrBT?= =?us-ascii?Q?/1j2dAAUbhgrejv2tTr0ZlsA/16Mn28gsFf5JBCe2uLbeb+zZj9boEr/5KLb?= =?us-ascii?Q?3thg5kVCkJZkrU36Do2zKK/I2vEKs1/Iv9g4FrwbgTXHWmeI2qb7NAv2FmXa?= =?us-ascii?Q?7W9hmLba8pKZF4ez9Ho5Wf0FDhZqbH79TzCur6vE5w8bMW02q2GNIyaERD0O?= =?us-ascii?Q?XVAn5zPi0yB+XCd7lSE5/uUsKD5TlEAMFLRukCLcMeipQFf1S5y98XUFvOcr?= =?us-ascii?Q?LTJxDPiSy2GnxIwq7l1ITctzmIQJuZloM1eEbzDqUmgIYyzZeO0IWIr74E5y?= =?us-ascii?Q?4mY3R4+Ev7yADwo0I5PwXnKqUCH8fpPKrvGx1AphZB19cahqrstAHK4os+Fo?= =?us-ascii?Q?I4PcDBrEIEdKXEY4fciGgEu+xg7kP3XwLG1dwsid5jeAgSICQ2i7PrM38ipv?= =?us-ascii?Q?4B+pnyl7eLCGRPWgwY8M4qTQfMeqHWG3O0jAmJpbsH/AzkgkEW3H6M0co0Ov?= =?us-ascii?Q?4HyZpoxukvG2aUiPn5jjfAgvi0X7aksrKdspyU80SZvLuynE3GrY8wIlvz/D?= =?us-ascii?Q?5mjDeDakDdKR1FqgC+ocVdDHTfVGXrQTPuHbR7pTQ4Nah0XzbyJgEa6m0axn?= =?us-ascii?Q?+G+fL6oqQPJ6iCjju1U6YY29IdfM5S3oJfS+fVdxYcW2PcMbN18H5hbyoNZM?= =?us-ascii?Q?M1GZY2uPP1LmXAuy2zfgA5iZ0DtbbhEBq9faKou7P8rj+l21cKoFFNrIjcIE?= =?us-ascii?Q?9dp20E3d3vRhJtiWvsDTgSsBTAMYpeO4gHCmeNWnDH3fuYnwEKC7VzZew4Ws?= =?us-ascii?Q?691oxayM160PYSnTrTL0KwFB9Jby5B2mX8RT3LMQeqpUeA+Se9Bl8BopzAAH?= =?us-ascii?Q?hrnVMHvO4eRoqyXH/PtYrd80c7HnOwLg6e4TeISGk5VPud1cIUPd7DvAJceI?= =?us-ascii?Q?eQYGNQHsDv5eUMXFTPfJT87xhYZnsNHx7+WPCflRWtlhHObnGvq+6HzFrijA?= =?us-ascii?Q?tScnqBr3ELY5K7g6IwtlAgd/YO/WT6ttTWdMYU4hTJ1Yb/NE/Ds1M6OTVR4W?= =?us-ascii?Q?rR7i68ySWxSELGBIfOXn1+Fic1g=3D?= X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:satlexmb07.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(376014)(36860700013)(82310400026)(1800799024)(7416014)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: kw5BaH90D9LKFj3x/eoTwlPfYR1CDXbI7g+K5OiA3r69iDC5bQ0WT4czjXKoB98Silqx8IJ+esyhJrXhAu7BGyRgVe0XkIx/Ak7F0wP/EL88iM//mf9+DaSzA6ifSoXgMWLwnRdgQ5AfnWRyHFu3qMnZ5ASmVyWLU1PV3+a/TlEhIVw55ptmab/FmGHkHZjAiL7cPV2+Ia7dDoNUEmefiGkSuGe3uBOlGPWgV4FmiVQovFFXH2L7/fOG+mZhV+sRWlbxhAjWqKjhw8yf3S0DRcKTCq2UZF4HEqhcUyrTEZX+uhW9rkXDLHd9dgkdeesIgvJ9kI23FBhv536lPyIpdmhInZ1O6uYeaHVXUfyR/B08Jq+5tT41Fe8BaF0tTDeTzlyda2ji5etIg8qywkOVKLx5DXAdLRfgZkhuiF6WhRdIiOGBtxO9YtkX3JzRtEX6 X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Feb 2026 20:11:14.7823 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: bf240555-0730-4fa2-b0e2-08de6e60b3f4 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=[satlexmb07.amd.com] X-MS-Exchange-CrossTenant-AuthSource: BL6PEPF0001AB57.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: MW4PR12MB7192 Content-Type: text/plain; charset="utf-8" From: Ashish Kalra RMPOPT table is a per-processor table which indicates if 1GB regions of physical memory are entirely hypervisor-owned or not. When performing host memory accesses in hypervisor mode as well as non-SNP guest mode, the processor may consult the RMPOPT table to potentially skip an RMP access and improve performance. Events such as RMPUPDATE or SNP_INIT can clear RMP optimizations. Add an interface to re-enable those optimizations. Signed-off-by: Ashish Kalra --- arch/x86/include/asm/sev.h | 2 ++ arch/x86/virt/svm/sev.c | 17 +++++++++++++++++ drivers/crypto/ccp/sev-dev.c | 4 ++++ 3 files changed, 23 insertions(+) diff --git a/arch/x86/include/asm/sev.h b/arch/x86/include/asm/sev.h index 0e6c0940100f..451fb2b2a0f7 100644 --- a/arch/x86/include/asm/sev.h +++ b/arch/x86/include/asm/sev.h @@ -657,6 +657,7 @@ int rmp_make_shared(u64 pfn, enum pg_level level); void __snp_leak_pages(u64 pfn, unsigned int npages, bool dump_rmp); void kdump_sev_callback(void); void snp_fixup_e820_tables(void); +int snp_perform_rmp_optimization(void); static inline void snp_leak_pages(u64 pfn, unsigned int pages) { __snp_leak_pages(pfn, pages, true); @@ -677,6 +678,7 @@ static inline void __snp_leak_pages(u64 pfn, unsigned i= nt npages, bool dump_rmp) static inline void snp_leak_pages(u64 pfn, unsigned int npages) {} static inline void kdump_sev_callback(void) { } static inline void snp_fixup_e820_tables(void) {} +static inline int snp_perform_rmp_optimization(void) { return 0; } #endif =20 #endif diff --git a/arch/x86/virt/svm/sev.c b/arch/x86/virt/svm/sev.c index a0d38fc50698..713afcc2fab3 100644 --- a/arch/x86/virt/svm/sev.c +++ b/arch/x86/virt/svm/sev.c @@ -1305,6 +1305,23 @@ int rmp_make_shared(u64 pfn, enum pg_level level) } EXPORT_SYMBOL_GPL(rmp_make_shared); =20 +int snp_perform_rmp_optimization(void) +{ + if (!cpu_feature_enabled(X86_FEATURE_RMPOPT)) + return -EINVAL; + + if (!cc_platform_has(CC_ATTR_HOST_SEV_SNP)) + return -EINVAL; + + if (!(rmp_cfg & MSR_AMD64_SEG_RMP_ENABLED)) + return -EINVAL; + + rmpopt_all_physmem(); + + return 0; +} +EXPORT_SYMBOL_GPL(snp_perform_rmp_optimization); + void __snp_leak_pages(u64 pfn, unsigned int npages, bool dump_rmp) { struct page *page =3D pfn_to_page(pfn); diff --git a/drivers/crypto/ccp/sev-dev.c b/drivers/crypto/ccp/sev-dev.c index 1cdadddb744e..d3df29b0c6bf 100644 --- a/drivers/crypto/ccp/sev-dev.c +++ b/drivers/crypto/ccp/sev-dev.c @@ -1478,6 +1478,10 @@ static int __sev_snp_init_locked(int *error, unsigne= d int max_snp_asid) } =20 snp_hv_fixed_pages_state_update(sev, HV_FIXED); + + /* SNP_INIT clears the RMPOPT table, re-enable RMP optimizations */ + snp_perform_rmp_optimization(); + sev->snp_initialized =3D true; dev_dbg(sev->dev, "SEV-SNP firmware initialized, SEV-TIO is %s\n", data.tio_en ? "enabled" : "disabled"); --=20 2.43.0 From nobody Fri Apr 3 04:37:58 2026 Received: from BN1PR04CU002.outbound.protection.outlook.com (mail-eastus2azon11010019.outbound.protection.outlook.com [52.101.56.19]) (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 925AC37881C; Tue, 17 Feb 2026 20:11:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.56.19 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771359100; cv=fail; b=PRTufEX8PPJJw6IQpNDOzcqhpFZPkkkR/yTDV8/9c85kJUa54IKISqlWYt8+b7AwxoBx959omS/DnRrl3XW8lzu4lBpp1L2ts7TTanzDnKJDG9pCS+fHFkiQUD0fjJxqhdRNUUedZWrYqcS8ZWNyiFGQ5JSjgqVD0K6zY6cfRp8= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771359100; c=relaxed/simple; bh=8G/SQJwSkgM34hSNp/8W5+Ia+Pfb8ZgFDhqxUvxpagg=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=BPixbpfDDPrwwq41BpLv1vLcSOtRp/c/6eDs+2tFJZBsiNmcwkm1qM3LY3jTisqiEvTALSb5owtTCxJ3v5rDvIZ9oKIqPKqQLwM046yNH9rI2iEYbEhS2KwrDVNxtxD1mBFD55CwK/cQ2nFECOz4KMzajAzJ5BUVVigy0bw8jfY= 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=LIUPMUkh; arc=fail smtp.client-ip=52.101.56.19 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 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=amd.com header.i=@amd.com header.b="LIUPMUkh" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=fx1QtxtEfiLKb3UFLgUtZCanfKdlJVsapcZUh0A2TsgXvvTtPWGm8ugbpiv4gSl86A1txRwngxxBtE+oxzHugPasyurOYFRg+hVDStY8OL6K3R+KVhdcXwSPdN6AjruSdBhNEjZsof9BlVoMWbesGJML6KEre8Wsz/GVTovAtoXqp6j5KP+kWjjFPGvGqVbSqbzmoPUc1JZMhLrkL+/k1Mi9J5ldBM1R808bK3yJtpXNPk84enFK7BnBkXT6iwaD+K35kIu9Qn8gd3JxVcngS8lAjYv/6d9OFxz/pHEQVLmFpgwfIt4gH7y0nRhy7GLAocCTGtZNm1SlbC7ONYprXg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=HeSfSdri0VkXVVAOjkc9Inj9ao04BkmJRwvso5QMS7Q=; b=VltluH9dn6eccfI2oRS68iZWoTaf3tgDbqcaZ+11TkX1+3jjWXlZzFKI+NpEVl/Gdq4P5LOvdp/Wb3Fe3h+wdOvRa1Jh5VylvKCFdSvVHY5TFJH0KnYZqPcYcolKfT0Chv2GpGpXSl0msdQANa4vpT0DfmFV8Gc0JZs4ZtOb78/pCg+KNdiXLXILTwQQ87IAeWLV+54RAW9GXfoJ7T/QM/SFKskRUv1/qCL1MkktwV4pxxxSPLHT4ADOCTSWr93vj3lJIsB4tN2EOVS0r3OYm7a96qHz9SLSvEWtU9c6Damt0c44Qf05T6Y2kpXVh6YFUK1skCG9I8sg9VeoJYP/Kw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=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=HeSfSdri0VkXVVAOjkc9Inj9ao04BkmJRwvso5QMS7Q=; b=LIUPMUkhoBaADU30X5haV1bZ2eXdaWseg+Q++fd+VlZGeOmFxkwe1Jt98tkLX5jZhMO9PwuNmrwKqug1v3oMff2KMBKEQeLsmrdp3GxrNLndPbSnwTGnHDK6KK7qIkt+FHxB5W+O/e+lXaBTYSZ3RfPJX9NYSAEJ8QKoQwLN+Qg= Received: from MN2PR12CA0003.namprd12.prod.outlook.com (2603:10b6:208:a8::16) by DM4PR12MB7504.namprd12.prod.outlook.com (2603:10b6:8:110::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9632.13; Tue, 17 Feb 2026 20:11:30 +0000 Received: from BL6PEPF0001AB57.namprd02.prod.outlook.com (2603:10b6:208:a8:cafe::e4) by MN2PR12CA0003.outlook.office365.com (2603:10b6:208:a8::16) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9632.13 via Frontend Transport; Tue, 17 Feb 2026 20:11:29 +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=satlexmb07.amd.com; pr=C Received: from satlexmb07.amd.com (165.204.84.17) by BL6PEPF0001AB57.mail.protection.outlook.com (10.167.241.9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9632.12 via Frontend Transport; Tue, 17 Feb 2026 20:11:29 +0000 Received: from nigeria-2635-os.aus-spse (10.180.168.240) by satlexmb07.amd.com (10.181.42.216) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.17; Tue, 17 Feb 2026 14:11:28 -0600 From: Ashish Kalra To: , , , , , , , , , , , CC: , , , , , , , , , , , , , , , , , , , , Subject: [PATCH 5/6] x86/sev: Use configfs to re-enable RMP optimizations. Date: Tue, 17 Feb 2026 20:11:19 +0000 Message-ID: <88ddc178dcab3d27d6296e471218f13a4826f4a8.1771321114.git.ashish.kalra@amd.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: satlexmb08.amd.com (10.181.42.217) To satlexmb07.amd.com (10.181.42.216) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL6PEPF0001AB57:EE_|DM4PR12MB7504:EE_ X-MS-Office365-Filtering-Correlation-Id: 94598225-bf98-4a1d-e5b0-08de6e60bce3 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|82310400026|36860700013|7416014|376014|921020; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?g52DwhbaMRMZnkPiYrIPJCfpzqv6y+BcMsXZauCV62ryD34aZ5kKI8RPnZIi?= =?us-ascii?Q?FLlaO9z0BQSckqnUc7zE56XPR70bIKmXm6AtU1ofcmGARN6adQicYlype44q?= =?us-ascii?Q?acbGW5j4BhmihCODofh2g9kLBkF0w9q7WsVk5v6qbJK0Az94PepapLUzmVc0?= =?us-ascii?Q?ovtYunArhy5jZ1Aa2pNbj0NdyieJDbBnVfY5jSPkRH6HMTdNDVZGh0OgZeen?= =?us-ascii?Q?U22adrr3eTj4TV/cJy9pSwZagldntfIaCHJC/+dpGQ/e2rxKkk5hQrNWRZh4?= =?us-ascii?Q?gjcReEqrmbKCPpDm7jstySCcIbKSFc0jiVTotL7OzDYmRR2vOsb8IvaBgyqo?= =?us-ascii?Q?CCCbt6NLRvYTGNzVZmwXmeV/1MEK3Aeyr6oagIMJJVosIFcE5xVjDVNfL2R1?= =?us-ascii?Q?5CV5N8TbF8pWh7FR4085PoGZLpIrKPI4V6eyKqmk7xefUqzigmz++B+oSXTz?= =?us-ascii?Q?bshGGxlHonb34aEyn45bKlK458Or+Xx1ebrbkLHq+RYFfZvSYA+R2TwHzADN?= =?us-ascii?Q?i5hm3cPO+yXbhIE/y7JcRZ5j00VvcvvTqAWyviNagPusGWqHnirRwBQREq9K?= =?us-ascii?Q?tAL/kcgWuYbAEVx0u98MNhVXBRJiXBs9gyRUO43AjaYwm9EEt7OJ1Jgh9q8k?= =?us-ascii?Q?oAtJdflrGz6J5UVMkaRgb9cVthb1Ku1xpqYu4W+ixMixzg/GNUdKqnn50MMN?= =?us-ascii?Q?e+8ckxDP3suSch25F5loYYeHEAnLMtgP7Pw+nZu1pI1YbjcM4AU6XMNbLtVb?= =?us-ascii?Q?A9BV3p6CwnSavv4mM4cwA/rbELccezLoyBVG98ymPVjn2DEHeCe6czVchCKy?= =?us-ascii?Q?W4SWLaShz0hvwlEgjiZXnLBZCsTVSErcc+B6Nq8MXVmrCshlkEg4uidOyr7f?= =?us-ascii?Q?zDutgIe2hRbbMTaSiwLlc6L1zSxeJUTBDZZ8dP/wmhihpFYXRAB7KaB/zJUy?= =?us-ascii?Q?UhzQ/A9pi3Vf5Zois/6WGj6xvPnPQFgyeQw3SwynRQCthxLcfmHcUC2D9OG8?= =?us-ascii?Q?I52dXrO20OlY7v7RK4eVWmrq5Ml8xjeWOoV0MxpCKFE/sIBQvU+klBI7XQys?= =?us-ascii?Q?QRIcAz+FbN+KonxMHeMVnWtk0OfkKcDSK1rkTvtH5DomYE3vQfmL/tsNA6XQ?= =?us-ascii?Q?BLFiYOlk1ierc69P4O7JHhBo3EHNmnP3zT+96GW06ywWE0zBFITsDlG+Uq4c?= =?us-ascii?Q?4FIa0wOf8FdhlkakdD+8KB/7fw5d4f2KT/wcYTIU5TIKJ+/JgZYbTYkw1unZ?= =?us-ascii?Q?2y/9JeX3UdqqJ/D7Lo0J/dhYj+Rth2PDvbN9tmg4bewSrKuVMcdhbG9C+pDl?= =?us-ascii?Q?Id3xOlZCp45M5NtIeXlwbImrDYj+pZNk0T3G0FDGwzXY81StFqaSX+Xq6DSj?= =?us-ascii?Q?okSuVLME496wAMzfCuMyitjuXkETbCDKZmeI8AkIeneMdaUk1x9D65241v9f?= =?us-ascii?Q?D6ADpEeIJ439S/aapxhN/atA7N0cVtP0F8C4a91KDl5Rzbyz0mmkvAeTs7Tl?= =?us-ascii?Q?iQZwCAXAZb0bTp3pbXMKzr6HVXGL80x8aYpXeZsLEkqbighRFOb9dX0P8CAk?= =?us-ascii?Q?X9mogaPMzk71EhkLW4RZO8TGQWlMGy7z8Gbl7Fyhx24uT48eVknNu1eg0w1D?= =?us-ascii?Q?P2qYtvvVADfdC+ziti37zzNGMJXIiT7Nqv2H99Gk8gigTovCXqOwZeXAGzgP?= =?us-ascii?Q?5ZL4+EAyaF3svtTz3FbweL2SMeg=3D?= X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:satlexmb07.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(1800799024)(82310400026)(36860700013)(7416014)(376014)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: g37XSC670hltZrZFJd6ZuUMTNyXyriB/XE4PjHMQGaMC+3leEFMcC0f2KvOnEkcPVW6MkEvYRRVLITaz1+sgxyqr6xU1Z/HUNj77cP8vlyNBtXL9WnkYXcDxZ4ufrRkhpyIQ5gNE6Tmclbbp3opQr3Mtwxw75rDHGQ70GtWaAJNwkTCV9tQdwFB8O5kMHOHrWpWawmaAhrzVUCSziTzHw3t3QFFWzNXUxJLW0RcjuNoL5vBxJDfAgLhso8HE+2vBu9pkIDWU/USL1pRTjY/Hx2em8IKomFHIE/aIjOW9wBMM++NHeL6ZNCjaN0Fwj92eNEFkHm9cnnEiP+CRyVwIHn1ib/cFrMGtWyfL2cN8sDdZhkcilfKPsiTz0gx5peKq5fT//Nk0ExVldXuOmYQoDQzyG0u9vAW7gmanhm6tMQu9C18z7fmRkFeifjwCEWK/ X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Feb 2026 20:11:29.7725 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 94598225-bf98-4a1d-e5b0-08de6e60bce3 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=[satlexmb07.amd.com] X-MS-Exchange-CrossTenant-AuthSource: BL6PEPF0001AB57.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM4PR12MB7504 Content-Type: text/plain; charset="utf-8" From: Ashish Kalra Use configfs as an interface to re-enable RMP optimizations at runtime When SNP guests are launched, RMPUPDATE disables the corresponding RMPOPT optimizations. Therefore, an interface is required to manually re-enable RMP optimizations, as no mechanism currently exists to do so during SNP guest cleanup. Also select CONFIG_CONFIGFS_FS when host SEV or SNP support is enabled. Suggested-by: Thomas Lendacky Signed-off-by: Ashish Kalra --- arch/x86/kvm/Kconfig | 1 + arch/x86/virt/svm/sev.c | 79 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 80 insertions(+) diff --git a/arch/x86/kvm/Kconfig b/arch/x86/kvm/Kconfig index d916bd766c94..8fb21893ec8c 100644 --- a/arch/x86/kvm/Kconfig +++ b/arch/x86/kvm/Kconfig @@ -164,6 +164,7 @@ config KVM_AMD_SEV select HAVE_KVM_ARCH_GMEM_PREPARE select HAVE_KVM_ARCH_GMEM_INVALIDATE select HAVE_KVM_ARCH_GMEM_POPULATE + select CONFIGFS_FS help Provides support for launching encrypted VMs which use Secure Encrypted Virtualization (SEV), Secure Encrypted Virtualization with diff --git a/arch/x86/virt/svm/sev.c b/arch/x86/virt/svm/sev.c index 713afcc2fab3..0f71a045e4aa 100644 --- a/arch/x86/virt/svm/sev.c +++ b/arch/x86/virt/svm/sev.c @@ -20,6 +20,7 @@ #include #include #include +#include =20 #include #include @@ -146,6 +147,10 @@ struct rmpopt_socket_config { int current_node_idx; }; =20 +#define RMPOPT_CONFIGFS_NAME "rmpopt" + +static atomic_t rmpopt_in_progress =3D ATOMIC_INIT(0); + #undef pr_fmt #define pr_fmt(fmt) "SEV-SNP: " fmt =20 @@ -581,6 +586,9 @@ static int rmpopt_kthread(void *__unused) cond_resched(); } =20 + /* Clear in_progress flag before going to sleep */ + atomic_set(&rmpopt_in_progress, 0); + set_current_state(TASK_INTERRUPTIBLE); schedule(); } @@ -595,6 +603,75 @@ static void rmpopt_all_physmem(void) wake_up_process(rmpopt_task); } =20 +static ssize_t rmpopt_action_show(struct config_item *item, char *page) +{ + return sprintf(page, "RMP optimization in progress: %s\n", + atomic_read(&rmpopt_in_progress) =3D=3D 1 ? "Yes" : "No"); +} + +static ssize_t rmpopt_action_store(struct config_item *item, + const char *page, size_t count) +{ + int in_progress_flag, ret; + unsigned int action; + + ret =3D kstrtouint(page, 10, &action); + if (ret) + return ret; + + if (action =3D=3D 1) { + /* perform RMP re-optimizations */ + in_progress_flag =3D atomic_cmpxchg(&rmpopt_in_progress, 0, 1); + if (!in_progress_flag) + rmpopt_all_physmem(); + } else { + return -EINVAL; + } + + return count; +} + +static ssize_t rmpopt_description_show(struct config_item *item, char *pag= e) +{ + return sprintf(page, "[RMPOPT]\n\necho 1 > action to perform RMP optimiza= tion.\n"); +} + +CONFIGFS_ATTR(rmpopt_, action); +CONFIGFS_ATTR_RO(rmpopt_, description); + +static struct configfs_attribute *rmpopt_attrs[] =3D { + &rmpopt_attr_action, + &rmpopt_attr_description, + NULL, +}; + +static const struct config_item_type rmpopt_config_type =3D { + .ct_attrs =3D rmpopt_attrs, + .ct_owner =3D THIS_MODULE, +}; + +static struct configfs_subsystem rmpopt_configfs =3D { + .su_group =3D { + .cg_item =3D { + .ci_namebuf =3D RMPOPT_CONFIGFS_NAME, + .ci_type =3D &rmpopt_config_type, + }, + }, + .su_mutex =3D __MUTEX_INITIALIZER(rmpopt_configfs.su_mutex), +}; + +static int rmpopt_configfs_setup(void) +{ + int ret; + + config_group_init(&rmpopt_configfs.su_group); + ret =3D configfs_register_subsystem(&rmpopt_configfs); + if (ret) + pr_err("Error %d while registering subsystem %s\n", ret, RMPOPT_CONFIGFS= _NAME); + + return ret; +} + static void __configure_rmpopt(void *val) { u64 rmpopt_base =3D ((u64)val & PUD_MASK) | MSR_AMD64_RMPOPT_ENABLE; @@ -770,6 +847,8 @@ static __init void configure_and_enable_rmpopt(void) */ rmpopt_all_physmem(); =20 + rmpopt_configfs_setup(); + free_cpumask: free_cpumask_var(primary_threads_cpulist); } --=20 2.43.0 From nobody Fri Apr 3 04:37:58 2026 Received: from SJ2PR03CU001.outbound.protection.outlook.com (mail-westusazon11012056.outbound.protection.outlook.com [52.101.43.56]) (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 D6E3F3783C6; Tue, 17 Feb 2026 20:11:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.43.56 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771359117; cv=fail; b=HiGRY8gPWmbRcxHi3nU7SnxOKjKkHF8FHfCDnpPllcw2RN6qQSfO8vUVQUmdxX1ccMOu1FL3XGA8oyQM01e2pBclD9R7Fo7MMzmKEye1ayg6ojCANWBhMLe2AD5RvCPOLZM2cyKzWHqn0C4v71knjLc84EYJ8mgDNJ7jb5lmCLA= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771359117; c=relaxed/simple; bh=B0OXcxvl7b7H37/bSw9q4ws48CrUSYMJ4KNnIElYick=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=AVCt+MAjGSVOaAE3zXDhJBl03Y2p+S8rFMOv7P6Mt13w+U5mmHnOicYEytMUiW7kN/3YOOTDlgGsQXitKA+G9aF2kJaBgMsZo5uYY2cytgLd4J5LEVyL08P2DntVnzWoMxU6xVfeqJ071cwP6MJNwMrEuCC5gPQD/eaPWdnqCqU= 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=4y4eElFq; arc=fail smtp.client-ip=52.101.43.56 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 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=amd.com header.i=@amd.com header.b="4y4eElFq" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=ITFG+yVtF9kemd4/HWHeDc5Dk+nyqQYk4ZQI0cTGyViw7l4AVwjpzxKe+3zYbyHOjGM5l7Y1vDLMcczfsTrctYp0/0TjooB7XtUI8lBCC+WGpK4AIlVob94/1rRiLBDSkLOHATHM0LGCyV2yO79fbnClh4CP3vyq3CGjrSgHVEbhooywcYqEiyQD18j4iL9T8eQwLi/8eNnBtWunBux4F27/u5FKaxWJF+1qP/YMkZyuTz08DuXDPyQ0sj0x9I3H5D71fN6EJ0lxblZdSttc5jrVX0LlKHizuKfmoSFLoeA4XjETDl5YHB7g//AGVELlORewAqAj5ADeJZRPNI1qoA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=9OopiRyGXJgKP709R9DvIEBsffFv53x5Q4m8igvCf0g=; b=C1zC3vzi7PKGZIk2205TQ7u+N4LqSb0YtScnQw0DGpTOTS/ayezSWpno8mPhWW9QCXwqsuM+4mwceCNHQF6svfm7A/VCt8/MMYc0FuO9nowiNy990rsNqKFVwd9u2HGR0XkWvYwnuDKmLenvY2WQLfaI7jY8BALgjZcguS59e4ZiaNIMBiUnSqGnFt2P4Sfoldl0h8Ptus0eELZ2c5sUKgof/VgMKtG1e7k1yVHr50tNjwnonNMDF11Zgcd018wUJXtbYl1LhzlFLjX5CC4UkEJzbvov9SRGRPh4MvtFAx9nJp6CiC1Ev57n5Sw4J5nnBjxgxryk+s5MQolq4C8fjQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=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=9OopiRyGXJgKP709R9DvIEBsffFv53x5Q4m8igvCf0g=; b=4y4eElFqEdyt31UrI8rb6C1q3bXYIXV1drbhPS6PnsmqsFeIVIrnODmhikoADRtYxbFweP+0he70lU6kT2JLLA4eEH/vWT5mtYPKw/medEXLFHCiFnKp/Y4dbdV4GngdvSphV3lIeZ8rZSwYTGgQb1vSNseiYqwQNmJyNlaFRTE= Received: from MN2PR20CA0059.namprd20.prod.outlook.com (2603:10b6:208:235::28) by LV8PR12MB9183.namprd12.prod.outlook.com (2603:10b6:408:193::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9611.16; Tue, 17 Feb 2026 20:11:46 +0000 Received: from BL6PEPF0001AB53.namprd02.prod.outlook.com (2603:10b6:208:235:cafe::3a) by MN2PR20CA0059.outlook.office365.com (2603:10b6:208:235::28) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9632.13 via Frontend Transport; Tue, 17 Feb 2026 20:11:46 +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=satlexmb07.amd.com; pr=C Received: from satlexmb07.amd.com (165.204.84.17) by BL6PEPF0001AB53.mail.protection.outlook.com (10.167.241.5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9632.12 via Frontend Transport; Tue, 17 Feb 2026 20:11:46 +0000 Received: from nigeria-2635-os.aus-spse (10.180.168.240) by satlexmb07.amd.com (10.181.42.216) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.17; Tue, 17 Feb 2026 14:11:43 -0600 From: Ashish Kalra To: , , , , , , , , , , , CC: , , , , , , , , , , , , , , , , , , , , Subject: [PATCH 6/6] x86/sev: Add debugfs support for RMPOPT Date: Tue, 17 Feb 2026 20:11:34 +0000 Message-ID: X-Mailer: git-send-email 2.43.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: satlexmb08.amd.com (10.181.42.217) To satlexmb07.amd.com (10.181.42.216) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL6PEPF0001AB53:EE_|LV8PR12MB9183:EE_ X-MS-Office365-Filtering-Correlation-Id: ed5f0ce5-a96f-4853-68b8-08de6e60c6c1 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|82310400026|36860700013|7416014|376014|921020; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?GwIbYjXDus9MyxZDav3UcYFT+EsdLwEiDUXUMYRKpj1eC579K4jC/FuLvd7e?= =?us-ascii?Q?/vA802X1Ykv6L4I3dx674Ggs2mg87KMlQW87xjZLLPwsI6e4tTpcoP+ONyvb?= =?us-ascii?Q?mxXQCwMZy9cFrnpwmVwABkM+Ryf4JiyxFjyx5QOfFWKH07fhsMbNEYnUYdzk?= =?us-ascii?Q?530Cm1md27RwAQhJylUBXZop95vNFQWL4//2TCeF1lt5FOY9kRUSGuyd9Bwq?= =?us-ascii?Q?Vl7SY1LhShcWznmw0t3JieCLNdVVoFe+4UDq7vlVuxwjJgPmxfKgMiH2rc8K?= =?us-ascii?Q?YV/wEtcDzqVNEt1VpUkjwZCcky2Hp57HtPFupgdg/o5YprubWV091zIoId5d?= =?us-ascii?Q?APLqVoqCiy+Kj4j9zO7LnJDQHQzK7JzHP3/sY9apotMhX/JLQnseanhH2AeE?= =?us-ascii?Q?HQAqA0Y3IlgkA91wVnST1KKvV+6cZXNM2UiFYamVbSoO1UByBVJIMpZkLEwi?= =?us-ascii?Q?7OSU6CvQ7sccEbC4yOoI3iVd8wTdcD1mv4WvyH0oAShyiOIsKbQYGe+Xj97v?= =?us-ascii?Q?Vw5/8ZPIOGI6+P4yTNCMV6qIXZ/C4pcD5j2b2hghLVhMAJb2A/wiUFeskCHd?= =?us-ascii?Q?unoTjqYQVE8Q2RG7iLdYeZ7xx0eiafEY3C3cw730HMnCK8V1cdaEaH7ST2wX?= =?us-ascii?Q?URkFdb4J2nPT/PDJU6JWZcS8wNXuRtWy2dOBwypb1uWy4bz7Ds1qbnJodRwI?= =?us-ascii?Q?4CrsEwoQDcBUTbngpbwJ71B062rqtWRAs4gnfVWL9bjpcwQ48KZzPwM3ZUm8?= =?us-ascii?Q?v3YZ//a/T0nONpl9BXncjgSHSlqGz1m70HF70FAFpNPnkzzKXRkemiPr6HDM?= =?us-ascii?Q?12RTRSx4sO/9BBR5iHE52CtkLW3qcT9M5GqR5WYGbbw8zjvfC9NFJS4QS+a/?= =?us-ascii?Q?Y+sNbGHYY6frVukkpSfIuUDVZweOoE3nUFQMTDnDD08WOk1RW1uPETGE2pTd?= =?us-ascii?Q?DbB4+ZZjHr13ylUgs4iqsmUeRkfk+kOWkXDUwL0mQZXBgONYC6AbPmKxOAkq?= =?us-ascii?Q?yeWimUwLaXzf8SUHma+7G8mpGCn5mIIwyKEyXbSR4o4uqko5+13Xbm7XdRiS?= =?us-ascii?Q?HPcCQGJEXH3R28SIqT6Xv/CSHQ3EvXjLYU4GlEfCXnDvjbwhwjMmuy6Qat/p?= =?us-ascii?Q?mOOhEbTRp5pMO5idEthdXvdNlSTNY6HQfWQRgIJNEfrSOrxBrln04lmmrkCC?= =?us-ascii?Q?NqbsVRI+2nVuaeWlab7La7gnMasXnlr1zPrPb7miWio20zE7OMjcicKzwlkC?= =?us-ascii?Q?3CC3RGFIbJUV+Oyae3iD2u1T8V9n1oYJhWHPXNSr2c1Ggyps0YCYLXfxk082?= =?us-ascii?Q?2q0Jk3ShHE9M5/8DkSztAoIUPt6FmhdxWMW5j/URGcoK3iKYSwFs9SKSsDAP?= =?us-ascii?Q?xXk4GvrgIAohpbNT8MnZ5VXhJdVodiP49sqhSWIYe2nvJq4EDl9RPt5ZfvED?= =?us-ascii?Q?JVsa0cQfSjhZ2AxQSDTWmZQpPNCOf77CJDcNDAAksrQo5VJBjvsGPXYZkXeA?= =?us-ascii?Q?1eXbdDmiyrbYUad4Rq0U0ZjXShlDMq27j9eKv5AkUbr8g71GcCk21DPyhpQW?= =?us-ascii?Q?6Bq6ZflzL7cTVomncInQEc3MTPKb7uapOtuQAUnrv1x9jwUfDGTT4wFJK3ND?= =?us-ascii?Q?O8VBl7aTLDbXyILrRyfydEzkI3GFT7vpAer8uepjEF052crNAfPUiwz/MdrZ?= =?us-ascii?Q?UKl/OGW4xm071G2dTdLuQf/GEjA=3D?= X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:satlexmb07.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(1800799024)(82310400026)(36860700013)(7416014)(376014)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: TnUfdQVPJ2YUzY/jTGsueRucKsrB2952hZSnnH3rMRJGYhPMvFB9guGgGPDxGFA+fQdCc+Y7OOPEIyvaN70kGe8rIjCSjh/HzWjDBEvQK1KlldHs0bCClGStM8Cx6jHNAjYFsfzzukNSY/0LadQ4FYeYgjaSX/AXn4g9Skf+rZoPDG6H4xDuzZq9Tp08HMIrI42nZ3ZMphwPf2Aji3eTRmmUP0DENvc128au3plDUa8w8FFMupNZph6WzCJ5SdDjIXf4+hAmWMLCv7GB1+7GwiY3SGx1pe+6hV00Tw02WVksfjmaz2nMNYqe8ozX60wI/tqcwSHNAFKw76z+FGgZJ8bERYY/KQLJ6jzIq4pJ/YhXgZ+qRXh7GmxBxjCbpCZhYw8Jlxud5hmIx0suX3T+biqUl8LgP/Fj/HX+kitgUcVYd5xDq0jsWGPMQBUw/3ez X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Feb 2026 20:11:46.3201 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: ed5f0ce5-a96f-4853-68b8-08de6e60c6c1 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=[satlexmb07.amd.com] X-MS-Exchange-CrossTenant-AuthSource: BL6PEPF0001AB53.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: LV8PR12MB9183 Content-Type: text/plain; charset="utf-8" From: Ashish Kalra Add a debugfs interface to report per-CPU RMPOPT status across all system RAM. To dump the per-CPU RMPOPT status for all system RAM: /sys/kernel/debug/rmpopt# cat rmpopt-table Memory @ 0GB: CPU(s): none Memory @ 1GB: CPU(s): none Memory @ 2GB: CPU(s): 0-1023 Memory @ 3GB: CPU(s): 0-1023 Memory @ 4GB: CPU(s): none Memory @ 5GB: CPU(s): 0-1023 Memory @ 6GB: CPU(s): 0-1023 Memory @ 7GB: CPU(s): 0-1023 ... Memory @1025GB: CPU(s): 0-1023 Memory @1026GB: CPU(s): 0-1023 Memory @1027GB: CPU(s): 0-1023 Memory @1028GB: CPU(s): 0-1023 Memory @1029GB: CPU(s): 0-1023 Memory @1030GB: CPU(s): 0-1023 Memory @1031GB: CPU(s): 0-1023 Memory @1032GB: CPU(s): 0-1023 Memory @1033GB: CPU(s): 0-1023 Memory @1034GB: CPU(s): 0-1023 Memory @1035GB: CPU(s): 0-1023 Memory @1036GB: CPU(s): 0-1023 Memory @1037GB: CPU(s): 0-1023 Memory @1038GB: CPU(s): none Suggested-by: Thomas Lendacky Signed-off-by: Ashish Kalra --- arch/x86/virt/svm/sev.c | 101 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 100 insertions(+), 1 deletion(-) diff --git a/arch/x86/virt/svm/sev.c b/arch/x86/virt/svm/sev.c index 0f71a045e4aa..c5a11f574e42 100644 --- a/arch/x86/virt/svm/sev.c +++ b/arch/x86/virt/svm/sev.c @@ -21,6 +21,8 @@ #include #include #include +#include +#include =20 #include #include @@ -151,6 +153,13 @@ struct rmpopt_socket_config { =20 static atomic_t rmpopt_in_progress =3D ATOMIC_INIT(0); =20 +static cpumask_t rmpopt_cpumask; +static struct dentry *rmpopt_debugfs; + +struct seq_paddr { + phys_addr_t next_seq_paddr; +}; + #undef pr_fmt #define pr_fmt(fmt) "SEV-SNP: " fmt =20 @@ -547,9 +556,14 @@ static void get_cpumask_of_primary_threads(cpumask_var= _t cpulist) */ static void rmpopt(void *val) { + bool optimized; + asm volatile(".byte 0xf2, 0x0f, 0x01, 0xfc\n\t" - : : "a" ((u64)val & PUD_MASK), "c" ((u64)val & 0x1) + : "=3D@ccc" (optimized) + : "a" ((u64)val & PUD_MASK), "c" ((u64)val & 0x1) : "memory", "cc"); + + assign_cpu(smp_processor_id(), &rmpopt_cpumask, optimized); } =20 static int rmpopt_kthread(void *__unused) @@ -672,6 +686,89 @@ static int rmpopt_configfs_setup(void) return ret; } =20 +/* + * start() can be called multiple times if allocated buffer has overflowed + * and bigger buffer is allocated. + */ +static void *rmpopt_table_seq_start(struct seq_file *seq, loff_t *pos) +{ + phys_addr_t end_paddr =3D ALIGN(PFN_PHYS(max_pfn), PUD_SIZE); + struct seq_paddr *p =3D seq->private; + + if (*pos =3D=3D 0) { + p->next_seq_paddr =3D ALIGN_DOWN(PFN_PHYS(min_low_pfn), PUD_SIZE); + return &p->next_seq_paddr; + } + + if (p->next_seq_paddr =3D=3D end_paddr) + return NULL; + + return &p->next_seq_paddr; +} + +static void *rmpopt_table_seq_next(struct seq_file *seq, void *v, loff_t *= pos) +{ + phys_addr_t end_paddr =3D ALIGN(PFN_PHYS(max_pfn), PUD_SIZE); + phys_addr_t *curr_paddr =3D v; + + (*pos)++; + if (*curr_paddr =3D=3D end_paddr) + return NULL; + *curr_paddr +=3D PUD_SIZE; + + return curr_paddr; +} + +static void rmpopt_table_seq_stop(struct seq_file *seq, void *v) +{ +} + +static int rmpopt_table_seq_show(struct seq_file *seq, void *v) +{ + phys_addr_t *curr_paddr =3D v; + + seq_printf(seq, "Memory @%3lluGB: ", *curr_paddr >> PUD_SHIFT); + + cpumask_clear(&rmpopt_cpumask); + on_each_cpu_mask(cpu_online_mask, rmpopt, + (void *)(*curr_paddr | RMPOPT_FUNC_REPORT_STATUS), + true); + + if (cpumask_empty(&rmpopt_cpumask)) + seq_puts(seq, "CPU(s): none\n"); + else + seq_printf(seq, "CPU(s): %*pbl\n", cpumask_pr_args(&rmpopt_cpumask)); + + return 0; +} + +static const struct seq_operations rmpopt_table_seq_ops =3D { + .start =3D rmpopt_table_seq_start, + .next =3D rmpopt_table_seq_next, + .stop =3D rmpopt_table_seq_stop, + .show =3D rmpopt_table_seq_show +}; + +static int rmpopt_table_open(struct inode *inode, struct file *file) +{ + return seq_open_private(file, &rmpopt_table_seq_ops, sizeof(struct seq_pa= ddr)); +} + +static const struct file_operations rmpopt_table_fops =3D { + .open =3D rmpopt_table_open, + .read =3D seq_read, + .llseek =3D seq_lseek, + .release =3D seq_release_private, +}; + +static void rmpopt_debugfs_setup(void) +{ + rmpopt_debugfs =3D debugfs_create_dir("rmpopt", NULL); + + debugfs_create_file("rmpopt-table", 0444, rmpopt_debugfs, + NULL, &rmpopt_table_fops); +} + static void __configure_rmpopt(void *val) { u64 rmpopt_base =3D ((u64)val & PUD_MASK) | MSR_AMD64_RMPOPT_ENABLE; @@ -849,6 +946,8 @@ static __init void configure_and_enable_rmpopt(void) =20 rmpopt_configfs_setup(); =20 + rmpopt_debugfs_setup(); + free_cpumask: free_cpumask_var(primary_threads_cpulist); } --=20 2.43.0