From nobody Tue Dec 16 13:47:56 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 1FDF6E728CF for ; Fri, 29 Sep 2023 18:20:42 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233857AbjI2SUl (ORCPT ); Fri, 29 Sep 2023 14:20:41 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43854 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233833AbjI2SUc (ORCPT ); Fri, 29 Sep 2023 14:20:32 -0400 Received: from DM6FTOPR00CU001.outbound.protection.outlook.com (mail-centralusazon11020024.outbound.protection.outlook.com [52.101.61.24]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 1999C1A5; Fri, 29 Sep 2023 11:20:30 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=QC7yPmH/JrFcy7YcWD7eUI/UWr30yvQYnmAyhMdjxQs1MarcFCgv1b+XXB1kFSwpNIMJZ/I52Z4rkwwaDP/kex+M1AjECa5j+52k32MenCjYWIKhO8eJZlLoQywYdoKHKoT6HL0EOym/u1aETB3GKTJwRAlFugMq5WMSe1cztmXUtgZ1/+Mlz6tas9nobUB6OZxotqA5/iJb3GETZ/mE+tSUKmdTGSI++Ry1GM5JdES4p1EpN5BEQ1ZjO2GcT1WH/2hYOreTBzGurV7/f6hzoa41IVIh0z7GwMT5OHFSEv4Hhaiy1MBlLqVaNitkhW/SytoHyn3NwMj9khdOgXuZuw== 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=PSOLdTfIZ4+T830+nJ7RRdvPJg2csnPAprl1jzEEDuY=; b=evCDBtRbZsS8cHxLzM9hACL0gQUfAbd+QrsRtMm38RxRH3DMaOG00FZ3w926ZBFQzwRywoh+gLmNugM05jZOw6bH+3jWolFFwxsz5kQbkcT3PnRQ+q8yaO6yzx+PQwQkYK/kHT0h4gxHdUJJScetuXmWb4PbZcYE/jcCF8XrJ7+fz/V1S3OnhsvbqkV01sHf21oZNKjoo3SbmkqbHMSIPmoobsBrCw1tXZlG32W6kWwpPXaXjxDxgRQQ7u+LlNZNU/EdzVgX5OCrR/v6foyexkRo8FR14RIZ2RBiOky6WnqTaAtOzvvof/+Ws+x9OIT38IOrSgx81xD3S2InJJEYUQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=microsoft.com; dmarc=pass action=none header.from=microsoft.com; dkim=pass header.d=microsoft.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=PSOLdTfIZ4+T830+nJ7RRdvPJg2csnPAprl1jzEEDuY=; b=CPp9yv1CruSIsC4twRpUAS+reuxxfHbHQeUTGF7SOjVDQexmcRCu6twmLxQ2I5dc5T+lrgRsgYImGqtjmJajaKVb900Z4/YaSwGbfnrbSi0dhcqh+4YI5+TywnNjE0USHGDnkmcentiGKMxiuF617+c/5hsjAZjSkLECk1PDr3o= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=microsoft.com; Received: from DM6PR21MB1370.namprd21.prod.outlook.com (2603:10b6:5:16b::28) by BL1PR21MB3377.namprd21.prod.outlook.com (2603:10b6:208:39d::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6863.14; Fri, 29 Sep 2023 18:20:24 +0000 Received: from DM6PR21MB1370.namprd21.prod.outlook.com ([fe80::eff:aea7:be24:8e44]) by DM6PR21MB1370.namprd21.prod.outlook.com ([fe80::eff:aea7:be24:8e44%4]) with mapi id 15.20.6863.013; Fri, 29 Sep 2023 18:20:24 +0000 From: Michael Kelley To: kys@microsoft.com, haiyangz@microsoft.com, wei.liu@kernel.org, decui@microsoft.com, tglx@linutronix.de, mingo@redhat.com, bp@alien8.de, dave.hansen@linux.intel.com, hpa@zytor.com, luto@kernel.org, peterz@infradead.org, thomas.lendacky@amd.com, sathyanarayanan.kuppuswamy@linux.intel.com, kirill.shutemov@linux.intel.com, seanjc@google.com, rick.p.edgecombe@intel.com, linux-kernel@vger.kernel.org, linux-hyperv@vger.kernel.org, x86@kernel.org Cc: mikelley@microsoft.com Subject: [PATCH 1/5] x86/coco: Use slow_virt_to_phys() in page transition hypervisor callbacks Date: Fri, 29 Sep 2023 11:19:05 -0700 Message-Id: <1696011549-28036-2-git-send-email-mikelley@microsoft.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1696011549-28036-1-git-send-email-mikelley@microsoft.com> References: <1696011549-28036-1-git-send-email-mikelley@microsoft.com> X-ClientProxiedBy: CY5PR22CA0048.namprd22.prod.outlook.com (2603:10b6:930:1d::29) To DM6PR21MB1370.namprd21.prod.outlook.com (2603:10b6:5:16b::28) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM6PR21MB1370:EE_|BL1PR21MB3377:EE_ X-MS-Office365-Filtering-Correlation-Id: fb218858-7da1-4d54-234e-08dbc118bf6e X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: mUPHgUoH83MYBMMK8yvbfGOxIuuTET1OnWf1aZ1Of89d1oiR4Cmn468l2LRh3ABqS2JIrvwvzeTz8pElA6pd+AJ27531aA/6wqO6/7AqeN+Amy9Ewig1YB6ZmR9XWmjftofSwwEirEkxFWfm6fWgmrJIdhKUzz6JzC7Yd6HBzebHEKSqi7LZVZ66CF7LkTXTbY9Ms+9UwNb69YC4zksq5AjHwn4YjhLEqDOMroHAMkIC8//Mq6HXYC7z7OYH5njwklkB/DRokbyFzLN2tgbuj9OLckpeRgo35RCH56ZCnYGjwdws2jJ07Lb68zxvRnyYZ8YtVDHGqJZHdHoIZXJ8OBg/49Dyxcgww5+G8lVh0WpFiW02E+HjiSSJYtYwKOfCFqy0jw8QVLCl84TMjKorc5zRGDtXyUL+vX2LlljuV6e5AMRYEUXMga6m5xiEPpBSFEQTvR0F7VNG82yr7TN914rGBfgQl4fxqjVQDQi1WJz68qmMAuS5Tq3duFt0UYk2/kPVwEkSk9xSYBsxHhKyFq3SKF9fLOP+r/vRXqp2OV4qWoej0CUiLFgpic1Ocmosq5sXKBurI6jF6hu1wvN93bN8P5g+d47pKEkJUWhCZmDsk10RX0OFxPppAPZMdCJOMCyd6/HXgYFVBYwxsYYlhVO7I0p9nL8a0ogaxK/dm+20BbW3QOpUZ8QN83ns5IBt X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM6PR21MB1370.namprd21.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230031)(396003)(39860400002)(136003)(346002)(376002)(366004)(230922051799003)(186009)(451199024)(64100799003)(1800799009)(41300700001)(6506007)(6512007)(6486002)(52116002)(478600001)(6666004)(2616005)(2906002)(316002)(66946007)(66556008)(66476007)(5660300002)(107886003)(10290500003)(8676002)(8936002)(4326008)(26005)(7416002)(921005)(82950400001)(82960400001)(36756003)(86362001)(83380400001)(38100700002)(38350700002);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?JgbRmJ8EAInjrnLV8/uwCDX97hmH7czFClEH3Z0rvZ4siS3I7S24wn5HrRYB?= =?us-ascii?Q?9/hIUxFUoLE52RdvIOuIGsFWRR9HsFy31ks5zMBVbFHc5vtziH2WqCoBXVoB?= =?us-ascii?Q?zmviF5wz2clvVRfJHjPiVLcEKtPH21uci8wnvTy8eDSHljEHtNdfH87OUdWD?= =?us-ascii?Q?ApmtoCid6IJFa7jmbNCqjfWfpqRDn+5/xYebUxwr4Mdk1PiKR9UnsQDVErLe?= =?us-ascii?Q?6zg80V/jTn4A+CcvsE6bjor/hw4ZGgnlCYiaagAodzBFkNhoOqG7KfL7Fe6Z?= =?us-ascii?Q?b6xA9yzec5208Tc6eaeZ3g100F2l08I3k1OfYhkANQnt0DybMEETIajzw8U5?= =?us-ascii?Q?9CfE5l2K9J/6BtaeUYatHf8kNRSSRvV7/KX4uavMACdkZUF4Gm8kuLNtU/vG?= =?us-ascii?Q?v2WkUtCUQRLddEjl2ZIFNyAU/mpCx2fvAK0e+zJbJEUfAhmQZn5Cw+Vhp/Mi?= =?us-ascii?Q?MqMrlGTaJ+12OdaR3CQK9k2+A7BFxp4mgX/SAlgdifLTG8WwtwCNBCMoRuIO?= =?us-ascii?Q?KeD04bNYXWcLcp+9J76gCzlhp58EGfj/UvIl1V3wMJ6Afufly+lwT/WHSZpc?= =?us-ascii?Q?3jCyTNSMjX1Zx4aRKENzC+ckubJefSKj0IEYAW4QiLq64LzkPQ3my8rp1IRg?= =?us-ascii?Q?PQ5JpALGaqVDUqaz7hSlvk3UsnnhV/lLF6DU81Ir/8oAwt2enqNrdUfBsVEn?= =?us-ascii?Q?InnqIkj8T9Rqamhx37V8fZUdB6IqVlTxAqikuUheoys86Gfw4t1Y4CQEpJCt?= =?us-ascii?Q?9vtRNobxBwC2Le1wHIvG8XL4eWdpARhyzbn7QjKEFL00k8d4llNtke0NFqjc?= =?us-ascii?Q?TYIIr/lSJXccFO7ayKtch8GQ6TSWcKqZxFtOYLkyCODg1tUsqje6pGrFK7qZ?= =?us-ascii?Q?tnJ8FJuENUbo2FMQnNZX/qULDVrBTNxQAFx/it0bu94M5O3mU3Ws8DZWhMyN?= =?us-ascii?Q?9qy+IlVoayyjMFjYIKgHj3QRk/Wdd/AORvSRgn1QFFGOqRHIkNQh4JQ82unk?= =?us-ascii?Q?tRWH2+7V7jWbW0whVA7el36Fgtl8DYfiDr+KsgXWuJ4UwNoFawpFo6q7L337?= =?us-ascii?Q?Ebl0KjFQJMpfAzJzFiMuLqlYVcR5lhJMqYEpMQ2uxTCy4iozKFFOUv3cxFPL?= =?us-ascii?Q?uYYpCbq9OCKacaTFXMbtrXD4YA51bksNSytAYCHr/cBp1i7WqJdtxDbJMuA3?= =?us-ascii?Q?F/tg5f1xZNi+Y+hCVevw91HlVj0Y3H5b73AjYKBh8yKXj0JvkjXgWbhiZnkm?= =?us-ascii?Q?A7NgHRgll01cx2sbb5aZdVIDQBLTP4hBdE2WC3Ueot/Yl3E4DoD7jvoYk9x7?= =?us-ascii?Q?mUSe5JSepfX3UJgK58ZdKIdsFYYSyZQE4GS+bIBBnU923MT+2cj/TN87Agvb?= =?us-ascii?Q?QEp6rYfh2jwQMx89HZHvrZz8w6hcn+nvK3Si0jSEuTDn2Md0y9JPdb+bQt5Q?= =?us-ascii?Q?VWvjOCYM8G/S5o3mZsxIusluzPOXCY4kBQWnB1MqE/RPOm2mKkOtG2v+I+1n?= =?us-ascii?Q?l8VddH8r//ggUQ3kbsyzVuUCiIwmCVJvhCfm7UHg9dgcecYjszAJGLJYLTK7?= =?us-ascii?Q?lrsyi9eTjT/1IEativARqdwG99IOoZl2Wh3wSsB7qwdAY1xNLSrXnJqp3PO5?= =?us-ascii?Q?pw=3D=3D?= X-OriginatorOrg: microsoft.com X-MS-Exchange-CrossTenant-Network-Message-Id: fb218858-7da1-4d54-234e-08dbc118bf6e X-MS-Exchange-CrossTenant-AuthSource: DM6PR21MB1370.namprd21.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 29 Sep 2023 18:20:23.9537 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 72f988bf-86f1-41af-91ab-2d7cd011db47 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 9HkN7j8Cfuex2mmxod46j1H/sjSzSY7izgmBv4voykqZoAzRC5UwUGOIjdJf8PoilC4FcatAMAYDDcx3uHD7Gw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL1PR21MB3377 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" In preparation for temporarily marking pages not present during a transition between encrypted and decrypted, use slow_virt_to_phys() in the hypervisor callbacks. As long as the PFN is correct, slow_virt_to_phys() works even if the leaf PTE is not present. The existing functions that depends on vmalloc_to_page() all require that the leaf PTE be marked present, so they don't work. Update the comments for slow_virt_to_phys() to note this broader usage and the requirement to work even if the PTE is not marked present. Signed-off-by: Michael Kelley --- arch/x86/hyperv/ivm.c | 9 ++++++++- arch/x86/kernel/sev.c | 8 +++++++- arch/x86/mm/pat/set_memory.c | 13 +++++++++---- 3 files changed, 24 insertions(+), 6 deletions(-) diff --git a/arch/x86/hyperv/ivm.c b/arch/x86/hyperv/ivm.c index c1088d3..084fab6 100644 --- a/arch/x86/hyperv/ivm.c +++ b/arch/x86/hyperv/ivm.c @@ -524,7 +524,14 @@ static bool hv_vtom_set_host_visibility(unsigned long = kbuffer, int pagecount, bo return false; =20 for (i =3D 0, pfn =3D 0; i < pagecount; i++) { - pfn_array[pfn] =3D virt_to_hvpfn((void *)kbuffer + i * HV_HYP_PAGE_SIZE); + /* + * Use slow_virt_to_phys() because the PRESENT bit has been + * temporarily cleared in the PTEs. slow_virt_to_phys() works + * without the PRESENT bit while virt_to_hvpfn() or similar + * does not. + */ + pfn_array[pfn] =3D slow_virt_to_phys((void *)kbuffer + + i * HV_HYP_PAGE_SIZE) >> HV_HYP_PAGE_SHIFT; pfn++; =20 if (pfn =3D=3D HV_MAX_MODIFY_GPA_REP_COUNT || i =3D=3D pagecount - 1) { diff --git a/arch/x86/kernel/sev.c b/arch/x86/kernel/sev.c index 2787826..f5d6cec 100644 --- a/arch/x86/kernel/sev.c +++ b/arch/x86/kernel/sev.c @@ -784,7 +784,13 @@ static unsigned long __set_pages_state(struct snp_psc_= desc *data, unsigned long hdr->end_entry =3D i; =20 if (is_vmalloc_addr((void *)vaddr)) { - pfn =3D vmalloc_to_pfn((void *)vaddr); + /* + * Use slow_virt_to_phys() because the PRESENT bit has been + * temporarily cleared in the PTEs. slow_virt_to_phys() works + * without the PRESENT bit while vmalloc_to_pfn() or similar + * does not. + */ + pfn =3D slow_virt_to_phys((void *)vaddr) >> PAGE_SHIFT; use_large_entry =3D false; } else { pfn =3D __pa(vaddr) >> PAGE_SHIFT; diff --git a/arch/x86/mm/pat/set_memory.c b/arch/x86/mm/pat/set_memory.c index bda9f12..8e19796 100644 --- a/arch/x86/mm/pat/set_memory.c +++ b/arch/x86/mm/pat/set_memory.c @@ -755,10 +755,15 @@ pmd_t *lookup_pmd_address(unsigned long address) * areas on 32-bit NUMA systems. The percpu areas can * end up in this kind of memory, for instance. * - * This could be optimized, but it is only intended to be - * used at initialization time, and keeping it - * unoptimized should increase the testing coverage for - * the more obscure platforms. + * It is also used in callbacks for CoCo VM page transitions between priva= te + * and shared because it works when the PRESENT bit is not set in the leaf + * PTE. In such cases, the state of the PTEs, including the PFN, is otherw= ise + * known to be valid, so the returned physical address is correct. The sim= ilar + * function vmalloc_to_pfn() can't be used because it requires the PRESENT= bit. + * + * This could be optimized, but it is only used in paths that are not perf + * sensitive, and keeping it unoptimized should increase the testing cover= age + * for the more obscure platforms. */ phys_addr_t slow_virt_to_phys(void *__virt_addr) { --=20 1.8.3.1 From nobody Tue Dec 16 13:47:56 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id B768CE728CF for ; Fri, 29 Sep 2023 18:20:38 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233873AbjI2SUi (ORCPT ); Fri, 29 Sep 2023 14:20:38 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43886 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233856AbjI2SUe (ORCPT ); Fri, 29 Sep 2023 14:20:34 -0400 Received: from DM6FTOPR00CU001.outbound.protection.outlook.com (mail-centralusazon11020024.outbound.protection.outlook.com [52.101.61.24]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 8ED5C199; Fri, 29 Sep 2023 11:20:31 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=hCWVqFO9jReYAMvA2CeP7x4dsq3gwOvrkTgFRYmwS+zzhcxJARNa9dYXKdbrsoVgkCm375cafyZfGxD8ecxtH6TebulY46SdOT/xUV4ifBtu5mSWurGu0zhgTYOtgMBOFmb5becmFRRHjjCtIy7l9Lsm3Y2Y+teAdShoP2yjwUL5eqA0j5hTrACYA+ge7izQvJWmpg5ew/TN2FRExfm2vRQo0m69/gt6Bi/ydlcLqcvvmEQVyUZxh57U6C5ZPm/nK/USsl8kUoQijqeTpDxp6DympEo7v/vidKLS07IXw2W3s15CMvYU7m7qN/LH9m9B4HFga62Y2XYNjTA4VK2Q6A== 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=2Rjf3q/TwNEaI/C1ZPj7OLMe/dHReo1HA7m/Y30XYgE=; b=Q9bPhxTRqeTOCU/POO2tCj7Oq80HCwDU388vNvmAwPXqsviCvOE9Bh3yysKbWnaFlfikxw+KceGLPblGlYFmGx60Dn4olSBrw51XgHdLfXL9SrCBaUzVEJik1p/I3InTrg8MacpOoJdkl08HlOYHSH8Pmn3vcX1ndKhTyWWXTCDsC5Xg7FCjHjVdgAbXdZsetvRTk6LtnJ6XEdAvNdQqHGODuvELohNmWgLXYB0JPyuiBGMVOmlEcvoKTNJMCQEL2dtc40GlKjpnN+tWiDlvzH37MMtcpLy5B090lrP43OndZkAnWz3UMx8um3jN08sz55qthBZbyBgo2yjE/bz8+w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=microsoft.com; dmarc=pass action=none header.from=microsoft.com; dkim=pass header.d=microsoft.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=2Rjf3q/TwNEaI/C1ZPj7OLMe/dHReo1HA7m/Y30XYgE=; b=PjA6oR0DZsp1EB4eT6wT2Ui7u1erumzl5ZEpNnb5YQiufYczBPIi+khAMMZ9PihMONA0Fz95sYyJTHoboOqDIVI5KXSFvtDHouVVNMvUw2C//SfJpBnF7Kxv9NOaHuav/TMQMfCr22OLGzUwC0N3yEK/h6gu/5nIKT/rX9utrvw= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=microsoft.com; Received: from DM6PR21MB1370.namprd21.prod.outlook.com (2603:10b6:5:16b::28) by BL1PR21MB3377.namprd21.prod.outlook.com (2603:10b6:208:39d::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6863.14; Fri, 29 Sep 2023 18:20:25 +0000 Received: from DM6PR21MB1370.namprd21.prod.outlook.com ([fe80::eff:aea7:be24:8e44]) by DM6PR21MB1370.namprd21.prod.outlook.com ([fe80::eff:aea7:be24:8e44%4]) with mapi id 15.20.6863.013; Fri, 29 Sep 2023 18:20:25 +0000 From: Michael Kelley To: kys@microsoft.com, haiyangz@microsoft.com, wei.liu@kernel.org, decui@microsoft.com, tglx@linutronix.de, mingo@redhat.com, bp@alien8.de, dave.hansen@linux.intel.com, hpa@zytor.com, luto@kernel.org, peterz@infradead.org, thomas.lendacky@amd.com, sathyanarayanan.kuppuswamy@linux.intel.com, kirill.shutemov@linux.intel.com, seanjc@google.com, rick.p.edgecombe@intel.com, linux-kernel@vger.kernel.org, linux-hyperv@vger.kernel.org, x86@kernel.org Cc: mikelley@microsoft.com Subject: [PATCH 2/5] x86/mm: Don't do a TLB flush if changing a PTE that isn't marked present Date: Fri, 29 Sep 2023 11:19:06 -0700 Message-Id: <1696011549-28036-3-git-send-email-mikelley@microsoft.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1696011549-28036-1-git-send-email-mikelley@microsoft.com> References: <1696011549-28036-1-git-send-email-mikelley@microsoft.com> X-ClientProxiedBy: CY5PR22CA0048.namprd22.prod.outlook.com (2603:10b6:930:1d::29) To DM6PR21MB1370.namprd21.prod.outlook.com (2603:10b6:5:16b::28) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM6PR21MB1370:EE_|BL1PR21MB3377:EE_ X-MS-Office365-Filtering-Correlation-Id: 876bc7ea-dd06-43cc-f419-08dbc118c020 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: drKoxyNdfNHGgC2dAgfKk4mGYSq5cFVuJNnNMIDX207u2WoRdzsI7vITLfmdZTnBTkhZnUrrY7pmAFk4SzmhMafuWwPPTHOu5OzdhhDKTmjZ96BDP21re9J01cXxnjp1tE926ixm48OOf+LClSqUuJR36FzVqZu+CKPtAgM0mgKIMeI+F8M0Bkhw2h+qWdljNsBb/CRzCZDl6l8MoRaHMjWCx4+3xmL4gr/rqNXLSSYEC8u2popVg/C3sk+90BarA5AONI/xnwkBc7Fl8uGMnth8BuYOo000Qj7tx+UlQb3tDiEHQk05gfoa3fLUIckFQE2sfMo5cBS1jniwr3LvCtqoXeSpzi3HwjxEXWzcVr8itWKB6s/nEG04VkiZsVcSKVlVFtk/a6xcleuciScMQ/R90nJChc83Mmwk3AGXvEeRrjUX4wG57cZ0n6zAwviA9g25MYUZWLBLvVis23EW5uZiGNPhHYweWnLZGqgysCVkkzfAOQ+feLNolaLUpYnCq8yln3u/Ims4ZmF1Jtj2nCxT9n1jR7ffVz8XI1f4yT7UpB+ce15YpgzUoGF883K8U1wvgCVTm9F73vLrDWp9222IeJ5qkesTAtYSufT3UKB8mba/XwiUNBdMd72hhtqYaBWaZCri8HICtjrPEVJTCncZ9dtzgPj3gWoACcSpTAC544HTALBSiSDi0eoD3p7E X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM6PR21MB1370.namprd21.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230031)(396003)(39860400002)(136003)(346002)(376002)(366004)(230922051799003)(186009)(451199024)(64100799003)(1800799009)(41300700001)(6506007)(6512007)(6486002)(52116002)(478600001)(6666004)(2616005)(2906002)(316002)(66946007)(66556008)(66476007)(5660300002)(107886003)(10290500003)(8676002)(8936002)(4326008)(26005)(7416002)(921005)(82950400001)(82960400001)(36756003)(86362001)(83380400001)(38100700002)(38350700002);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?RpoZgqrfEqTuymHl33dS+zp9mv/oxMaZ+DN6gGuh0ZwgRcWJGPmvj+4bpVT+?= =?us-ascii?Q?96dKh8bCZc2IMV4jBhYoBR3zO0uGTyKhmYFG33/E7QR7z1FXcVZKUtjIP7kl?= =?us-ascii?Q?0wo9xM1Q3eaHq8Pv93Ep2nZrFshl+ninCYOxj9bUjaWP7wOpdI0aWICNS5zC?= =?us-ascii?Q?6+ntSGP9irc+kIVOi+ShDxxAUKFBQJItK3ESo1l+FD/8kxkwJR6cfdcMumdf?= =?us-ascii?Q?QOAXdvO4ipkLLjJkZF6K9FsQTtSLtQbvCHNetx4K0HjCUG3pTdN71m1DcgpY?= =?us-ascii?Q?DNpLCowD7sN9mgeDLF9jn3ZJKxQLyCsLScbYFBAblibdC1ng9MrqKrextZBA?= =?us-ascii?Q?S8NxGXBOjpVAxPFpd/0/8XFZZqdyx3R17rcJF6pwCcdWrUzrQzuHhOw1OpjH?= =?us-ascii?Q?12xRHSNLbPgP8J/mYW4HFRdCFgBwcWaBONvT83vBIeSpN/J5xgIONIFhwPVe?= =?us-ascii?Q?cZX+HNoWSdur4DTSwtzf5w+3JFFJ9BWduHBHPsVBIHSLX/7fAZQwgKb8mq+6?= =?us-ascii?Q?FM6+PgQyWDDvUryNoCZ/KIU+IuYzSGn95FcyLtELmAhivw6/PFSyu7FUe45e?= =?us-ascii?Q?fDwNkMZ5H1mTy662IHiAoqUHLKs2fs3MNj3SsW4IzSzwngpC4AwxeNJLVIfC?= =?us-ascii?Q?fR0LIFlUGr2iB0IdfgdTZiWtkMsB9aTDpf7KOD36+RT901wAKeZ40PpUphx6?= =?us-ascii?Q?m1xTqt0H6tflPGrmCMZN8Z4Pjf07WolTB4IwZgnKzcEsqZJQHVB8q1ABms+0?= =?us-ascii?Q?ac0o4cu67W7jlN2XWfavlEWvqxcTipxF7DbsE+UXk851fPo2AF/qWkQl5795?= =?us-ascii?Q?yg53c863yubZmNyQrxmRoN3f3MLOiR2fXWrYO5I8htk+4MQwiV5IvDzczwO7?= =?us-ascii?Q?H9d5AvbH20Fkf9ROq21ENh51V1Fwh03tJfSnZoKm062UmQ0nNNf8NiNUwED0?= =?us-ascii?Q?QI3+i7LMduiLbjW2Z8qfvRzzpkK0M4WfgDXZshk3Xezj5w9cGbe1wPGkRSNH?= =?us-ascii?Q?9rOyQORQ3q2cjrIOHvNwUr/I19I/rpSwxkdQF2OY7fHbmQlddX6Q05uSOQEM?= =?us-ascii?Q?8Ry2mMLz3y2uZXS9AEjtkmPtyReT3jwpsDDj8k+uIBQpSzbXvLFSmg05KNTr?= =?us-ascii?Q?ho0k8ph4M780zgXp087JckdGP7qMNtj59SB6FvDHLAMIbrXKpRaumpYolck6?= =?us-ascii?Q?PsSVK9dxrXsZxQhWJGa9LyLgyZxBeaifrEMDNignJvyCRBxls53k8njOZGFw?= =?us-ascii?Q?0IX+xN5F9n2/1epPb+P0/J8BCctv49VwPv2FdcHmNvwtilqwuT+mUFPGtOrx?= =?us-ascii?Q?6yCp7Z7JaFEY1Xhr7NgQGqZCUX34+vFyoEwp1dqoRw/PIggD2W75+8yTRK9S?= =?us-ascii?Q?ntxHNZ351zT6VU9upMhdMUU8EKpIj7L/d0PY1yOjki3Mifhbtz6cYjFrhKKv?= =?us-ascii?Q?/HhR7SM1dBQV0PEx1tk8+INHsczjn3RlRqZETa8Qr7m6CJk4UoHIenWMj9G8?= =?us-ascii?Q?nfx+yp0GWfPxAyPMU39kcDpSstbZD9X5SXb4BJHo/LTMsGJKUdMU77yqAMi+?= =?us-ascii?Q?xrxt0N8Ihr7rMKGfdigMCIuqspMI9uOKOw13nbeF0Mt1ZX7CmVG93Vjh2LWG?= =?us-ascii?Q?cw=3D=3D?= X-OriginatorOrg: microsoft.com X-MS-Exchange-CrossTenant-Network-Message-Id: 876bc7ea-dd06-43cc-f419-08dbc118c020 X-MS-Exchange-CrossTenant-AuthSource: DM6PR21MB1370.namprd21.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 29 Sep 2023 18:20:25.1192 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 72f988bf-86f1-41af-91ab-2d7cd011db47 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 03L3zsEtkDnp8U5ikYVePuc/qNx63RA5q6dnkItn5IfTL++430f/Z/SGDXNl3qkK3LAwq0dkLzuWvGn3RvLYkw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL1PR21MB3377 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The core function __change_page_attr() currently sets up a TLB flush if a PTE is changed. But if the old value of the PTE doesn't include the PRESENT flag, the PTE won't be in the TLB, so a flush isn't needed. Avoid an unnecessary TLB flush by conditioning the flush on the old PTE value including PRESENT. This change improves the performance of functions like set_memory_p() by avoiding the flush if the memory range was previously all not present. Signed-off-by: Michael Kelley --- arch/x86/mm/pat/set_memory.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/arch/x86/mm/pat/set_memory.c b/arch/x86/mm/pat/set_memory.c index 8e19796..d7ef8d3 100644 --- a/arch/x86/mm/pat/set_memory.c +++ b/arch/x86/mm/pat/set_memory.c @@ -1636,7 +1636,10 @@ static int __change_page_attr(struct cpa_data *cpa, = int primary) */ if (pte_val(old_pte) !=3D pte_val(new_pte)) { set_pte_atomic(kpte, new_pte); - cpa->flags |=3D CPA_FLUSHTLB; + + /* If old_pte isn't present, it's not in the TLB */ + if (pte_present(old_pte)) + cpa->flags |=3D CPA_FLUSHTLB; } cpa->numpages =3D 1; return 0; --=20 1.8.3.1 From nobody Tue Dec 16 13:47:56 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 7CBA0E728D6 for ; Fri, 29 Sep 2023 18:20:50 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233960AbjI2SUu (ORCPT ); Fri, 29 Sep 2023 14:20:50 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45146 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233887AbjI2SUj (ORCPT ); Fri, 29 Sep 2023 14:20:39 -0400 Received: from DM6FTOPR00CU001.outbound.protection.outlook.com (mail-centralusazon11020024.outbound.protection.outlook.com [52.101.61.24]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 852561B6; Fri, 29 Sep 2023 11:20:33 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=d+68mP4K5AlfZAcx4OLfdGPfBJhD4vqYR7BcGGptnuk2gTKIxHMF41Xol72Z59yHGfXaZbfa+einXd7Qe5BsVP/NvExgJWu9tmqzUISPuOUGbsrwNvFQk9anPXJoPpxKA+0y6WDlPoT33GRvyFyRTu1k2QAFFgbrQD27Htd1TZJEe3TP9c95j/qMlT/UHUtPbKLQsc9KglGaa36O2wFmut6NX1ikmfLyuEvg3Hbqicw+3dYAsa4XPXdY1SzuPh/8x44gbr7xIjl60G9o2dvDFTyj4Crzs3HLvNB4hQHyIUqfEY3QI+mB1jGOa2BKGIwjmnwSVJ/yoEjPg6XFnYL18A== 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=xVtMPBDElysEOjbegf4nL2dYZfzxFly9Up4BTuDtAyo=; b=FG/pIe+y/a3BbzyJ60nuI/fYGVnB/ccrFGTg3n519bLDDxQg+CQxmGrY3kJ75jQLblB5gM0B4d88qUS1SyM3PKdE92PNE9kRZkg5IVdT9kfUysUJWeOcOIOzwUFfy9hWbt6BgfSrJx2qTpjmw0L7L9xfLGbWLz/bPg1uKQxwfGHseUIhwbSI+/W/IyWCCea1GKUGHVk/CtLD5MN6R/GMC2HuCLNq4Pwf1wsgySwHdKlKUBd9eBWrtObrWtwo80a/7tpKYwzH/WSt0V6X/5NLT8b532EPEY4Njae5NuQvORSHPoJy67wD78ZxTmQA6UydO3Y29Nz/mUUHiX+UQ6YOnQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=microsoft.com; dmarc=pass action=none header.from=microsoft.com; dkim=pass header.d=microsoft.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=xVtMPBDElysEOjbegf4nL2dYZfzxFly9Up4BTuDtAyo=; b=d9MRSlPQHcSMP72CycbFZecKCHZCiiO21mozluRZPm17Pd5acDTFGmRr8RnNUCAifEBVZuX3vBFVSBFauqqKdi6sdN+9Tqv+Ih59zXmlf93He/Y5F2UGCE17Hv5M/hY40H13rAZs5bPcyIIkHP2bhcfLC5qQwtmRFAb2R7Nbd7M= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=microsoft.com; Received: from DM6PR21MB1370.namprd21.prod.outlook.com (2603:10b6:5:16b::28) by BL1PR21MB3377.namprd21.prod.outlook.com (2603:10b6:208:39d::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6863.14; Fri, 29 Sep 2023 18:20:26 +0000 Received: from DM6PR21MB1370.namprd21.prod.outlook.com ([fe80::eff:aea7:be24:8e44]) by DM6PR21MB1370.namprd21.prod.outlook.com ([fe80::eff:aea7:be24:8e44%4]) with mapi id 15.20.6863.013; Fri, 29 Sep 2023 18:20:26 +0000 From: Michael Kelley To: kys@microsoft.com, haiyangz@microsoft.com, wei.liu@kernel.org, decui@microsoft.com, tglx@linutronix.de, mingo@redhat.com, bp@alien8.de, dave.hansen@linux.intel.com, hpa@zytor.com, luto@kernel.org, peterz@infradead.org, thomas.lendacky@amd.com, sathyanarayanan.kuppuswamy@linux.intel.com, kirill.shutemov@linux.intel.com, seanjc@google.com, rick.p.edgecombe@intel.com, linux-kernel@vger.kernel.org, linux-hyperv@vger.kernel.org, x86@kernel.org Cc: mikelley@microsoft.com Subject: [PATCH 3/5] x86/mm: Mark CoCo VM pages not present while changing encrypted state Date: Fri, 29 Sep 2023 11:19:07 -0700 Message-Id: <1696011549-28036-4-git-send-email-mikelley@microsoft.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1696011549-28036-1-git-send-email-mikelley@microsoft.com> References: <1696011549-28036-1-git-send-email-mikelley@microsoft.com> X-ClientProxiedBy: CY5PR22CA0048.namprd22.prod.outlook.com (2603:10b6:930:1d::29) To DM6PR21MB1370.namprd21.prod.outlook.com (2603:10b6:5:16b::28) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM6PR21MB1370:EE_|BL1PR21MB3377:EE_ X-MS-Office365-Filtering-Correlation-Id: 3a16ca76-b309-46be-6291-08dbc118c0d1 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: QfCyQXzBLif9q3mrD4aro364Ker/qXf/g/+GzRbSpZbigwIzBiBxaexYQk985Fe0FRluu/598+zCs1GDR41CCnNGvwKrOwiwZfVngIKH7xvzmEbMzhhqcY6Gva5qwGnkNhi1Z9mSJFGTwuR5kuBQoY9TRkIwp0eCj4tyQ6Uu0QNAhrFjKafLXbtnO43uAIDZ6VmZAGdoxF4fBjsOjFPcCT6UjZWP/iDfi+Am0Qv564gsvTmBm3G4Y30PwonjoU/+5kM+FNwHkwdWOxuEqIKLNo+ojXXdOsZTynwaW++GGEJJECTez5XZrIXGoqerCLNnXEdJy9/Z4qRG5UGSMIk6nWDoYLnUYw7wnaWVc1duUOgJmy7KSvqIHb8L4qVwF0SKfl0ubqb18RBe0rmKS2wY1HiCJiB/NiU8O65wT9gG7sulVuCvhwSBKUIr6r2xxGknPBlWVCPH0nJmfcff7tYGiwYQHPNKDm/FN+n4RR6u66uDH6jgDAnSjdwNoiZ9v9nYFHpWdJhalv2Bo3vBcvJrY342ixK4JATWynTYctsvca3K047Q7PVt/nyZoTwZIUC87d0G73753vR8zjLJBnil+9ODXm9lhlmSuV7vyjWGqHw1J3Hzp16s7uRpZDLutNHhM4dBoWy+3VxQxKI7iShCDVG28UvZkVk6HDg6dfXIvl8xwz+MeSAb6WeMlf8bSqe2 X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM6PR21MB1370.namprd21.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230031)(6029001)(396003)(39860400002)(136003)(346002)(376002)(366004)(230922051799003)(186009)(451199024)(64100799003)(1800799009)(41300700001)(6506007)(6512007)(6486002)(52116002)(478600001)(6666004)(2616005)(2906002)(316002)(66946007)(66556008)(66476007)(5660300002)(107886003)(10290500003)(8676002)(8936002)(4326008)(26005)(30864003)(7416002)(921005)(82950400001)(82960400001)(36756003)(86362001)(83380400001)(38100700002)(38350700002);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?nEkBE0ET302MVTzYfRMOgyEaKMh7dwjgaL5k5iVUnUnPSARCcJyM4rce5Sj+?= =?us-ascii?Q?HWtY2fJU+Fqb9ZpE+eu2RxmmyLHRiPSM0bdZ0vUU7EtnA0GOrwmGvYCFyhYM?= =?us-ascii?Q?UiFqaSxlczcUJrUCm+TqBOhYIkUIHn5tsr/HV8s5gNQS7hbS4xgxdyL6vZ1y?= =?us-ascii?Q?55cov4yp0hYvMkfMh9X12/lafa4QQccPmQhSw6HbMWD+ORxTGG5QHp/73G+k?= =?us-ascii?Q?zgEnbHvoGN1wugQHj1q7GZjlBfu/IwQbhNxqmnrCp497Nn6Q5u1Nf0+0xb9R?= =?us-ascii?Q?NkQEH0biBRWikO6G44WuY5s+DEXnYoyHll3pDSkyp83SYNzhEeLM8RXbdLQJ?= =?us-ascii?Q?hsDn5VHP9G2hoycQxh/Ktym7zXY8q6FdNtxAlHSm9/mQfRl3CZhywSnZ/FVC?= =?us-ascii?Q?9NL5jkEuQuTH9LrLVXMAZuX3h9Tl1d0MSNdHV+/MdZsemVjD04PiuPkZpkGU?= =?us-ascii?Q?v1lYuK3nOehdtp+pf3bUVF+7rHbR4g49mVV0gj19LSfJsbQn9VSxIUZQQ1yP?= =?us-ascii?Q?5Ji/68mhDHgcuNVHy2fRdyTLsyArXEGb7+AcjV3fzeJHz0rblrMaRBh462R4?= =?us-ascii?Q?uiPMGnkCuLlpNXXczD9WVlt4JRXPccNwaw+o2tRHEsnvtHVrAR71258vKhBv?= =?us-ascii?Q?l2LNpuVryR4fZ9onf4V0iVh7eZ88fBDkLHvfKAIeY+IQMRAaVppq4ZW29Bee?= =?us-ascii?Q?/FYoMYz/cBbZIJlgH4tqXVMp/YQxzyr2sPEegOMi3wHkTZvVAjtLj8Weg6/N?= =?us-ascii?Q?I90S1Xnl+CMYcFJ2m0h8bjUvpfWNolXlOPMOqVE+7uJ7zI8M1Aup0ZXBGkxH?= =?us-ascii?Q?nHTz1o+8p5gfFzFx+4yYlMNz2TCTyrHc3OKp1rj7MC8y74UokFKR7X5ioRQl?= =?us-ascii?Q?j979fg9noEoBQpDccpGmEOty9MMT2BIGD7a7Da195G5PMmtT5sFUSU3Ed3/8?= =?us-ascii?Q?E2xvEMAKPfN7nvIzmlUPhknG7joycyqtSA8kiACIuvvZklhbWxUgfT/ugjx6?= =?us-ascii?Q?+5PwXw5Kl968hv5wd93rUiDEE/7dRws7OVB8H7YZkR4yffsgi2oNCs+rV16c?= =?us-ascii?Q?FOCB6cTesVWRAWsizWWN6psU2NGJxd+5GQA4qwj+dPpGYDKuPwvrPuMhowOq?= =?us-ascii?Q?3cJVRM40kJTT+8b05weDsNnCYl8poMLrm2tISim16Fh91czJpi5LDAYsODXY?= =?us-ascii?Q?iMsgHyaOVqoLjLOavvzjMBMNv9KOBkNH/HsiZpKMQuyp/S0285A6tkvf+dc8?= =?us-ascii?Q?UaSkRcaOgkyAxGVGqovtthSw7W9b2nNCVk3bA2aLVVYCTHok5PjJMxCbj+Vg?= =?us-ascii?Q?meR7JzCLT0L52ihVk4yOueMcWbV67KsWgShRp4wRlxWDTFG0rFBz/6h94P8J?= =?us-ascii?Q?ffFwpT8ruVypgtFJ5a/q1dgB2aH1mKfSu1idJCKK2El54bS1I/N8FeeUgbnm?= =?us-ascii?Q?SLOLyQ+5JObTIQBNmPHOKw+40Z4vo6mAc/4feagbmLRbgmTiV3rwPvcF1OgB?= =?us-ascii?Q?XNfk+fBLpcPU95NeUfLWbsJpbwGnjEwwPjuD88qWpy0UWv69igMpYTaeN/Ft?= =?us-ascii?Q?n15X5ZYw/sRzJV3gQN5MA+EPewY6UkRRnUC8CJE0qaSHSAwGaHUZQe5U0REC?= =?us-ascii?Q?ag=3D=3D?= X-OriginatorOrg: microsoft.com X-MS-Exchange-CrossTenant-Network-Message-Id: 3a16ca76-b309-46be-6291-08dbc118c0d1 X-MS-Exchange-CrossTenant-AuthSource: DM6PR21MB1370.namprd21.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 29 Sep 2023 18:20:26.2619 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 72f988bf-86f1-41af-91ab-2d7cd011db47 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: iJuXp4PzvWMsL1PlchP/ZWqkxFIvDVHtT8GeLLjtsDXFQMRSi/d1kvT0yFg8XBme0xstNlDYXiagjQHXtJTVEg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL1PR21MB3377 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" In a CoCo VM when a page transitions from encrypted to decrypted, or vice versa, attributes in the PTE must be updated *and* the hypervisor must be notified of the change. Because there are two separate steps, there's a window where the settings are inconsistent. Normally the code that initiates the transition (via set_memory_decrypted() or set_memory_encrypted()) ensures that the memory is not being accessed during a transition, so the window of inconsistency is not a problem. However, the load_unaligned_zeropad() function can read arbitrary memory pages at arbitrary times, which could access a transitioning page during the window. In such a case, CoCo VM specific exceptions are taken (depending on the CoCo architecture in use). Current code in those exception handlers recovers and does "fixup" on the result returned by load_unaligned_zeropad(). Unfortunately, this exception handling can't work in paravisor scenarios (TDX Paritioning and SEV-SNP in vTOM mode). The exceptions need to be forwarded from the paravisor to the Linux guest, but there are no architectural specs for how to do that. Fortunately, there's a simpler way to solve the problem by changing the core transition code in __set_memory_enc_pgtable() to do the following: 1. Remove aliasing mappings 2. Flush the data cache if needed 3. Remove the PRESENT bit from the PTEs of all transitioning pages 4. Set/clear the encryption attribute as appropriate 5. Flush the TLB so the changed encryption attribute isn't visible 6. Notify the hypervisor of the encryption status change 7. Add back the PRESENT bit, making the changed attribute visible With this approach, load_unaligned_zeropad() just takes its normal page-fault-based fixup path if it touches a page that is transitioning. As a result, load_unaligned_zeropad() and CoCo VM page transitioning are completely decoupled. CoCo VM page transitions can proceed without needing to handle architecture-specific exceptions and fix things up. This decoupling reduces the complexity due to separate TDX and SEV-SNP fixup paths, and gives more freedom to revise and introduce new capabilities in future versions of the TDX and SEV-SNP architectures. Paravisor scenarios work properly without needing to forward exceptions. With this approach, the order of updating the guest PTEs and notifying the hypervisor doesn't matter. As such, only a single hypervisor callback is needed, rather one before and one after the PTE update. Simplify the code by eliminating the extra hypervisor callback along with the TDX and SEV-SNP code that handles the before and after cases. The TLB flush callback is also no longer required and is removed. Signed-off-by: Michael Kelley --- arch/x86/coco/tdx/tdx.c | 66 +--------------------------------------= ---- arch/x86/hyperv/ivm.c | 6 ---- arch/x86/kernel/x86_init.c | 4 --- arch/x86/mm/mem_encrypt_amd.c | 27 ++++-------------- arch/x86/mm/pat/set_memory.c | 55 +++++++++++++++++++++++------------- 5 files changed, 43 insertions(+), 115 deletions(-) diff --git a/arch/x86/coco/tdx/tdx.c b/arch/x86/coco/tdx/tdx.c index 3e6dbd2..1bb2fff 100644 --- a/arch/x86/coco/tdx/tdx.c +++ b/arch/x86/coco/tdx/tdx.c @@ -676,24 +676,6 @@ bool tdx_handle_virt_exception(struct pt_regs *regs, s= truct ve_info *ve) return true; } =20 -static bool tdx_tlb_flush_required(bool private) -{ - /* - * TDX guest is responsible for flushing TLB on private->shared - * transition. VMM is responsible for flushing on shared->private. - * - * The VMM _can't_ flush private addresses as it can't generate PAs - * with the guest's HKID. Shared memory isn't subject to integrity - * checking, i.e. the VMM doesn't need to flush for its own protection. - * - * There's no need to flush when converting from shared to private, - * as flushing is the VMM's responsibility in this case, e.g. it must - * flush to avoid integrity failures in the face of a buggy or - * malicious guest. - */ - return !private; -} - static bool tdx_cache_flush_required(void) { /* @@ -776,30 +758,6 @@ static bool tdx_enc_status_changed(unsigned long vaddr= , int numpages, bool enc) return true; } =20 -static bool tdx_enc_status_change_prepare(unsigned long vaddr, int numpage= s, - bool enc) -{ - /* - * Only handle shared->private conversion here. - * See the comment in tdx_early_init(). - */ - if (enc) - return tdx_enc_status_changed(vaddr, numpages, enc); - return true; -} - -static bool tdx_enc_status_change_finish(unsigned long vaddr, int numpages, - bool enc) -{ - /* - * Only handle private->shared conversion here. - * See the comment in tdx_early_init(). - */ - if (!enc) - return tdx_enc_status_changed(vaddr, numpages, enc); - return true; -} - void __init tdx_early_init(void) { struct tdx_module_args args =3D { @@ -831,30 +789,8 @@ void __init tdx_early_init(void) */ physical_mask &=3D cc_mask - 1; =20 - /* - * The kernel mapping should match the TDX metadata for the page. - * load_unaligned_zeropad() can touch memory *adjacent* to that which is - * owned by the caller and can catch even _momentary_ mismatches. Bad - * things happen on mismatch: - * - * - Private mapping =3D> Shared Page =3D=3D Guest shutdown - * - Shared mapping =3D> Private Page =3D=3D Recoverable #VE - * - * guest.enc_status_change_prepare() converts the page from - * shared=3D>private before the mapping becomes private. - * - * guest.enc_status_change_finish() converts the page from - * private=3D>shared after the mapping becomes private. - * - * In both cases there is a temporary shared mapping to a private page, - * which can result in a #VE. But, there is never a private mapping to - * a shared page. - */ - x86_platform.guest.enc_status_change_prepare =3D tdx_enc_status_change_pr= epare; - x86_platform.guest.enc_status_change_finish =3D tdx_enc_status_change_fi= nish; - + x86_platform.guest.enc_status_change_finish =3D tdx_enc_status_changed; x86_platform.guest.enc_cache_flush_required =3D tdx_cache_flush_required; - x86_platform.guest.enc_tlb_flush_required =3D tdx_tlb_flush_required; =20 /* * TDX intercepts the RDMSR to read the X2APIC ID in the parallel diff --git a/arch/x86/hyperv/ivm.c b/arch/x86/hyperv/ivm.c index 084fab6..fbe2585 100644 --- a/arch/x86/hyperv/ivm.c +++ b/arch/x86/hyperv/ivm.c @@ -550,11 +550,6 @@ static bool hv_vtom_set_host_visibility(unsigned long = kbuffer, int pagecount, bo return result; } =20 -static bool hv_vtom_tlb_flush_required(bool private) -{ - return true; -} - static bool hv_vtom_cache_flush_required(void) { return false; @@ -614,7 +609,6 @@ void __init hv_vtom_init(void) =20 x86_platform.hyper.is_private_mmio =3D hv_is_private_mmio; x86_platform.guest.enc_cache_flush_required =3D hv_vtom_cache_flush_requi= red; - x86_platform.guest.enc_tlb_flush_required =3D hv_vtom_tlb_flush_required; x86_platform.guest.enc_status_change_finish =3D hv_vtom_set_host_visibili= ty; =20 /* Set WB as the default cache mode. */ diff --git a/arch/x86/kernel/x86_init.c b/arch/x86/kernel/x86_init.c index a37ebd3..cf5179b 100644 --- a/arch/x86/kernel/x86_init.c +++ b/arch/x86/kernel/x86_init.c @@ -131,9 +131,7 @@ struct x86_cpuinit_ops x86_cpuinit =3D { =20 static void default_nmi_init(void) { }; =20 -static bool enc_status_change_prepare_noop(unsigned long vaddr, int npages= , bool enc) { return true; } static bool enc_status_change_finish_noop(unsigned long vaddr, int npages,= bool enc) { return true; } -static bool enc_tlb_flush_required_noop(bool enc) { return false; } static bool enc_cache_flush_required_noop(void) { return false; } static bool is_private_mmio_noop(u64 addr) {return false; } =20 @@ -154,9 +152,7 @@ struct x86_platform_ops x86_platform __ro_after_init = =3D { .hyper.is_private_mmio =3D is_private_mmio_noop, =20 .guest =3D { - .enc_status_change_prepare =3D enc_status_change_prepare_noop, .enc_status_change_finish =3D enc_status_change_finish_noop, - .enc_tlb_flush_required =3D enc_tlb_flush_required_noop, .enc_cache_flush_required =3D enc_cache_flush_required_noop, }, }; diff --git a/arch/x86/mm/mem_encrypt_amd.c b/arch/x86/mm/mem_encrypt_amd.c index 6faea41..06960ba 100644 --- a/arch/x86/mm/mem_encrypt_amd.c +++ b/arch/x86/mm/mem_encrypt_amd.c @@ -278,11 +278,6 @@ static unsigned long pg_level_to_pfn(int level, pte_t = *kpte, pgprot_t *ret_prot) return pfn; } =20 -static bool amd_enc_tlb_flush_required(bool enc) -{ - return true; -} - static bool amd_enc_cache_flush_required(void) { return !cpu_feature_enabled(X86_FEATURE_SME_COHERENT); @@ -318,18 +313,6 @@ static void enc_dec_hypercall(unsigned long vaddr, uns= igned long size, bool enc) #endif } =20 -static bool amd_enc_status_change_prepare(unsigned long vaddr, int npages,= bool enc) -{ - /* - * To maintain the security guarantees of SEV-SNP guests, make sure - * to invalidate the memory before encryption attribute is cleared. - */ - if (cc_platform_has(CC_ATTR_GUEST_SEV_SNP) && !enc) - snp_set_memory_shared(vaddr, npages); - - return true; -} - /* Return true unconditionally: return value doesn't matter for the SEV si= de */ static bool amd_enc_status_change_finish(unsigned long vaddr, int npages, = bool enc) { @@ -337,8 +320,12 @@ static bool amd_enc_status_change_finish(unsigned long= vaddr, int npages, bool e * After memory is mapped encrypted in the page table, validate it * so that it is consistent with the page table updates. */ - if (cc_platform_has(CC_ATTR_GUEST_SEV_SNP) && enc) - snp_set_memory_private(vaddr, npages); + if (cc_platform_has(CC_ATTR_GUEST_SEV_SNP)) { + if (enc) + snp_set_memory_private(vaddr, npages); + else + snp_set_memory_shared(vaddr, npages); + } =20 if (!cc_platform_has(CC_ATTR_HOST_MEM_ENCRYPT)) enc_dec_hypercall(vaddr, npages << PAGE_SHIFT, enc); @@ -498,9 +485,7 @@ void __init sme_early_init(void) /* Update the protection map with memory encryption mask */ add_encrypt_protection_map(); =20 - x86_platform.guest.enc_status_change_prepare =3D amd_enc_status_change_pr= epare; x86_platform.guest.enc_status_change_finish =3D amd_enc_status_change_fi= nish; - x86_platform.guest.enc_tlb_flush_required =3D amd_enc_tlb_flush_requir= ed; x86_platform.guest.enc_cache_flush_required =3D amd_enc_cache_flush_requ= ired; =20 /* diff --git a/arch/x86/mm/pat/set_memory.c b/arch/x86/mm/pat/set_memory.c index d7ef8d3..d062e01 100644 --- a/arch/x86/mm/pat/set_memory.c +++ b/arch/x86/mm/pat/set_memory.c @@ -2147,40 +2147,57 @@ static int __set_memory_enc_pgtable(unsigned long a= ddr, int numpages, bool enc) memset(&cpa, 0, sizeof(cpa)); cpa.vaddr =3D &addr; cpa.numpages =3D numpages; + + /* + * The caller must ensure that the memory being transitioned between + * encrypted and decrypted is not being accessed. But if + * load_unaligned_zeropad() touches the "next" page, it may generate a + * read access the caller has no control over. To ensure such accesses + * cause a normal page fault for the load_unaligned_zeropad() handler, + * mark the pages not present until the transition is complete. We + * don't want a #VE or #VC fault due to a mismatch in the memory + * encryption status, since paravisor configurations can't cleanly do + * the load_unaligned_zeropad() handling in the paravisor. + * + * There's no requirement to do so, but for efficiency we can clear + * _PAGE_PRESENT and set/clr encryption attr as a single operation. + */ cpa.mask_set =3D enc ? pgprot_encrypted(empty) : pgprot_decrypted(empty); - cpa.mask_clr =3D enc ? pgprot_decrypted(empty) : pgprot_encrypted(empty); + cpa.mask_clr =3D enc ? pgprot_decrypted(__pgprot(_PAGE_PRESENT)) : + pgprot_encrypted(__pgprot(_PAGE_PRESENT)); cpa.pgd =3D init_mm.pgd; =20 /* Must avoid aliasing mappings in the highmem code */ kmap_flush_unused(); vm_unmap_aliases(); =20 - /* Flush the caches as needed before changing the encryption attribute. */ - if (x86_platform.guest.enc_tlb_flush_required(enc)) - cpa_flush(&cpa, x86_platform.guest.enc_cache_flush_required()); - - /* Notify hypervisor that we are about to set/clr encryption attribute. */ - if (!x86_platform.guest.enc_status_change_prepare(addr, numpages, enc)) - return -EIO; + /* Flush the caches as needed before changing the encryption attr. */ + if (x86_platform.guest.enc_cache_flush_required()) + cpa_flush(&cpa, 1); =20 ret =3D __change_page_attr_set_clr(&cpa, 1); + if (ret) + return ret; =20 /* - * After changing the encryption attribute, we need to flush TLBs again - * in case any speculative TLB caching occurred (but no need to flush - * caches again). We could just use cpa_flush_all(), but in case TLB - * flushing gets optimized in the cpa_flush() path use the same logic - * as above. + * After clearing _PAGE_PRESENT and changing the encryption attribute, + * we need to flush TLBs to ensure no further accesses to the memory can + * be made with the old encryption attribute (but no need to flush caches + * again). We could just use cpa_flush_all(), but in case TLB flushing + * gets optimized in the cpa_flush() path use the same logic as above. */ cpa_flush(&cpa, 0); =20 - /* Notify hypervisor that we have successfully set/clr encryption attribu= te. */ - if (!ret) { - if (!x86_platform.guest.enc_status_change_finish(addr, numpages, enc)) - ret =3D -EIO; - } + /* Notify hypervisor that we have successfully set/clr encryption attr. */ + if (!x86_platform.guest.enc_status_change_finish(addr, numpages, enc)) + return -EIO; =20 - return ret; + /* + * Now that the hypervisor is sync'ed with the page table changes + * made here, add back _PAGE_PRESENT. set_memory_p() does not flush + * the TLB. + */ + return set_memory_p(&addr, numpages); } =20 static int __set_memory_enc_dec(unsigned long addr, int numpages, bool enc) --=20 1.8.3.1 From nobody Tue Dec 16 13:47:56 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id E440EE728CF for ; Fri, 29 Sep 2023 18:20:52 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233893AbjI2SUw (ORCPT ); Fri, 29 Sep 2023 14:20:52 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45178 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233884AbjI2SUp (ORCPT ); Fri, 29 Sep 2023 14:20:45 -0400 Received: from DM6FTOPR00CU001.outbound.protection.outlook.com (mail-centralusazon11020024.outbound.protection.outlook.com [52.101.61.24]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D0E5ACC3; Fri, 29 Sep 2023 11:20:35 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=LAGjqT3Ozmmt6vSY7yDcVwTha/Lzk2AhilX3LBzyXhSNcvvQHKLL9iNkK0ooQK4MQ7JpubCbuhxG2HX+cV2qE+H4JRwxIzov6+LpHn0TP2IpI6Iggn4jnzLyE9XC0PxpTJKW2NVK47hiWtFm4IrmBqkA0iG21TisyexNBOwfMLxBHCR+NVipzr7daBF1Nzlzb4vDSNZLt/lVVoJvwnvkIQogB09L1Q+u0JMIAjCxkFbtz3iA/XWhs+9OU8oOiGxIdsLyGn7nf5uUJHyxpJPeEdHZQmj/LlSYmfxNUV6/f3n4Po9172DMaOMMe2EtdRK7rrJQS63UD9hri8nWYyoftA== 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=MeFN+QNlagWKMaSa+qE3Sg3dic416Re6XcWZ6LzPDZk=; b=IzJs1UF6ah7EiIz1ygpyLgqaA7f6HKV3hcX+L7ru2FUULXgMngcTRzjEI9SjIMyDEugWWlaK8uRE/5RGfK1sm+xQpT2/qaPkXnk8iHXo7eKzldJtkuRcUoBarZhskI4Akg5g2KZaJnVYn6STpHBK730lIVgDfIlf3oF2obkvNwVGnyKD9zTVEF8W7cod0AbfAmWR8YO8UdEUBkwNZDaoUy9FdtOyugfGi856LyLkwUqxGWHMFsQwFX6hEE7vgxIC2F2RnsaS+mJHsypX7fjq5+liHI2uEtM/XagY5rgsIl9/vbzOgQ+f5GcjVfH4A5KKoF3YS2ArbZnQcawzIOYmWg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=microsoft.com; dmarc=pass action=none header.from=microsoft.com; dkim=pass header.d=microsoft.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=MeFN+QNlagWKMaSa+qE3Sg3dic416Re6XcWZ6LzPDZk=; b=OFc6iOCU9F+p4Is4J8DAir91LYmiw0rdj7eQ5+wMo6X9UPvjGQ9nhwgEP/KMHZAnQPe7V06YxmpisKsmZ3NxY5Dx84nsUAtktW53LFpwiT/4XN6FJfHCY8VUi0tuONb0uvCx+qvVCDzVjWPesXpuPLjwqkigB07IZrAP9O5Drik= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=microsoft.com; Received: from DM6PR21MB1370.namprd21.prod.outlook.com (2603:10b6:5:16b::28) by BL1PR21MB3377.namprd21.prod.outlook.com (2603:10b6:208:39d::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6863.14; Fri, 29 Sep 2023 18:20:27 +0000 Received: from DM6PR21MB1370.namprd21.prod.outlook.com ([fe80::eff:aea7:be24:8e44]) by DM6PR21MB1370.namprd21.prod.outlook.com ([fe80::eff:aea7:be24:8e44%4]) with mapi id 15.20.6863.013; Fri, 29 Sep 2023 18:20:27 +0000 From: Michael Kelley To: kys@microsoft.com, haiyangz@microsoft.com, wei.liu@kernel.org, decui@microsoft.com, tglx@linutronix.de, mingo@redhat.com, bp@alien8.de, dave.hansen@linux.intel.com, hpa@zytor.com, luto@kernel.org, peterz@infradead.org, thomas.lendacky@amd.com, sathyanarayanan.kuppuswamy@linux.intel.com, kirill.shutemov@linux.intel.com, seanjc@google.com, rick.p.edgecombe@intel.com, linux-kernel@vger.kernel.org, linux-hyperv@vger.kernel.org, x86@kernel.org Cc: mikelley@microsoft.com Subject: [PATCH 4/5] x86/mm: Remove unnecessary call layer for __set_memory_enc_pgtable() Date: Fri, 29 Sep 2023 11:19:08 -0700 Message-Id: <1696011549-28036-5-git-send-email-mikelley@microsoft.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1696011549-28036-1-git-send-email-mikelley@microsoft.com> References: <1696011549-28036-1-git-send-email-mikelley@microsoft.com> X-ClientProxiedBy: CY5PR22CA0048.namprd22.prod.outlook.com (2603:10b6:930:1d::29) To DM6PR21MB1370.namprd21.prod.outlook.com (2603:10b6:5:16b::28) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM6PR21MB1370:EE_|BL1PR21MB3377:EE_ X-MS-Office365-Filtering-Correlation-Id: b16e7fb7-e488-44ff-aa01-08dbc118c17a X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: lpVnEyVCiijcXgQH3eheIwB+KSwNNfKoI9toOQNPu219GQVQ1hCvU5LHfHd0g2Y8c3ECRnnD6A917PvbeqH2OS802wsbyLffqs//FRq2hRpR0rI5A+7mi1jIZzOkUxmjRuG74VRr/UUTv3xlE0T7JvIeBVfS4U1EpOJmJDARE4wtA/WmDAa5ssU+82zw8tgBVP8CIPCyGD98NFyR7dBwoyEsRGXcrYUKpc06laXTkbi9DEubMifznH9uJNG/r8VfIxcDZR5C6i+ckRkdtFsjlfxuQHYBwsSYghSnMp1OX2Gn5nhB0E0P4F5ONDdQBZbpJuLzPOUcV0L4nMTACrx3NR3IzrEjwL1JuW4iG8ujNbwjWQMxmVBjzZE3qA750nAM6FyTUcW5hnnbcsZQrgibHPrF7hRLwytPf4shmcv6bz6RYttzWE+Uz3tgkMTj8BMOIKUZflUC6ff8HvcvrYe3LJITYK3k/bsW+fBw1RbZXJ4Ok2nCzmCC7/43bp08Wfr7OcrvGN88MvWvcLZmuzzKuMS/fnx2UtmSLm5yq30fd7t6x3NBH7T4VUeobr2uBl0krgA2UK9zngzwJGkZi0yBqlmc1+oiwkOBHbPzQY9m+SIQAtAqOhikkLxlKIA1+9NHxf13mSAHvEJysEBZsgwn/ca8cruaNuChbWD2HR17sxWcfYFDWZ49UHiRCRYwu4lu X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM6PR21MB1370.namprd21.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230031)(396003)(39860400002)(136003)(346002)(376002)(366004)(230922051799003)(186009)(451199024)(64100799003)(1800799009)(41300700001)(6506007)(6512007)(6486002)(52116002)(478600001)(6666004)(2616005)(2906002)(316002)(66946007)(66556008)(66476007)(5660300002)(107886003)(10290500003)(8676002)(8936002)(4326008)(26005)(7416002)(921005)(82950400001)(82960400001)(36756003)(86362001)(83380400001)(38100700002)(38350700002);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?pLh2uEltUgp1h2RXnn3mh54TFzf1WLcCJbs2hq7q5NJ5IvTOD16pq6rskisv?= =?us-ascii?Q?fFMs0W96joL2ZMVKV4dIwx+aFG1nmEjh1yOahTWij7gBLSntlfJbqPJIVxDJ?= =?us-ascii?Q?1uT9qUnkw7J7/onVykIK2K0cjy36lbAbqn//FwS9DGETgHDL2pAb8eYXBooK?= =?us-ascii?Q?CoI4HE65iuFbMGJXdq6l/YBbzt3CKqUvvcWzIETmrotIwrhqUo9AXq1cLTZE?= =?us-ascii?Q?wwEyXQa6KLBIqEKPVx0xTtOFrokCG2jO+4iJ5jFPqXqlEVBCca5aOw3JYgCI?= =?us-ascii?Q?isjotxXAgpfgENO/MPbnIio5qqtJj0HARTgW2gMWKTFP2MPXymcfe9PZFPye?= =?us-ascii?Q?l4Bx6sFDQgoZ8MK5T60/eKrbZXcMpgqCAYJK/bHECjEoecSdZ/gmlmp4wPzY?= =?us-ascii?Q?IdYLViIjya/4veFbPhCZ7WBMHxaSqzwHWa3RKbpYZJkI8a4L07Auhe/Kkb1I?= =?us-ascii?Q?Q2Jv6dNTKS3DgxH/1MSaEgtwwRJN+1LPbAFI0bImA5RPgmDnE2ZxN8PDBeto?= =?us-ascii?Q?MnmwCroLAN3rT080kt01kaXEqBTEnbp/2qF+QyLBEQlBp0Kyfus7zFPHvya0?= =?us-ascii?Q?5bqgaHA3YNTBYUvd5YSe3fzm+mTFrYSD3ymmgzKhX2rxZM6qhiXNG925Oi2B?= =?us-ascii?Q?788vAEIPeiJLnSKPLokbbc4/qxxo6/xC1D3/ApOfkoTgpx73Fl7CZvlUkpte?= =?us-ascii?Q?SGHAdcQasuSIHotdXP+V0/N6069N9TJH8sEabH82EUTdIKGmwrAP3bdy5CY6?= =?us-ascii?Q?JL8o5b8QgUPurEpCTRlpkaE/8cG6RdrH1JqTLThkyc9Ii+XArm0HFdOnoWzS?= =?us-ascii?Q?t0jSmxf2PhXW9YK4VnUSE2GlEKwfxghqhi0RxdDBiXqD+/9FhR+eso6YluqP?= =?us-ascii?Q?dneLbc1HPB3sf+9aFbiWKalYX5FcDgAMC7G49LRAp5LtR7Bu4wDhPWMe2YcG?= =?us-ascii?Q?opV9nI0N5/OSj0SgxNIrqyvQecxLA3Uv0qdRFk5DdzktWloOARQqMZXGCor8?= =?us-ascii?Q?5K79N1hS9914J0AHkIKPsZQimABqPXfyGTTgSh4prqGsRyothxYnRF7HGIqk?= =?us-ascii?Q?kiYaJM6LuJStoH2RDUXsETTSMF/fLQkRWviTiZLh5eSSHlPkP5mTMozNsNcK?= =?us-ascii?Q?bsSHwgmKXgGCZ/cxQRwF5OkjPtGt9IieK47KJ+4GVEj+CRwxCLK9Wh4O9lZI?= =?us-ascii?Q?TuyqKUfqhaaWwp5FxDyRw2I5PHBtLTLzxWYQqcAfjGe4Y8wtt6IKx6hW7f8/?= =?us-ascii?Q?oDPoej6L+LLxsGJ+c4G81LAXHq+ILmoCPPX85slisQYi1gKaNoBsQJu8teoK?= =?us-ascii?Q?Ns1GjDjekadW40StdzkkgLF2uzoXDju9lV+diHtlqpmpKhYYjBwJFO2kMoX7?= =?us-ascii?Q?avC2KZrHnhN+k7M72qvFJp+36W+j15hiA+pR/qjr3Bs2PzIASGCKokHQwxUY?= =?us-ascii?Q?1pjc+7xY4b9Vk42E6eog567tttUoxHUNsK5ngzBwlzlvOWpUIm9/JVi3Ofua?= =?us-ascii?Q?D1xhKSXq+gcCgMjeAbdlLIvrhRyEnUgqDtAF5FJ5HL/amNkl7tvG30K845D3?= =?us-ascii?Q?LyoSvTBk0Mf7UlVU0jxQzZATZst+nytXxwWfYD7L2WiuaWsJVCD19lkyaX8g?= =?us-ascii?Q?0w=3D=3D?= X-OriginatorOrg: microsoft.com X-MS-Exchange-CrossTenant-Network-Message-Id: b16e7fb7-e488-44ff-aa01-08dbc118c17a X-MS-Exchange-CrossTenant-AuthSource: DM6PR21MB1370.namprd21.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 29 Sep 2023 18:20:27.3828 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 72f988bf-86f1-41af-91ab-2d7cd011db47 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: tcqvv4zoHftCUIJI9DfOX041xgoRkWQdQqVY/4lAJbLg0GXkLm153GCFiF9IX+beama4px2r3udwgMZj8m9/gA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL1PR21MB3377 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" __set_memory_enc_pgtable() is only called from __set_memory_enc_dec() after doing a simple validation check. Prior to commit 812b0597fb40, __set_memory_enc_dec() did more complex checking, but now the code can be simplified by collapsing the two functions. No functional change. Signed-off-by: Michael Kelley --- arch/x86/mm/pat/set_memory.c | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/arch/x86/mm/pat/set_memory.c b/arch/x86/mm/pat/set_memory.c index d062e01..1578077 100644 --- a/arch/x86/mm/pat/set_memory.c +++ b/arch/x86/mm/pat/set_memory.c @@ -2131,15 +2131,18 @@ int set_memory_global(unsigned long addr, int numpa= ges) } =20 /* - * __set_memory_enc_pgtable() is used for the hypervisors that get + * __set_memory_enc_dec() is used for the hypervisors that get * informed about "encryption" status via page tables. */ -static int __set_memory_enc_pgtable(unsigned long addr, int numpages, bool= enc) +static int __set_memory_enc_dec(unsigned long addr, int numpages, bool enc) { pgprot_t empty =3D __pgprot(0); struct cpa_data cpa; int ret; =20 + if (!cc_platform_has(CC_ATTR_MEM_ENCRYPT)) + return 0; + /* Should not be working on unaligned addresses */ if (WARN_ONCE(addr & ~PAGE_MASK, "misaligned address: %#lx\n", addr)) addr &=3D PAGE_MASK; @@ -2200,14 +2203,6 @@ static int __set_memory_enc_pgtable(unsigned long ad= dr, int numpages, bool enc) return set_memory_p(&addr, numpages); } =20 -static int __set_memory_enc_dec(unsigned long addr, int numpages, bool enc) -{ - if (cc_platform_has(CC_ATTR_MEM_ENCRYPT)) - return __set_memory_enc_pgtable(addr, numpages, enc); - - return 0; -} - int set_memory_encrypted(unsigned long addr, int numpages) { return __set_memory_enc_dec(addr, numpages, true); --=20 1.8.3.1 From nobody Tue Dec 16 13:47:56 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id F0DEBE728CF for ; Fri, 29 Sep 2023 18:20:55 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233939AbjI2SUz (ORCPT ); Fri, 29 Sep 2023 14:20:55 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45280 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233900AbjI2SUp (ORCPT ); Fri, 29 Sep 2023 14:20:45 -0400 Received: from DM6FTOPR00CU001.outbound.protection.outlook.com (mail-centralusazon11020024.outbound.protection.outlook.com [52.101.61.24]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A88F0CCB; Fri, 29 Sep 2023 11:20:37 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=dktBECflJjI0n1It5HpQTRIxR8cRKevUr0b1GQNjVBUx7dVihE24Vhn1nO3fE14ZWLYesYs+tUmydkQgl4ZPdyzqPxIOh3h4Xjv52r6eYtbqi4R74K5dBj32Y72EwhujWzZpLw4jus40hWdZwWCav1VEX8eIW7tZC202XBE0iWKRkZXkWor1zM44AFfspBUJYHagREXYhmZyiU7HhI/MiLcTT4NVhcLeS21ZfMh5CHZAfkrVtjDoCbf9D+mfv2rXIONV33/XWHWpnuUViJZVclSyyXLHv3XTrik7Qgtv7wcpBsMIOjgfxY8M/Ljwx9Ko4hrw/2occD8Zo+rTzug/vA== 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=yJjRfPFE1u59tUllCuAU5kVEjftyeGOfDutmuE8RjRg=; b=DcjK9mCr1mXtMcmUiz/wDj8xDdLB9WF7SU9nHJ0ydphq+0EPsg5ElmliiEwj5TBoOkcj5Wzb4qxcvi+WLNlaGuHn3hkVKBbzMqnKhdRj+u8EuontcBZi35P/Ml8WIFbsPGPdsXb6hsIPJJ+k6j+23lTAdsjuGUHBUQiZQSfGQhEM+xObw0fYtS2lJquFpKe1YdJZh/JsYjoovYJ2iRKO3NytxHWAX6gMi6AVLC1NbSfeJYl3YBzeoOMKEACne8dBmPCfBe2X5PKiqvUwTHlicuZRoDqryWU20Fx3/iu+Ny1vWZXeyzT7h+5WbaAwqpr6+cGEGMuhlWMUFJagmNxGsg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=microsoft.com; dmarc=pass action=none header.from=microsoft.com; dkim=pass header.d=microsoft.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=yJjRfPFE1u59tUllCuAU5kVEjftyeGOfDutmuE8RjRg=; b=h9DV1JHl33wwz6I/5XBsMU/sTFM3AvQrYHjJsX2nFPB9HKnCcBiNG7ThOErsNFRmqoSlfXYRuqAL4Y0JeUJAwfqKA85vybUePTv8IftFFXNMcA5bfQVS1qZCacgVt15lAcOL5X25XE1ShxRYuKpgn+quvSDH1Xwwi3MWEzWqH2Q= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=microsoft.com; Received: from DM6PR21MB1370.namprd21.prod.outlook.com (2603:10b6:5:16b::28) by BL1PR21MB3377.namprd21.prod.outlook.com (2603:10b6:208:39d::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6863.14; Fri, 29 Sep 2023 18:20:30 +0000 Received: from DM6PR21MB1370.namprd21.prod.outlook.com ([fe80::eff:aea7:be24:8e44]) by DM6PR21MB1370.namprd21.prod.outlook.com ([fe80::eff:aea7:be24:8e44%4]) with mapi id 15.20.6863.013; Fri, 29 Sep 2023 18:20:28 +0000 From: Michael Kelley To: kys@microsoft.com, haiyangz@microsoft.com, wei.liu@kernel.org, decui@microsoft.com, tglx@linutronix.de, mingo@redhat.com, bp@alien8.de, dave.hansen@linux.intel.com, hpa@zytor.com, luto@kernel.org, peterz@infradead.org, thomas.lendacky@amd.com, sathyanarayanan.kuppuswamy@linux.intel.com, kirill.shutemov@linux.intel.com, seanjc@google.com, rick.p.edgecombe@intel.com, linux-kernel@vger.kernel.org, linux-hyperv@vger.kernel.org, x86@kernel.org Cc: mikelley@microsoft.com Subject: [PATCH 5/5] x86/mm: Add comments about errors in set_memory_decrypted()/encrypted() Date: Fri, 29 Sep 2023 11:19:09 -0700 Message-Id: <1696011549-28036-6-git-send-email-mikelley@microsoft.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1696011549-28036-1-git-send-email-mikelley@microsoft.com> References: <1696011549-28036-1-git-send-email-mikelley@microsoft.com> X-ClientProxiedBy: CY5PR22CA0048.namprd22.prod.outlook.com (2603:10b6:930:1d::29) To DM6PR21MB1370.namprd21.prod.outlook.com (2603:10b6:5:16b::28) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM6PR21MB1370:EE_|BL1PR21MB3377:EE_ X-MS-Office365-Filtering-Correlation-Id: 5adb1059-6f53-4d32-53a3-08dbc118c226 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: ouGYYtscQdmWdHNkVkNIdZFc7CsuapPc+oOvplRgkTiM47ucJ4BG1lCNWQeEALEDGP339wnlcaapIhcfdJOc0QUZ+17S2kqkx5ArlVikCEbqCgMx1goKg9EVp9yZYQ9+keTbemtx0h02euq2M8VWHF9cu/i12GgufKk2zDKTPjR0OK38HipvQUEhIK5mt/9Vkj5ht9Hf0ufUj9RdDmaERHllp/t9e+OylUm70vNQGLZ+eF1Vm+SlmeyERupaYsXEARB7O5QbMB+1W/MUPAv7zojPPbIiZscycEZDY21+TduDD56gHF74mxYLdFhT1OU4oyWNa65Mu4iFXNVVYMwMPMs+MBSjsAuoNzCTO1LK4ZbeR4FdYTyFEpPiEERBy8/NgqTZg9qTVFUtsmowhA5uoBjQBF+KOBzFFmJQw2DAhxneWjBkSbHp51YBKcZcWSahP2fOK7Dr3J9QjTMqcwKjO95Su6ZJAE/s2anGdFSFn2SjRbzQyw8OG9XGYPjP0cEVO90Dtwhfza6P+DbJAZ+qjBFnf51KDWPQsUSXmlMm/9fnGruFcjhN7D2wK9La5tRmuC0Ug5rLsNjZNU/qtAgqyTtQAL3g4wyjE/Q3mpVoEC9vmK4a1+UmSy6aHifde/0asvbGP+BDQnoQblXgJrBS7Gn9Zu5Csp52Cb7PlxQGkjyW5NGrVb6frYo4EjWeOhSE X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM6PR21MB1370.namprd21.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230031)(396003)(39860400002)(136003)(346002)(376002)(366004)(230922051799003)(186009)(451199024)(64100799003)(1800799009)(41300700001)(6506007)(6512007)(6486002)(52116002)(478600001)(6666004)(2616005)(2906002)(316002)(66946007)(66556008)(66476007)(5660300002)(107886003)(10290500003)(8676002)(8936002)(4326008)(26005)(7416002)(921005)(82950400001)(82960400001)(36756003)(86362001)(83380400001)(38100700002)(38350700002);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?KXQiH35tJcQE9Qa2lan00MA3iwOfYBoa2t1AYKjbJuJueU+5CHblXJcqCwGq?= =?us-ascii?Q?wrOA5U7rHdZ2Tk+JHggjcBYJkgPBJE0RjoxzBZLWL+5J0R9hUb/EjoxoDJTQ?= =?us-ascii?Q?H5qkQEDzhOIDx6EcbPcvB3w32TUxbLx5vEaF7cr9S7NObXmWtq4wscu2azQn?= =?us-ascii?Q?/SFN8zunU58YG1z1Mu7TUWOBI2/6tlqKKf6oRSvhGCE0HbwvhAlRLhei4PMO?= =?us-ascii?Q?dDEsSEOQM15ITY6XD42d/Ksc8YRsCrD0PzeTLyiO0cCBa145LFf6csNvGcMO?= =?us-ascii?Q?G37p3CBPNvvPfRearTnaI8oOoldokgeFLokqVbgbB6sB4MxE5hS128zGLMwI?= =?us-ascii?Q?khSIoA9o5+P9sxKRdnTQ6Dm6wrrHSMsZprPd6hYtLiOm+M60nV+uqaUNKQkx?= =?us-ascii?Q?IF+pXWvN/NWqiZxcMaRRgR6EHduKVFsaxGEL1CrNgWn68FIudwcN+LyoiaS5?= =?us-ascii?Q?EzBuVS6HwhXiLGBgyAyLUtlUTcWagpL5QLN0pc3oBBIJExm16fVP0ZbnjcyQ?= =?us-ascii?Q?fB72eJMIA20/v2Ryjuiq1gW5HMCOYgxaU1wJIoO0PC70QhhMmW5btA1VeOHn?= =?us-ascii?Q?bBtu35vwVnCYonmCjdI0Hx3FFLycfgHtJysm6ajFebQb45bct2ouQw8IwQI3?= =?us-ascii?Q?+9syJuLp9hbTJif8TebQzj+KX8lnqofH2qq0NMMEWjbrRdz9fqeG0p/jzjw1?= =?us-ascii?Q?ikMoHdvMjofnKr6e244SVC04/EwgjMuLRgz01nbZzaOJyxoPn1WIBrvT50kl?= =?us-ascii?Q?OzKIh7rutc643fpGdcqfWntjIgsCGnmyjpU475lOPovIe+unCg4rpLFuuEG6?= =?us-ascii?Q?1uAhrGJTIasiDOSj7dRbS6nSuoXl6S5C8AN/AFjFqX+i1hs9a16U+WwvA0A4?= =?us-ascii?Q?qMr5TDIJL1tNrwqTNAc2gFdFsblqdQyBNs2+3J/JmCGDz/r0xIOKq3/yH9lM?= =?us-ascii?Q?h3c3VMeJa/e/tSMW2h4qbFiXtbMZyyjQ3bdDx2QDeAgZfFiHvwh/Ek6pFDdA?= =?us-ascii?Q?U6kjA8EtRGzGWQXULkionWGWoNBLvfNHzVQN80yBcYzJ4pxXgd4NtfaxXiGh?= =?us-ascii?Q?bSWyK+Wva908x9p0pPzYJFQT7sNsA5H0IMzvdz3pQJ28L3h/FjOsgZ+TFdIG?= =?us-ascii?Q?BtpZpwiXh5PcbbXrd/vZoUFXYcuUqTEemIgQ0WR9gPXiZ3YG+/37CVdn7Okb?= =?us-ascii?Q?QZ56upt2OvtY5TbiLbdDXvtsB8kWoROxrUXrfi/QL8Cz6pWSPDNvrgT3Ranp?= =?us-ascii?Q?B58mC/qc3Jl4GmJZh9URs21NPcvsbK8Kw4eyjs9Z3hRoZ2h7Cm47X21qwWzm?= =?us-ascii?Q?p+YP+Lu8crkGI1dIzDLS+pJW46KS6gM5V8Xl8/J8zI1mxOD12njkwfY5WZ74?= =?us-ascii?Q?HAv/Heq3qM5hOAE+dPc8nNoAU5izgQVcPdTkaFtu/Rx/IwM3R7Yy/QykEuIK?= =?us-ascii?Q?yE/ycKKjNLfC6vGNrQDNfmIYdXemWiXQSS5paKm6dsDHcIcoeMsvJIeoQ5tW?= =?us-ascii?Q?UNcKc2OaeIIEjLGgveoqy7CbUJBTdxjFeuUZ4qA0LXKUmGRvdisGsFKjQ9bF?= =?us-ascii?Q?bWdih3/KrsULXZ4qScasbKB044U/IHSpnKPlG3Yrw6ByO7M54i/nTFkSogcu?= =?us-ascii?Q?nA=3D=3D?= X-OriginatorOrg: microsoft.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5adb1059-6f53-4d32-53a3-08dbc118c226 X-MS-Exchange-CrossTenant-AuthSource: DM6PR21MB1370.namprd21.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 29 Sep 2023 18:20:28.4964 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 72f988bf-86f1-41af-91ab-2d7cd011db47 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: yuC0/ng7YRMFlSH624x5Zh4tbrDZw54JUc36WXS5nWvZrTSeIOYq68BecXjwtf3CMKRPcpMqy4Ju4b7WlGhsgA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL1PR21MB3377 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The functions set_memory_decrypted()/encrypted() may leave the input memory range in an inconsistent state if an error occurs. Add comments describing the situation and what callers must be aware of. Also add comments in __set_memory_enc_dec() with more details on the issues and why further investment in error handling is not likely to be useful. No functional change. Suggested-by: Rick Edgecombe Signed-off-by: Michael Kelley --- arch/x86/mm/pat/set_memory.c | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/arch/x86/mm/pat/set_memory.c b/arch/x86/mm/pat/set_memory.c index 1578077..9d07d4e 100644 --- a/arch/x86/mm/pat/set_memory.c +++ b/arch/x86/mm/pat/set_memory.c @@ -2133,6 +2133,24 @@ int set_memory_global(unsigned long addr, int numpag= es) /* * __set_memory_enc_dec() is used for the hypervisors that get * informed about "encryption" status via page tables. + * + * If an error occurs in making the transition between encrypted and + * decrypted, the transitioned memory is left in an indeterminate state. + * The encryption status in the guest page tables may not match the + * hypervisor's view of the encryption status, making the memory unusable. + * If the memory consists of multiple pages, different pages may be in + * different indeterminate states. + * + * It is difficult to recover from errors such that we can ensure + * consistency between the page tables and hypervisor view of the encrypti= on + * state. It may not be possible to back out of changes, particularly if t= he + * failure occurs in communicating with the hypervisor. Given this limitat= ion, + * further work on the error handling is not likely to meaningfully improve + * the reliablity or usability of the system. + * + * Any errors are likely to soon render the VM inoperable, but we return + * an error rather than panic'ing so that the caller can decide how best + * to shutdown cleanly. */ static int __set_memory_enc_dec(unsigned long addr, int numpages, bool enc) { @@ -2203,6 +2221,14 @@ static int __set_memory_enc_dec(unsigned long addr, = int numpages, bool enc) return set_memory_p(&addr, numpages); } =20 +/* + * If set_memory_encrypted()/decrypted() returns an error, the input memory + * range is left in an indeterminate state. The encryption status of pages + * may be inconsistent, so the memory is unusable. The caller should not = try + * to do further operations on the memory, or return it to the free list. + * The memory must be leaked, and the caller should take steps to shutdown + * the system as cleanly as possible as something is seriously wrong. + */ int set_memory_encrypted(unsigned long addr, int numpages) { return __set_memory_enc_dec(addr, numpages, true); --=20 1.8.3.1