From nobody Fri Oct 23 16:18:12 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=citrix.com); dmarc=pass(p=reject dis=none) header.from=citrix.com ARC-Seal: i=2; a=rsa-sha256; t=1792169192; cv=pass; d=zohomail.com; s=zohoarc; b=gTQ5s1Cc+Z4oN/a93JNtrTgExIScb1C598Is7sQgyOMtQ7RgBzS88Ea2g8w5A366+ggSX8/Svw4YC9vntPRKbc6GsDPwdeViagK0xcF4LzVfCVSnvxPKBoIUe2qNd0qNYaSdOCsEIL0d4lQnJM56cDU+EWM/jlwwRqlmqwxlY9U= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1792169192; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=eis1qaNSuPfjas+GPjDLVyNpWEHsWLbEBEHoQsEMCHs=; b=S5Q1E2ghoFAjPGDi9yWjczWiZBNm0PP0Yu5sSaJC1v10qdXD5eacQ2Drte6J8DIq7xQa0zIG2ux7p/2MQimEVp1rnU7o9BMGK2om8ARuZlnQVNsJ8lYs/1dXGuXTGsGTQ/khs86MqzmMuQeIJu01Q10ZfG/bbKjHrNohR2tACsU= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=citrix.com); dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1792169192152997.074615881495; Fri, 16 Oct 2026 09:46:32 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1452424.1667235 (Exim 4.92) (envelope-from ) id 1xHl4S-0005Da-ST; Fri, 16 Oct 2026 16:46:16 +0000 Received: by outflank-mailman (output) from mailman id 1452424.1667235; Fri, 16 Oct 2026 16:46:16 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1xHl4S-0005DT-PY; Fri, 16 Oct 2026 16:46:16 +0000 Received: by outflank-mailman (input) for mailman id 1452424; Fri, 16 Oct 2026 16:46:15 +0000 Received: from mx.expurgate.net ([194.145.224.10]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1xHl4Q-00050S-Sr for xen-devel@lists.xenproject.org; Fri, 16 Oct 2026 16:46:14 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1xHl4Q-003Wv8-9h for xen-devel@lists.xenproject.org; Fri, 16 Oct 2026 18:46:14 +0200 Received: from [10.42.69.6] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from ) id 6ad254cb-8faa-0a2a0a5109dd-0a2a4506ca44-10 for ; Fri, 16 Oct 2026 18:46:14 +0200 Received: from [52.101.61.50] (helo=DM1PR04CU001.outbound.protection.outlook.com) by tlsNG-16d1c6.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1) (envelope-from ) id 6ad254d3-195a-0a2a45060019-34653d323dda-4 for ; Fri, 16 Oct 2026 18:46:14 +0200 Received: from BY1PR03MB7996.namprd03.prod.outlook.com (2603:10b6:a03:5b2::8) by SN4PR03MB989476.namprd03.prod.outlook.com (2603:10b6:806:219::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.522.14; Fri, 16 Oct 2026 16:45:58 +0000 Received: from BY1PR03MB7996.namprd03.prod.outlook.com ([fe80::5068:e1b5:b478:8d07]) by BY1PR03MB7996.namprd03.prod.outlook.com ([fe80::5068:e1b5:b478:8d07%3]) with mapi id 15.21.0522.016; Fri, 16 Oct 2026 16:45:58 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=citrix.com header.i="@citrix.com" header.h="From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=jOoZcEMm2jGMlA4U1zHTpaodLivu6WZgfgIXWP255IjbtO7P9/xNwXqdRRo1OALVnZKNMJngOSc8+E6qwDjoyC7K8utInVC8FTXQ2SPbnHrsJD2KNiAmBHrgJOgKrSQjK2pN1WIfPT1biXlaAijj6ehelevBLVU2c3A0OnmbWANPGwIhE5KsRkMko4A1cw7kpz1BFxKI/nYt5tJ4Ueenj3X3RBAlNayLkNn4THS6BImt5+W/7VbpYBZnoXSM6AYSUMuYSYvstvmnh3PNsaTHwjSqNsM4efCw+/W69u5hUI33O10cobGYGeyhhJ461Ma0I553mzLmbf/Exp8sC9kmKA== 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=eis1qaNSuPfjas+GPjDLVyNpWEHsWLbEBEHoQsEMCHs=; b=xGUamh1TSo7wMfVeiwI/D5psjf4d1uQfWbGQwVO/voCPDquEfw6NMCJZq539iF4UFLAkxgqSVQKJe9QhFxCqDNxwIkelcUZeu1wkSqymMtCiVxy0DNZvkGBXK7lwKQubuQyUJzs7WwXKma0swebtrE5LLwlC010pJbss731nH3lF+/O3KIBPOVMyS6dq57rYWdVHOV8KHaVNEDUNK4GJkBGtq/gQjGsXKrrbT92BY2zbtvQmVP8TvW29lQ0VdTQspYz8mSxw581j2jKtpYlasbfmAzCeiyTCxwjdWAaqSlWBagVCIiXD8qfvkumKdI5QC8Wr/BcLkdpSgp7ghAWFdg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com; dkim=pass header.d=citrix.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=eis1qaNSuPfjas+GPjDLVyNpWEHsWLbEBEHoQsEMCHs=; b=blwpMtxfA+syIjiHmaSRH54h8jXEfcOJxaChYJLa7pmlyki6vbqYYVb0XvE7WZO+M4lSLe7viWe3k2dMC7nATAVYYgaaUG6N11onkRoYcf+3+LWg1gBqLbnOkKRXabDwcmZ8okx6GkoUyhyYxkPaKCdHtfMpqIzFiNlJZ6WgRLM= Authentication-Results: mx.microsoft.com 1; dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=citrix.com; From: Kevin Lampis To: xen-devel@lists.xenproject.org Cc: jbeulich@suse.com, andrew.cooper3@citrix.com, roger@xenproject.org, teddy.astie@vates.tech, Kevin Lampis Subject: [PATCH v4 1/5] x86: extend update_intpte() to support atomic get-and-update Date: Fri, 16 Oct 2026 17:48:11 +0100 Message-ID: <20261016164815.3109065-2-kevin.lampis@citrix.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20261016164815.3109065-1-kevin.lampis@citrix.com> References: <20261016164815.3109065-1-kevin.lampis@citrix.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: LO4P123CA0555.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:33b::8) To BY1PR03MB7996.namprd03.prod.outlook.com (2603:10b6:a03:5b2::8) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BY1PR03MB7996:EE_|SN4PR03MB989476:EE_ X-MS-Office365-Filtering-Correlation-Id: 1ec3c764-16bd-4297-0961-08df2ba4f43d X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|376014|23010399003|56012099006|11063799006|261009223027099003|10067099003|18002099003|22082099003; X-Microsoft-Antispam-Message-Info: +7rG3W9t9ENts0amfRgh3VOKS+EXNSGIjI7JOM2VCM6uhTygI1eW3mrAp4FyRjeDF5Ik0vxAzCLG63ThCHomCbJY4UAlIg2mGM/c08yD3sAsPUbHSkCM1Hr4H4ABM7Ul8M45AFJbXNr+2AnxPb7WuOjrKNR3n0xd1gJoQBVEO4HyH7YzOOhG5gr1JakpqYUSZU9xqC4fBSr0P/1y22NVlmLM1ykOFMEvQuIsdXFnTJ/n4Nin0Wr7PfYLi5Ilqbv2CtJNIshjDsDoSQTGzzSs+Q3EB0qSzwA3VUKc0upOCiT3RjsPjE69OisQF+EAjp6JRsAOFv/CYoyPmQ0lw60ge7FZ8OOBcVJq11KgLszVN/8QDxYjoUAZ9VKNrpSEvQS7sLLqWHIWv45hq89bd+eP98aZcpVfjuZxA5krDOEY/NAFRzJcEs1AAR3AQrkYmZFysX2ud5fQbAdBEeTeO0HFhX6lNDILJPijkz6uteEYDr2gduWRLS8wXPjedUfwJ1q9CqIVtsZIzUQFo93s1jME6vtv85iUncSsi1d6vsyZa9sLlSiL1HnCwTVNxuhrIyfOdBIzy/+ElZO8gicQh8TDaDoJT3SfSnnYyjOhszxAorSZOYgJl1OJqiT4Xg20XJ+fA74VdtyOZrlMEz1NGqsbxw== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BY1PR03MB7996.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(376014)(23010399003)(56012099006)(11063799006)(261009223027099003)(10067099003)(18002099003)(22082099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?vgnU5TXIgTV382rL8dzEq4faKMTqxlCs+3PRuzwIr7KiLK5nEpvAmdd8hTP4?= =?us-ascii?Q?6mMBsTFZ4v8Dc3yrVLEGumIg+GvM/69Z/a+zAYmXGvqHODaaaWTCmla584ou?= =?us-ascii?Q?+I0PpyRJVctZGwhDJ4dx+L5Sgtn0kf1kTW6ohMLmVcqM5TiGky0LZ1vhSD9t?= =?us-ascii?Q?qZOzxy9zfO7fpi8I3i6ITrINYRe7uUpavjmSkGF0SBizBSCBi4lCZEYAJ+4W?= =?us-ascii?Q?w4FtzGETJZFjOM9tdxIotjmMMoIbY2cajVZy/HosGyyOH+qY5B+VXwwWnhGS?= =?us-ascii?Q?kclwLL3mZVHcWZf3+cNsI2Xy+lzrFpdujpoMU1Nx+ZXir5PTSfsLmaQHli2G?= =?us-ascii?Q?kHHk0CwFeuBY0yL4zo6hqwfg2Yy5AVYEvaWKYoloh9/+J2ZbfYgpeV7x7/F7?= =?us-ascii?Q?SMX6wokibqPnezje81spGiWj8zZYB6HxnDvXSBLqsQl8jIrfTPJZVQaxiCUy?= =?us-ascii?Q?6up0GBBuJUckLJqrzsac3bInJq1CelXprYrjURwLUOe/dIfEaoGAxOicjrwx?= =?us-ascii?Q?bVWx6Dx4sxaGBNAH55ZsJpeA3Jwu0mjSSxxwWutDHJtDjwsJ77IHl8nSo1uG?= =?us-ascii?Q?F7jftM4oXA8Hb4quiVvZTa2cT3fOIrTBYoxzm8qpYEgEUf2OO8fyH0cm5Fjv?= =?us-ascii?Q?RAOUmSecQI7wFJcQbFH0lA5B/UxEMinzbNpy0CLCr/UFQYlbwW2YKe19T5wt?= =?us-ascii?Q?XzJDgLPAGkExaDaZzWvpb/rrTLyGZRwwcbv9OD56K82kxxfS9NCKAblxS6zD?= =?us-ascii?Q?A+5CAgcXR+EznV8604kGn78y+GhI5J+SKaR2uL3E58TXPo9umvoNJt+gJPh1?= =?us-ascii?Q?X/5JPvZqALSNKvVLNw/SpRHdRH1oP8SRPC7rcdeLGzWEpzFB+UrdPu9WnU78?= =?us-ascii?Q?CdRoL/rJu9ooV6QENRBymRQmPoiiWgAPrmhdrh5r8PUIzsWVHSsueASp57g7?= =?us-ascii?Q?N1gfxE5B8Csl01GQ46dGlvOeMiWV/M02tKKbqUoDN0x26K1giMXqAg5NHRgQ?= =?us-ascii?Q?HVvzRFKm+9Lzlt2431OvyJfs29DteuwYsBOX1M+d4ZopdpiPWw4wBAYPkrup?= =?us-ascii?Q?3BAqGH6aWGSDJ4mDxpXo7whJ6yIQnVjk3RT/UHjfgya1Qd8420M6y9TwREkE?= =?us-ascii?Q?iBtvN6Np7W94sZY3Vhv7zjXmil/sg/3HnyJSccmqNP/KGbDHZasJg3icZpvg?= =?us-ascii?Q?/WOXBUlMfYI8ssrA2jCg3t397KBb5apjOfMXV+Hy1XZltvMEelZWAxZR9L5T?= =?us-ascii?Q?JlbgcyfEzdT2+kwEtkhk111xfPRCiAWcFzXyG7EsmGM32PZG8RyFqgMsPCob?= =?us-ascii?Q?6G4KJDSS/na5HY76DMwidFh3vWG/cdysfL7tYg0M4wnH5kLCl5NIPPHyuA96?= =?us-ascii?Q?WhTlvEvEmdiip3rw+HG6yUOHJtw6yA89Mjb8v3digO3uhsahfX8h8rurnGp1?= =?us-ascii?Q?hPxj44Bdcp8GfGU6GZqvpmVt2N0eSVMMKbpBQNpWRk4jb1PqQESeU8wq+LTE?= =?us-ascii?Q?WGiCtvEZNHtC4VbRoX/TP30NBx0LeKN8zz+IBnNHs4BAXzymTASfKQVJo6Um?= =?us-ascii?Q?69FoOU/0DXzbINZ0atXGBbaPyVexE5slmrlp0xdg8MMs/CyCqoux5dQyJiqA?= =?us-ascii?Q?sH7YnQX5H+MYJy4C8PbaXt1wQwuNNAfpRiROP1odorLqX502/gACCYpGqltL?= =?us-ascii?Q?NHJ+T64ADmMziX35b1aJAqJizobzTxHHjg8F0ZG3uBHeUju/aBJ72OxazCAp?= =?us-ascii?Q?XgYM6dU2/g=3D=3D?= X-OriginatorOrg: citrix.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1ec3c764-16bd-4297-0961-08df2ba4f43d X-MS-Exchange-CrossTenant-AuthSource: BY1PR03MB7996.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Oct 2026 16:45:58.2844 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: fhgvS/q7zg2YbEBAEakLo7qKpTQBvFZBpVpLSDKRSiYJFjirKSg2sLs7fzoFKueOtd8PDGC0qJoWsu4tYzkWWw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN4PR03MB989476 X-purgate-ID: tlsNG-16d1c6/1792169174-F7CCD77B-3C3B584C/0/0 X-purgate-type: clean X-purgate-size: 2001 X-ZohoMail-DKIM: pass (identity @citrix.com) X-ZM-MESSAGEID: 1792169193775158500 Content-Type: text/plain; charset="utf-8" The update_intpte() now accepts a new swap flag and if set returns the old pte value. No functional change for existing callers. Signed-off-by: Kevin Lampis --- Changes in v4: - Remove UPDATE_ENTRY_SWAP - Don't move the backslashes in UPDATE_ENTRY Changes in v3: - Return 0 in the paging_write_guest_entry() case (update_intpte) - Add UPDATE_ENTRY_SWAP to convert return value to correct type Changes in v2: - Add new PTE_UPDATE_SWAP flag instead of a bool argument - Return the old pte value instead of turning `old` into an out pointer --- xen/arch/x86/pv/mm.h | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/xen/arch/x86/pv/mm.h b/xen/arch/x86/pv/mm.h index bfee0feb7b21..381a0e25b986 100644 --- a/xen/arch/x86/pv/mm.h +++ b/xen/arch/x86/pv/mm.h @@ -64,16 +64,22 @@ static inline intpte_t paging_cmpxchg_guest_entry( =20 #define PTE_UPDATE_PRESERVE_AD (1u << 0) #define PTE_UPDATE_NO_TRANSLATE (1u << 1) +#define PTE_UPDATE_SWAP (1u << 2) =20 /* * How to write an entry to the guest pagetables. + * If the SWAP flag is set then does an atomic swap and returns the old PTE + * value, otherwise returns 0. */ -static inline void update_intpte(intpte_t *p, intpte_t old, intpte_t new, - mfn_t mfn, struct vcpu *v, unsigned int f= lags) +static inline intpte_t update_intpte(intpte_t *p, intpte_t old, intpte_t n= ew, + mfn_t mfn, struct vcpu *v, unsigned i= nt flags) { #ifndef PTE_UPDATE_WITH_CMPXCHG - if ( !(flags & PTE_UPDATE_PRESERVE_AD) ) + if ( !(flags & (PTE_UPDATE_PRESERVE_AD|PTE_UPDATE_SWAP)) ) + { paging_write_guest_entry(v, p, new, mfn); + return 0; + } else #endif { @@ -95,6 +101,8 @@ static inline void update_intpte(intpte_t *p, intpte_t o= ld, intpte_t new, old =3D t; } } + + return old; } =20 /* --=20 2.52.0 From nobody Fri Oct 23 16:18:12 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=citrix.com); dmarc=pass(p=reject dis=none) header.from=citrix.com ARC-Seal: i=2; a=rsa-sha256; t=1792169199; cv=pass; d=zohomail.com; s=zohoarc; b=LjEEPK4osAv5LFqpTEsdW1vJieQTyAOktO72C634O3hM9Z5bK178nIUPnnN5I5Vr+X7J9XedH8mNjvPZrHeez0lipcbJUKeKIH+zQemFXInA5N+ScKdNqTi+dAZp9SOGBgF661SEESHvhjHLki6Xx1tZuNRwz6PIAR6JFy2tVxo= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1792169199; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=TrJ9orQ89zsDoJwp96G3PNFcc/ZeuhXyKMJiiCFDl3c=; b=aGvuU816CmYw7tYCVpW3b4LYs4VYW7llE4lElpGg4huqtGjC3HgN0RjT8WlG6KjJHvtnqEeylhcLoyMzr4lhcbPSs/5KXJ5TEEWl9pb1Dio0gV32zOucrSU4TB4/3gtE12AMeM2kn5InIcCxRMYJ0Xxlm5GzIdmyrsoK9VeV6fQ= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=citrix.com); dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1792169199049394.2374195698583; Fri, 16 Oct 2026 09:46:39 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1452425.1667243 (Exim 4.92) (envelope-from ) id 1xHl4U-0005Ql-4E; Fri, 16 Oct 2026 16:46:18 +0000 Received: by outflank-mailman (output) from mailman id 1452425.1667243; Fri, 16 Oct 2026 16:46:18 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1xHl4U-0005Qc-0p; Fri, 16 Oct 2026 16:46:18 +0000 Received: by outflank-mailman (input) for mailman id 1452425; Fri, 16 Oct 2026 16:46:16 +0000 Received: from mx.expurgate.net ([194.145.224.10]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1xHl4R-000512-Oq for xen-devel@lists.xenproject.org; Fri, 16 Oct 2026 16:46:15 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1xHl4R-003Wv8-5U for xen-devel@lists.xenproject.org; Fri, 16 Oct 2026 18:46:15 +0200 Received: from [10.42.69.6] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from ) id 6ad254cb-8faa-0a2a0a5109dd-0a2a4506ca44-12 for ; Fri, 16 Oct 2026 18:46:15 +0200 Received: from [52.101.61.50] (helo=DM1PR04CU001.outbound.protection.outlook.com) by tlsNG-16d1c6.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1) (envelope-from ) id 6ad254d3-195a-0a2a45060019-34653d323dda-5 for ; Fri, 16 Oct 2026 18:46:14 +0200 Received: from BY1PR03MB7996.namprd03.prod.outlook.com (2603:10b6:a03:5b2::8) by SN4PR03MB989476.namprd03.prod.outlook.com (2603:10b6:806:219::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.522.14; Fri, 16 Oct 2026 16:46:05 +0000 Received: from BY1PR03MB7996.namprd03.prod.outlook.com ([fe80::5068:e1b5:b478:8d07]) by BY1PR03MB7996.namprd03.prod.outlook.com ([fe80::5068:e1b5:b478:8d07%3]) with mapi id 15.21.0522.016; Fri, 16 Oct 2026 16:46:05 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=citrix.com header.i="@citrix.com" header.h="From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Kbq0hyYdMiu1S7JMCXKYft3JYLuUmr1Fv0rDoCFWmaYrvU5fY56NDsuSi2aoOfTauFNbqb+o85qcMdstJe/UWvJ6APCdQdN+FAshVpsW3GG3QBRijDq+jeciz49QqJa1Gdh4LDCd0UY80qdu3LX/M9v9IIpQvIU4snCzDNL4bwWqUzZjAZvGtf+esHkIAWimzLDdrNc5/KeIgkwDuuIbNryJwV8JhIktdstf3QHD0dii/kg8cMwfed6xBV6CY/d9fXrjhtXZlhYoYBwN+7JIpZvRt9rM138XpkNup2JwLQusN+tjjYpaENjGwpTvwGtth+GNcOy+KlvGEXAozk8GfA== 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=TrJ9orQ89zsDoJwp96G3PNFcc/ZeuhXyKMJiiCFDl3c=; b=sLW6Ozom1StIrJuL4n+2OzYNqrYrEsTSadI4y5AY7Lxjxqhm9gSLDXQYgf9rNc/KuIBRm4jEBbtJILsrJ6KMrx3850XbxOtQmF4MefNPNgGBioWN8BYTnYJxSLoW/X+aSINqUuTCb25tVBaNtmUcOteRz3CTU+wHh6wi2wXCjeuCoSyyiXOKEBJEREHl9XzlD+sNLS3B/frNp9KjLkBydu4xua83Z/IMeJDbAM5VdsLmFXrgVWBLNc5KnycOpsFQy0xQKVR30NH/CUzidikiXiazydlwhvW0w1dlk9KOSdn7rI0J9SSJ1YnNITxuzP8KhBWBY6H5ELXncUqWHm7aFQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com; dkim=pass header.d=citrix.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=TrJ9orQ89zsDoJwp96G3PNFcc/ZeuhXyKMJiiCFDl3c=; b=p0W9VEqbK69Z5m8n6u+hrrlF61gD7wLNJwAejDzOhKODlwljhC4PcHpfdWRuHsHf4piBf7jqFxAByD2BrYsH64MjGgERvAWW+k9Fl50SVBZJMgPouWER/A00slhmvF0NixRHd6JTD/82BRxZBRFNFC8oXPh3oN1LfL1eCgA8dEs= Authentication-Results: mx.microsoft.com 1; dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=citrix.com; From: Kevin Lampis To: xen-devel@lists.xenproject.org Cc: jbeulich@suse.com, andrew.cooper3@citrix.com, roger@xenproject.org, teddy.astie@vates.tech, Kevin Lampis Subject: [PATCH v4 2/5] x86: extend mod_l*_entry() to optionally return the old PTE value Date: Fri, 16 Oct 2026 17:48:12 +0100 Message-ID: <20261016164815.3109065-3-kevin.lampis@citrix.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20261016164815.3109065-1-kevin.lampis@citrix.com> References: <20261016164815.3109065-1-kevin.lampis@citrix.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: LO4P123CA0586.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:295::7) To BY1PR03MB7996.namprd03.prod.outlook.com (2603:10b6:a03:5b2::8) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BY1PR03MB7996:EE_|SN4PR03MB989476:EE_ X-MS-Office365-Filtering-Correlation-Id: f0b26946-4531-4df1-2d36-08df2ba4f8af X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|376014|23010399003|56012099006|11063799006|261009223027099003|10067099003|18002099003|22082099003; X-Microsoft-Antispam-Message-Info: k6CjCL9VqK6w2ZlEVSdL5sWZi5dqZOD5zNhZRlbQMEKMGOwABAL2VyURk4W0q+Fil+JjESkAcu7wuzfY+Hh+Ol00cqfwnBsAdkj+494F+LaPqEZ5vw+3dJpE2At4WhUrXeD5FZNlQXSe6Nsoa54AOFLpyeOTiRU1Os3FJCNPslSxPMcz3EmElJt3rDPav5L7j8r27+L71Fgh9fBB+iP0rI71YluypWun0xh22u58TeX/z1LJm8evzFCnEovGZ78StJP7jSrsUNXTa8cT0QREXSu+ZFiJ6BPpjh8fuhoimMocZTw6rEY+PIBOY3M+xWN8xzcJwRFv7goY2MXhHPJeSf1wReTmETJHfNRzIBALWKxHqS2Omkg3WXRT75Tdo2HgeeVLVDDf0uf4A8OQnXAAN8UP43jkz7cjsjBLgpbPWb9XNXA9256s2sdbdALye+SynsP4R460CnTJmYvXONQVQIVDdmvPJQybw9noEml4V8ZwBAZcl+9bccSIebj1OXYRIh6mCADONAISLsxjZhYY6widh9fQUJlJV86WV8ZXXzD3fYEgJuuY6S43I6tQzDR1ccIBdhyLhSLjCcvrEN/Rl/LPynfBllniEXt+YVKZCS5q5zTIeFsToo+DRh2hdtP7hMvwUTcVpayzX7CyFLYw6WpTbF4z9u5LiQ/nwyPI3EE= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BY1PR03MB7996.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(376014)(23010399003)(56012099006)(11063799006)(261009223027099003)(10067099003)(18002099003)(22082099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?6TsCPS0Sp5bwqQXGxGOqmHaQg+TATD0cpMi6XMQT1ahLlWsVAAmCuwkBbEmn?= =?us-ascii?Q?HDL+eBeyTTwtnPsST7SR/ctLZm6CL+oRaVhHi68pVE26cAtgwfPhmbQcmYiy?= =?us-ascii?Q?iJxqvZFbeS84G+cklj+0CvMPAILTbyhzv92uM1d69kUB8/i06c4djjA7FMak?= =?us-ascii?Q?J0Bg2MelWKm0Ec1iM08uw09+K4VD0O6e2dTKBt9O/gxYIk4cPfP0iXJrqgnb?= =?us-ascii?Q?w38OtRGfq3RNb1Nq7CmE9KlMtBP6m+GqQRK2dZA4FkDzTWoEgPUNdiRk8+ri?= =?us-ascii?Q?ugQGldObB1ktLZ8DdpX7hjuNiA09xkiJPZ11ii4vcwH4dcm3gzdAbqN36ZYo?= =?us-ascii?Q?xrpFiy+mARkHCIyRlOAEyc33PcLEAlgjbRKOKHT6m2mznfU8jF8MJzOXn1H6?= =?us-ascii?Q?wpVYHN3isGXPPKhBA+Lztd7yauoSezeRQkPGxLCd34CBri//MawAlLItYU0I?= =?us-ascii?Q?FPll6wgJ3zD0gXsNM70721KaITETAoZpx76MtEKZLjALE6t4/W5KWj0jQ7dP?= =?us-ascii?Q?x9fS7EY7+NhkDW763ai1HekQjo6GFYAm95ke/88FxuRo/v8258FbWPd4O8+H?= =?us-ascii?Q?0IA4GLOx04Dx4vIiZVcEBVdr2lxVKw3HqhobSlbQ/qbS4GwEvM5ygthvnAqI?= =?us-ascii?Q?zXdoogu6oYIU57X0e93acc9ozVAQMUsjNCXSsE+xCw8pPsFfCDQ1vn4mvZn7?= =?us-ascii?Q?K/Y47GEg4om/7zAdtgXVSL3atKQEarehHLkql5gKedS5nULGQGeM/yi+WZVI?= =?us-ascii?Q?9WUhJgUayeY32JA5LoqEXNvUpWGWPxig6iOj4jkL6qUkFajp2GPow6S+C3jJ?= =?us-ascii?Q?IVBQmImMvc7Vp0u3qsmd1jIZYfqi/J2wdscGqNU6OQnjUl13z7eUegePGIJe?= =?us-ascii?Q?YDcBnzVE8pmE/3XlLQjALnCW1XwLSsKT2jY9uy9AVL9NEKr/sKfFFnV5jbUe?= =?us-ascii?Q?pEah3A/EZM5tpN7+4kdrRT9ALjcY++Z82OBoXL6D64K/iYClJ9A2jrwzTiM/?= =?us-ascii?Q?bR8iNfkhQkhb5ze/mfOueUmVifoTGAU5vz0l4CwlqACL5iqUPQZJiFfzKAnd?= =?us-ascii?Q?Ep0K740POiSxLj4wfWskw/WP9SA6MNNJe3ePybz2ZZxUvOf0F5+f4BEc1t0v?= =?us-ascii?Q?YPObpVURb7ZgbDMc7CNAYF70eRUjqu3/s7e1tR2D0LgiZAPNYV+mu795bIH9?= =?us-ascii?Q?C5mIVr0nF9aWd1cU4lRwpfvhXEni0TFHsFHKftp2kNFoWVW/k6XO2F/lCyuL?= =?us-ascii?Q?6JuKxg6w2kyKd1z2p1q8bira5pH4iDFMaos5hkTgL8JMYrLG/JdWUuK8vQ1A?= =?us-ascii?Q?b3rs/ma1HapSdNesy7jk9iSK90xp44f/gHevUwIG3iXiwYbOdfzpRWgZs/v/?= =?us-ascii?Q?lyn9Cwo/cEEoq8ssCQCudubOiXSlT5PI28MgmcVE3no3E8jhchDNq3wYBwSA?= =?us-ascii?Q?Ke0I1fcxML9equtoVbdi7Ot8ii92Tf6MYO08lMspL9Dk31iouGcl69xGiIlx?= =?us-ascii?Q?W+j0a4t1kb64/vBQuRryaP0/8jJRBCM/oUHMqwLTD0Z+HtD6hfm++CGSLeY0?= =?us-ascii?Q?V+Zf/6b1kcHBi6MSFZ+aWm8fIhc91G/HNiByoizfHewjHnvRPO8qheQy6OL+?= =?us-ascii?Q?TQhGjd4/m0wQfe2sY27ikt0vd/3SC0CHbciNpggNdzPKp/tRlbPJC/yHTGzh?= =?us-ascii?Q?breTMGEKtM79a+g3ch2P1IkU5K0fFRVfc0HpS/WV4QooPqvljiW9UBLqfv/H?= =?us-ascii?Q?R83fhQxpoQ=3D=3D?= X-OriginatorOrg: citrix.com X-MS-Exchange-CrossTenant-Network-Message-Id: f0b26946-4531-4df1-2d36-08df2ba4f8af X-MS-Exchange-CrossTenant-AuthSource: BY1PR03MB7996.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Oct 2026 16:46:05.7435 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: FZcp4ImYW30Fwc/I7rRSwL4x8ZyGNytgcmCkUEuRzoyR8UOQm0KQLuabjfuoKXEzr4U5Rv6Ez0FytbiNDjhcmQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN4PR03MB989476 X-purgate-ID: tlsNG-16d1c6/1792169175-F74C977B-F3376E54/0/0 X-purgate-type: clean X-purgate-size: 10844 X-ZohoMail-DKIM: pass (identity @citrix.com) X-ZM-MESSAGEID: 1792169200075158500 Content-Type: text/plain; charset="utf-8" Calling mod_l*_entry() with a valid ol*e_out pointer will do atomic CMPXCHG to set the new pte value and return the old pte value through the ol*e_out pointer. If the ol*e_out pointer is NULL then old behavior is preserved. Signed-off-by: Kevin Lampis --- Changes in v4: - Refactor how UPDATE_ENTRY is used - Update commit message to specify CMPXCHG instead of xchg Changes in v3: - Add swap to mod_l{2,3,4}_entry() Changes in v2: - UPDATE_ENTRY now returns the old pte value instead of using an out pointer --- xen/arch/x86/mm.c | 106 ++++++++++++++++++++++++++++++++++++---------- 1 file changed, 84 insertions(+), 22 deletions(-) diff --git a/xen/arch/x86/mm.c b/xen/arch/x86/mm.c index e42cd33c0d09..609c8595a487 100644 --- a/xen/arch/x86/mm.c +++ b/xen/arch/x86/mm.c @@ -2193,7 +2193,8 @@ static void l3t_unlock(struct page_info *page) /* Update the L1 entry at pl1e to new value nl1e. */ static int mod_l1_entry(l1_pgentry_t *pl1e, l1_pgentry_t nl1e, mfn_t gl1mfn, unsigned int update_flags, - struct vcpu *pt_vcpu, struct domain *pg_dom) + struct vcpu *pt_vcpu, struct domain *pg_dom, + l1_pgentry_t *ol1e_out) { l1_pgentry_t ol1e =3D l1e_read(pl1e); struct domain *pt_dom =3D pt_vcpu->domain; @@ -2254,7 +2255,11 @@ static int mod_l1_entry(l1_pgentry_t *pl1e, l1_pgent= ry_t nl1e, /* Fast path for sufficiently-similar mappings. */ if ( !l1e_has_changed(ol1e, nl1e, ~FASTPATH_FLAG_WHITELIST) ) { - UPDATE_ENTRY(l1, pl1e, ol1e, nl1e, gl1mfn, pt_vcpu, update_fla= gs); + intpte_t old =3D UPDATE_ENTRY(l1, pl1e, ol1e, nl1e, gl1mfn, pt= _vcpu, + update_flags); + if ( ol1e_out ) + *ol1e_out =3D l1e_from_intpte(old); + if ( page ) put_page(page); return 0; @@ -2277,14 +2282,25 @@ static int mod_l1_entry(l1_pgentry_t *pl1e, l1_pgen= try_t nl1e, if ( page ) put_page(page); =20 - UPDATE_ENTRY(l1, pl1e, ol1e, nl1e, gl1mfn, pt_vcpu, update_flags); + { + intpte_t old =3D UPDATE_ENTRY(l1, pl1e, ol1e, nl1e, gl1mfn, pt= _vcpu, + update_flags); + if ( ol1e_out ) + *ol1e_out =3D l1e_from_intpte(old); + } } else if ( pv_l1tf_check_l1e(pt_dom, nl1e) ) return -ERESTART; else - UPDATE_ENTRY(l1, pl1e, ol1e, nl1e, gl1mfn, pt_vcpu, update_flags); + { + intpte_t old =3D UPDATE_ENTRY(l1, pl1e, ol1e, nl1e, gl1mfn, pt_vcp= u, + update_flags); + if ( ol1e_out ) + *ol1e_out =3D l1e_from_intpte(old); + } =20 put_page_from_l1e(ol1e, pt_dom); + return rc; } =20 @@ -2294,7 +2310,8 @@ static int mod_l2_entry(l2_pgentry_t *pl2e, l2_pgentry_t nl2e, mfn_t mfn, unsigned int update_flags, - struct vcpu *vcpu) + struct vcpu *vcpu, + l2_pgentry_t *ol2e_out) { l2_pgentry_t ol2e; struct domain *d =3D vcpu->domain; @@ -2325,19 +2342,33 @@ static int mod_l2_entry(l2_pgentry_t *pl2e, /* Fast path for sufficiently-similar mappings. */ if ( !l2e_has_changed(ol2e, nl2e, ~FASTPATH_PDE_FLAG_WHITELIST) ) { - UPDATE_ENTRY(l2, pl2e, ol2e, nl2e, mfn, vcpu, update_flags); + intpte_t old =3D UPDATE_ENTRY(l2, pl2e, ol2e, nl2e, mfn, vcpu, + update_flags); + if ( ol2e_out ) + *ol2e_out =3D l2e_from_intpte(old); + return 0; } =20 if ( unlikely((rc =3D get_page_from_l2e(nl2e, mfn, d, 0)) < 0) ) return rc; =20 - UPDATE_ENTRY(l2, pl2e, ol2e, nl2e, mfn, vcpu, update_flags); + { + intpte_t old =3D UPDATE_ENTRY(l2, pl2e, ol2e, nl2e, mfn, vcpu, + update_flags); + if ( ol2e_out ) + *ol2e_out =3D l2e_from_intpte(old); + } } else if ( pv_l1tf_check_l2e(d, nl2e) ) return -ERESTART; else - UPDATE_ENTRY(l2, pl2e, ol2e, nl2e, mfn, vcpu, update_flags); + { + intpte_t old =3D UPDATE_ENTRY(l2, pl2e, ol2e, nl2e, mfn, vcpu, + update_flags); + if ( ol2e_out ) + *ol2e_out =3D l2e_from_intpte(old); + } =20 put_page_from_l2e(ol2e, mfn, PTF_defer); =20 @@ -2349,7 +2380,8 @@ static int mod_l3_entry(l3_pgentry_t *pl3e, l3_pgentry_t nl3e, mfn_t mfn, unsigned int update_flags, - struct vcpu *vcpu) + struct vcpu *vcpu, + l3_pgentry_t *ol3e_out) { l3_pgentry_t ol3e; struct domain *d =3D vcpu->domain; @@ -2378,7 +2410,11 @@ static int mod_l3_entry(l3_pgentry_t *pl3e, /* Fast path for sufficiently-similar mappings. */ if ( !l3e_has_changed(ol3e, nl3e, ~FASTPATH_PDE_FLAG_WHITELIST) ) { - UPDATE_ENTRY(l3, pl3e, ol3e, nl3e, mfn, vcpu, update_flags); + intpte_t old =3D UPDATE_ENTRY(l3, pl3e, ol3e, nl3e, mfn, vcpu, + update_flags); + if ( ol3e_out ) + *ol3e_out =3D l3e_from_intpte(old); + return 0; } =20 @@ -2387,12 +2423,22 @@ static int mod_l3_entry(l3_pgentry_t *pl3e, return rc; rc =3D 0; =20 - UPDATE_ENTRY(l3, pl3e, ol3e, nl3e, mfn, vcpu, update_flags); + { + intpte_t old =3D UPDATE_ENTRY(l3, pl3e, ol3e, nl3e, mfn, vcpu, + update_flags); + if ( ol3e_out ) + *ol3e_out =3D l3e_from_intpte(old); + } } else if ( pv_l1tf_check_l3e(d, nl3e) ) return -ERESTART; else - UPDATE_ENTRY(l3, pl3e, ol3e, nl3e, mfn, vcpu, update_flags); + { + intpte_t old =3D UPDATE_ENTRY(l3, pl3e, ol3e, nl3e, mfn, vcpu, + update_flags); + if ( ol3e_out ) + *ol3e_out =3D l3e_from_intpte(old); + } =20 put_page_from_l3e(ol3e, mfn, PTF_defer); return rc; @@ -2403,7 +2449,8 @@ static int mod_l4_entry(l4_pgentry_t *pl4e, l4_pgentry_t nl4e, mfn_t mfn, unsigned int update_flags, - struct vcpu *vcpu) + struct vcpu *vcpu, + l4_pgentry_t *ol4e_out) { struct domain *d =3D vcpu->domain; l4_pgentry_t ol4e; @@ -2432,7 +2479,11 @@ static int mod_l4_entry(l4_pgentry_t *pl4e, /* Fast path for sufficiently-similar mappings. */ if ( !l4e_has_changed(ol4e, nl4e, ~FASTPATH_PDE_FLAG_WHITELIST) ) { - UPDATE_ENTRY(l4, pl4e, ol4e, nl4e, mfn, vcpu, update_flags); + intpte_t old =3D UPDATE_ENTRY(l4, pl4e, ol4e, nl4e, mfn, vcpu, + update_flags); + if ( ol4e_out ) + *ol4e_out =3D l4e_from_intpte(old); + return 0; } =20 @@ -2441,12 +2492,22 @@ static int mod_l4_entry(l4_pgentry_t *pl4e, return rc; rc =3D 0; =20 - UPDATE_ENTRY(l4, pl4e, ol4e, nl4e, mfn, vcpu, update_flags); + { + intpte_t old =3D UPDATE_ENTRY(l4, pl4e, ol4e, nl4e, mfn, vcpu, + update_flags); + if ( ol4e_out ) + *ol4e_out =3D l4e_from_intpte(old); + } } else if ( pv_l1tf_check_l4e(d, nl4e) ) return -ERESTART; else - UPDATE_ENTRY(l4, pl4e, ol4e, nl4e, mfn, vcpu, update_flags); + { + intpte_t old =3D UPDATE_ENTRY(l4, pl4e, ol4e, nl4e, mfn, vcpu, + update_flags); + if ( ol4e_out ) + *ol4e_out =3D l4e_from_intpte(old); + } =20 put_page_from_l4e(ol4e, mfn, PTF_defer); return rc; @@ -3318,7 +3379,7 @@ int new_guest_cr3(mfn_t mfn) l4e_from_mfn(mfn, (_PAGE_PRESENT | _PAGE_RW | _PAGE_USER | _PAGE_ACCESSED)), - gt_mfn, 0, curr); + gt_mfn, 0, curr, NULL); unmap_domain_page(pl4e); switch ( rc ) { @@ -4156,14 +4217,14 @@ long do_mmu_update( { case PGT_l1_page_table: rc =3D mod_l1_entry(va, l1e_from_intpte(req.val), mfn, - update_flags, v, pg_owner); + update_flags, v, pg_owner, NULL); break; =20 case PGT_l2_page_table: if ( unlikely(pg_owner !=3D pt_owner) ) break; rc =3D mod_l2_entry(va, l2e_from_intpte(req.val), mfn, - update_flags, v); + update_flags, v, NULL); if ( !rc ) flush_linear_pt =3D true; break; @@ -4172,7 +4233,7 @@ long do_mmu_update( if ( unlikely(pg_owner !=3D pt_owner) ) break; rc =3D mod_l3_entry(va, l3e_from_intpte(req.val), mfn, - update_flags, v); + update_flags, v, NULL); if ( !rc ) flush_linear_pt =3D true; break; @@ -4181,7 +4242,7 @@ long do_mmu_update( if ( unlikely(pg_owner !=3D pt_owner) ) break; rc =3D mod_l4_entry(va, l4e_from_intpte(req.val), mfn, - update_flags, v); + update_flags, v, NULL); if ( !rc ) flush_linear_pt =3D true; if ( !rc && pt_owner->arch.pv.xpti ) @@ -4521,7 +4582,8 @@ static int __do_update_va_mapping( goto out; } =20 - rc =3D mod_l1_entry(pl1e, val, gl1mfn, MMU_NORMAL_PT_UPDATE, v, pg_own= er); + rc =3D mod_l1_entry(pl1e, val, gl1mfn, MMU_NORMAL_PT_UPDATE, v, pg_own= er, + NULL); =20 page_unlock(gl1pg); put_page(gl1pg); --=20 2.52.0 From nobody Fri Oct 23 16:18:12 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=citrix.com); dmarc=pass(p=reject dis=none) header.from=citrix.com ARC-Seal: i=2; a=rsa-sha256; t=1792169194; cv=pass; d=zohomail.com; s=zohoarc; b=UpRG1FsADXGJ/df4+Um07Jw2/BNI3dxJxxNlsw2VEKa3samv6JyxsjAFV2/GwxMAIUt2QZvTPunK5daZv8sFrs0dVUMA8fj36sP40Xv5C/DfSRPyrh5kVYAdMS+d8kHYaimZDHY5akw1O4aLQAkM4VEZfCPxdrwu1oGEOH+z+34= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1792169194; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=6mavEMVvcnQN/IdyCOyIwkBgy1KJC7/e6Fk3Q8+9/VY=; b=i3l3qpQtnpgKop7fju7zcWeyFkSxfUydnPhXXlOWU0FZ0VFCWx24uEYIV1G8lB8HoppaYBmN96li4+o/MWn6CnuJDOefPoZJL9eEyIwcSoEkMK50XrcMO+L1Bo4Bop275EsnLWB+yocwNm+4km5kWTvVdx65iA4acKQGH1Bcsic= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=citrix.com); dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1792169193993280.49155337534637; Fri, 16 Oct 2026 09:46:33 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1452426.1667250 (Exim 4.92) (envelope-from ) id 1xHl4U-0005WR-Ig; Fri, 16 Oct 2026 16:46:18 +0000 Received: by outflank-mailman (output) from mailman id 1452426.1667250; Fri, 16 Oct 2026 16:46:18 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1xHl4U-0005Ug-CX; Fri, 16 Oct 2026 16:46:18 +0000 Received: by outflank-mailman (input) for mailman id 1452426; Fri, 16 Oct 2026 16:46:17 +0000 Received: from mx.expurgate.net ([194.145.224.10]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1xHl4T-0005Ey-58 for xen-devel@lists.xenproject.org; Fri, 16 Oct 2026 16:46:17 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1xHl4S-003Wv8-ID for xen-devel@lists.xenproject.org; Fri, 16 Oct 2026 18:46:16 +0200 Received: from [10.42.69.6] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from ) id 6ad254cb-8faa-0a2a0a5109dd-0a2a4506ca44-14 for ; Fri, 16 Oct 2026 18:46:15 +0200 Received: from [52.101.61.50] (helo=DM1PR04CU001.outbound.protection.outlook.com) by tlsNG-16d1c6.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1) (envelope-from ) id 6ad254d3-195a-0a2a45060019-34653d323dda-6 for ; Fri, 16 Oct 2026 18:46:15 +0200 Received: from BY1PR03MB7996.namprd03.prod.outlook.com (2603:10b6:a03:5b2::8) by SN4PR03MB989476.namprd03.prod.outlook.com (2603:10b6:806:219::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.522.14; Fri, 16 Oct 2026 16:46:12 +0000 Received: from BY1PR03MB7996.namprd03.prod.outlook.com ([fe80::5068:e1b5:b478:8d07]) by BY1PR03MB7996.namprd03.prod.outlook.com ([fe80::5068:e1b5:b478:8d07%3]) with mapi id 15.21.0522.016; Fri, 16 Oct 2026 16:46:12 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=citrix.com header.i="@citrix.com" header.h="From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=YNQNZocNUBFzmhYJrFPpeqWZPIpRXTIUiw6FBJkslOrTvI5+zYvEGB1mbubjqHxDTxGvzovX/6QqHIScwQgV18w+jgZXWjlyEItRMmBpA5VaNlItU6v3en1qFIpgDVcR8pcAW7hsQBP0BIa5sER7g8BlgzP/jL/+Symld/jPDdep/MTurVDawOQR2Pjp2xAhSwvkf0bM0UwgxQObJwjh734gr86lrW5RAtVTI8prsIRQU4OpugD8viCV0lPffZM9XUWVe9eOj/GBvQnulYVLodbAq234sB8x0xzcvfR8cm37UPZ4uQZS6ESa5OI89Lk4hzmqmkz62c3CYPMEVV9dKw== 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=6mavEMVvcnQN/IdyCOyIwkBgy1KJC7/e6Fk3Q8+9/VY=; b=hZj8Lgfhrh0QqTgDwu482Y02gCqauvF3e1cZqeMkdSJ5D1IsR81MbuRT4whD4GXSUd0UfX5PhfGOgWrOBP9jpr2KjvyRFjNUcI9g0gL8DfXi1W+SXlNrCxF9er2oGAZSNjaYRXHkFp6fZ1mjIna3WWyN45Fdj5HwBUjfx18ubR6ueOEiRDNw6WkZa5co4YjTRwdi75Cwdu3Qp76PAcfpRkJhAbff8yyWBf6EiDjKQIAeqYLiMCVn4GSuwXiEq8koEUhGqS3ogeSgglotfweRBDW1uU6qoHw4J0f/LPWDmGfvIMrbEtoxmdzPCajX4+mQiYvBy0f/Eg9lEy3jCZEK/g== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com; dkim=pass header.d=citrix.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=6mavEMVvcnQN/IdyCOyIwkBgy1KJC7/e6Fk3Q8+9/VY=; b=jp1SAczfYJQGEo58bjnMCBVvYJxMFgjNryhZWd7gHCtjONFt6M2caOcota9sk8Yl/H1JuQxp73ES0/sWiM8iK8xxPfGz+ICBPw79wg3dIHqxoXW5QqZk5Adanw4BpavNrfD4fFwgb87vRPNR3+AYz0/VvhGlqousakuTRL7rZLo= Authentication-Results: mx.microsoft.com 1; dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=citrix.com; From: Kevin Lampis To: xen-devel@lists.xenproject.org Cc: jbeulich@suse.com, andrew.cooper3@citrix.com, roger@xenproject.org, teddy.astie@vates.tech, Kevin Lampis Subject: [PATCH v4 3/5] x86: extend do_mmu_update() to support returning the old PTE value Date: Fri, 16 Oct 2026 17:48:13 +0100 Message-ID: <20261016164815.3109065-4-kevin.lampis@citrix.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20261016164815.3109065-1-kevin.lampis@citrix.com> References: <20261016164815.3109065-1-kevin.lampis@citrix.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: LO4P123CA0430.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:18b::21) To BY1PR03MB7996.namprd03.prod.outlook.com (2603:10b6:a03:5b2::8) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BY1PR03MB7996:EE_|SN4PR03MB989476:EE_ X-MS-Office365-Filtering-Correlation-Id: c65a21fd-69d5-4c6e-588e-08df2ba4fcca X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|376014|23010399003|56012099006|11063799006|261009223027099003|10067099003|18002099003|22082099003; X-Microsoft-Antispam-Message-Info: pIKiSgPFJX/KMFhV/znkzKLN2hnQ7/mM3vMR1lx9K2XHdrBkREE9SSgzKHf0vsV45M6uwuuHWPHAKMtC/mpmT8lK0mUmx0mnJIk5FdA30c1tQ+GiO1gcJQJuFOiBhy7POD+AqAfjK4RxqiVP0MNDFP2WdplIQS+/0gNJPc12B6Y/9z+FZshh2AN8d3k+mCOqvMLYY03jGV4KOz6UYWkJQRZxTmpzKX1Je7kGE6OT7ZQ13yAGgL/kHedmYF+TlEUzG3n5yZjiIeyYN9GlB6WkVmJ9Ac//68m57oY5NfVTKZWv4MauBfpRB9YjZED54LEPGAbtimVz4ANICqpStRWcsR4hRo8QjIcCV/qyi8wf1RplfmuhjFVRQbJrOg94LEYcyf5QSRVFO7h2XNTgzb4APC0nI9sYB7arlSpUL/Kl522ojcxLrgVDxFgLyHpYbKbr7e4cQCjNnjtDm0tTiMcZ74AE63r/ihz9P/b6vKWOQRXoOkH/R/Ut7rS1NqLqvV/FrGnyo/7XmnbNPTiTFBIUDRl75TESgwxuh1NCOSz4isDU62b7CldrJ8SRRdKLQPK2WcvOLH2hykqCgjwkiLXTsIVbxS6IkhhMwNalrI0QaHK+IJ1FhaaLoFRv5M/sgN6s1TpSwuqGDjjUueKX6JIhGTw9d4+FAe3t75/Abnmi7TM= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BY1PR03MB7996.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(376014)(23010399003)(56012099006)(11063799006)(261009223027099003)(10067099003)(18002099003)(22082099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?9ZKoNtvZXFggjBulfD/e1Z/wf7Yu/b17P9x2JEV8FKge88wdcHi6T2i7GtHp?= =?us-ascii?Q?ij8yJPfOd0n47pRqhKrfKtbhkwaoRNaKBOFK5XmPcR4b6DNdD6n9guWZUhi5?= =?us-ascii?Q?30DRKw5vu23gyU8DXi2TJLGe9rxnaK7qzzU9w40S4PQ5EfMyDRWHlfQewMpw?= =?us-ascii?Q?UFDnL3y/3zRyfEMJkFA5kA6ESm0gsO/KvPwBUaB/Ub3WQdJdfIdHjYFXCMKn?= =?us-ascii?Q?SZ0H4Ppi0G4Of1A/fx9gFli6M2AeN+QyO3MH5rCL9ZO1hF0u4M4P7FDc7oEY?= =?us-ascii?Q?1vabVz5jOv4i7pFzUGkp69kpJeOR7beLMlmup3SYlxKf+ITJ8sMoCw97hWll?= =?us-ascii?Q?l5Q6u4CGGRuQFoi33DP/KmpJk9/9jfJ7pq3hXe1gigfpuzJi2+5gc/u2PUoa?= =?us-ascii?Q?fQlAVwvig3OybOvXDe30eLsOs8vctcK8Qmaw3vrFJY/fDSOT7GSNZEoYRmCL?= =?us-ascii?Q?F3wMBed1XCh96zRqatZIB1JtIqdamJan+o1FS2U3+sZTIgTLtCvWWPni7KFu?= =?us-ascii?Q?DqQbPtLlatbkqFWGzk1V6WuF1mW5Z47h+IGhZ1jl1ixQJiTnzyFES1SZnYPc?= =?us-ascii?Q?0DQsjAIw0HBx8pDcROOEjXODrdz0vUHtqIvlrGHfgi4ONB68glYZ5uBGzsUC?= =?us-ascii?Q?mn0rijmbPfQowSULVblgh4a7NWDVe+R0vff7CfsztqiPYfNgbHg2lzB/GxIm?= =?us-ascii?Q?iMimtVWvGN3xTdBf22coAu1shi9xhu34gr7Xi4+ovZ5Vq+NZuDIBMsAfVR47?= =?us-ascii?Q?nVUeSY4G5bl48rATsdxH6TuH8xpH5YBRxNOBIU8FMJP5UjKsQ17ci3vK+N9n?= =?us-ascii?Q?4RwY/8i3IMwYAdBCbAKWm4y7kB3JLYCdWiy+vbMmy1Z6GD6s0XypMIeIHb+G?= =?us-ascii?Q?1IsCwwIf5ggcl/IkZCUd0dIUspcLI2jm9xSsYEsFRNZKwFxi4TG/jNrtsw+r?= =?us-ascii?Q?ezpVFh7kgAXXIHmcy1BA/hAL0yNyziBXkCE1SEBewLsN+mXFPUFsm5KlRn5y?= =?us-ascii?Q?NAtH4/Lr5rf8TEZzklmRbDQuSzGpagyBEkxf6cv5pgfrX2AuyhtQCowmxuQB?= =?us-ascii?Q?/8Ff1wcerlRce6qc9h61Wqn/YjfS2ksBPi+/RYmGXtIAeMUcn3c7SVb0QrGF?= =?us-ascii?Q?bZ35k80FbTxZ112BTVijQjSVaz8RvsHL06OmVU4W/jLZPVnp1PE+cex7heoO?= =?us-ascii?Q?B96rjOqHvUEvFSC9A54ibNXOf8xzOWhpYKQaM5sWNNWc45k8dvBm9ia9cLX+?= =?us-ascii?Q?0wdlJpM8bNssXt89mssNVAdr4MmTzmRFElGYJDceuBLRNRIgNOdjmfiX5h4l?= =?us-ascii?Q?vq2KaKrFaHv/OycTDgzDl4Qp+/s0AEy8veDMYUZ9STgrXx7LPguhb66rNrGr?= =?us-ascii?Q?r+NnlTd8m79IPapedKFHFZIn9JmnRHzI2gIUL5lRukZCAZL8wLCbjUVwXjsz?= =?us-ascii?Q?b9JBQv6Eu2D5ven0n26DoEDR0N7XMw/snpBKBoyIT8B64cny542XsVvxyEyh?= =?us-ascii?Q?3SSAXhzXVCVLXHCwJkMN9UWWT70vVP7ntF7usM1/XJzBny6ZnnKqdIokPYxZ?= =?us-ascii?Q?GPdE4Z9sAGSR67HBjw3HBE9fTCHMoTcobprHZ+BaQhY7ncGmYvPVWClwcRGz?= =?us-ascii?Q?yKJmvOsim5D1yEX62YSDqxS2hptLOATrM3r4C63+vZNDYfJTCv6uVGXxpa5X?= =?us-ascii?Q?Ji4LKNml73YXdtRICiNh+nhpuENu7YphAohCfXrVbkLcDluARmE68ljbhdMB?= =?us-ascii?Q?QZGSgagvfA=3D=3D?= X-OriginatorOrg: citrix.com X-MS-Exchange-CrossTenant-Network-Message-Id: c65a21fd-69d5-4c6e-588e-08df2ba4fcca X-MS-Exchange-CrossTenant-AuthSource: BY1PR03MB7996.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Oct 2026 16:46:12.6393 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: Nl8mrlAF4WQEIASUXOUX0y64utX2eNRyIeE7MLFTLnbJnGY3Tvs+OOl2jqJUG44pRJ3J0SkwlE566Qo9ey2Tnw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN4PR03MB989476 X-purgate-ID: tlsNG-16d1c6/1792169175-1FACA77B-A78B3D26/0/0 X-purgate-type: clean X-purgate-size: 6707 X-ZohoMail-DKIM: pass (identity @citrix.com) X-ZM-MESSAGEID: 1792169195845158500 Content-Type: text/plain; charset="utf-8" A new sub-op MMU_PT_UPDATE_SWAP when used will do an atomic swap to set the new value and return the old PTE value through the req.val field. - The old PTE value is passed back to the guest through the req.val field If MMU_PT_UPDATE_SWAP is not set then the old behavior is preserved do_mmu_update -> mod_l*_entry -> UPDATE_ENTRY -> paging_write_guest_entry The new MMU_PT_UPDATE_SWAP call chain looks like this do_mmu_update -> mod_l*_entry -> UPDATE_ENTRY -> paging_cmpxchg_guest_ent= ry Signed-off-by: Kevin Lampis --- Changes in v4: - Refactor how mod_l*_entry() is used Checking `if (!rc)` multiple times in a row is inelegant but reduces the diff size. Let me know if that's not the right tradeoff here. Changes in v3: - Do swap for l2, l3, l4 - Allow all values not just 0 Changes in v2: - Add a sub-op to mmu_update instead of new hypercall - Rename to "swap" instead of "clear", although only `0` is accepted - Remove spurious curly brace from `case PGT_l1_page_table:` - Restructure `case PGT_l1_page_table:` to avoid diff churn - Add missing `MMU_PT_UPDATE_SWAP` check for the second `PGT_writable_page` block --- xen/arch/x86/mm.c | 60 ++++++++++++++++++++++++++++++++++++---- xen/include/public/xen.h | 1 + 2 files changed, 56 insertions(+), 5 deletions(-) diff --git a/xen/arch/x86/mm.c b/xen/arch/x86/mm.c index 609c8595a487..ab09e0703da4 100644 --- a/xen/arch/x86/mm.c +++ b/xen/arch/x86/mm.c @@ -4151,6 +4151,7 @@ long do_mmu_update( case MMU_NORMAL_PT_UPDATE: case MMU_PT_UPDATE_PRESERVE_AD: case MMU_PT_UPDATE_NO_TRANSLATE: + case MMU_PT_UPDATE_SWAP: { p2m_type_t p2mt; =20 @@ -4212,37 +4213,80 @@ long do_mmu_update( update_flags =3D PTE_UPDATE_PRESERVE_AD; else if ( cmd =3D=3D MMU_PT_UPDATE_NO_TRANSLATE ) update_flags =3D PTE_UPDATE_NO_TRANSLATE; + else if ( cmd =3D=3D MMU_PT_UPDATE_SWAP ) + update_flags =3D PTE_UPDATE_SWAP; =20 switch ( page->u.inuse.type_info & PGT_type_mask ) { case PGT_l1_page_table: + l1_pgentry_t ol1e =3D {}; rc =3D mod_l1_entry(va, l1e_from_intpte(req.val), mfn, - update_flags, v, pg_owner, NULL); + update_flags, v, pg_owner, &ol1e); + + if ( !rc && cmd =3D=3D MMU_PT_UPDATE_SWAP ) + { + req.val =3D ol1e.l1; + if ( unlikely(copy_to_guest(ureqs, &req, 1)) ) + rc =3D -EFAULT; + } break; =20 case PGT_l2_page_table: + l2_pgentry_t ol2e =3D {}; + if ( unlikely(pg_owner !=3D pt_owner) ) break; + rc =3D mod_l2_entry(va, l2e_from_intpte(req.val), mfn, - update_flags, v, NULL); + update_flags, v, &ol2e); + + if ( !rc && cmd =3D=3D MMU_PT_UPDATE_SWAP ) + { + req.val =3D ol2e.l2; + if ( unlikely(copy_to_guest(ureqs, &req, 1)) ) + rc =3D -EFAULT; + } + if ( !rc ) flush_linear_pt =3D true; break; =20 case PGT_l3_page_table: + l3_pgentry_t ol3e =3D {}; + if ( unlikely(pg_owner !=3D pt_owner) ) break; + rc =3D mod_l3_entry(va, l3e_from_intpte(req.val), mfn, - update_flags, v, NULL); + update_flags, v, &ol3e); + + if ( !rc && cmd =3D=3D MMU_PT_UPDATE_SWAP ) + { + req.val =3D ol3e.l3; + if ( unlikely(copy_to_guest(ureqs, &req, 1)) ) + rc =3D -EFAULT; + } + if ( !rc ) flush_linear_pt =3D true; break; =20 case PGT_l4_page_table: + l4_pgentry_t ol4e =3D {}; + if ( unlikely(pg_owner !=3D pt_owner) ) break; + rc =3D mod_l4_entry(va, l4e_from_intpte(req.val), mfn, - update_flags, v, NULL); + update_flags, v, &ol4e); + + if ( !rc && cmd =3D=3D MMU_PT_UPDATE_SWAP ) + { + req.val =3D ol4e.l4; + if ( unlikely(copy_to_guest(ureqs, &req, 1)) ) + rc =3D -EFAULT; + } + if ( !rc ) flush_linear_pt =3D true; if ( !rc && pt_owner->arch.pv.xpti ) @@ -4270,6 +4314,11 @@ long do_mmu_update( break; =20 case PGT_writable_page: + if ( unlikely(cmd =3D=3D MMU_PT_UPDATE_SWAP) ) + { + rc =3D -EINVAL; + break; + } perfc_incr(writable_mmu_updates); paging_write_guest_entry(v, va, req.val, mfn); rc =3D 0; @@ -4279,7 +4328,8 @@ long do_mmu_update( if ( rc =3D=3D -EINTR ) rc =3D -ERESTART; } - else if ( get_page_type(page, PGT_writable_page) ) + else if ( likely(cmd !=3D MMU_PT_UPDATE_SWAP) && + get_page_type(page, PGT_writable_page) ) { perfc_incr(writable_mmu_updates); paging_write_guest_entry(v, va, req.val, mfn); diff --git a/xen/include/public/xen.h b/xen/include/public/xen.h index 2149b8dd3808..2c403ca47ed6 100644 --- a/xen/include/public/xen.h +++ b/xen/include/public/xen.h @@ -349,6 +349,7 @@ DEFINE_XEN_GUEST_HANDLE(xen_ulong_t); #define MMU_PT_UPDATE_PRESERVE_AD 2 /* atomically: *ptr =3D val | (*ptr&(= A|D)) */ #define MMU_PT_UPDATE_NO_TRANSLATE 3 /* checked '*ptr =3D val'. ptr is MA.= */ /* val never translated. = */ +#define MMU_PT_UPDATE_SWAP 4 /* Update and return the old value. */ =20 /* * MMU EXTENDED OPERATIONS --=20 2.52.0 From nobody Fri Oct 23 16:18:12 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=citrix.com); dmarc=pass(p=reject dis=none) header.from=citrix.com ARC-Seal: i=2; a=rsa-sha256; t=1792169212; cv=pass; d=zohomail.com; s=zohoarc; b=CHxMwwHZ9u+O//okwAkbvyizYD08cub1RE14HL/sPtgB+K2YfxAtbZmHBUZYnImwht+eq/4qRKdWMlPQ37GBdSLDxslDMmt9fk1h89x3/DuouDff2JZDX/Te1WMt4B5zjD0jKizPNbQvNFUxspg6cWJ+AP4JPFaE2RclblkruT4= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1792169212; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=xVqOtSOUy2pB6e59N44Js2UK5JmQmOee60/HkofDur4=; b=HEHm/AHgw21iTgT3R6a2kSBN+ffsR+8L/VY0zDcyP+5sRDp8mIwbKwWFsDA002c9c3JKXu5GKvcuOlE/+SJNKYsmWktcIO3kV8TS6P6COMLG4Y0lxIQoQDeXLIdE4yVzRvSPQlEcoh3CswnU7b7CuLZVpWzYZlIjTZCH05EMMfc= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=citrix.com); dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1792169212692625.135869370437; Fri, 16 Oct 2026 09:46:52 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1452430.1667263 (Exim 4.92) (envelope-from ) id 1xHl4j-0006AE-Qu; Fri, 16 Oct 2026 16:46:33 +0000 Received: by outflank-mailman (output) from mailman id 1452430.1667263; Fri, 16 Oct 2026 16:46:33 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1xHl4j-0006A7-Ln; Fri, 16 Oct 2026 16:46:33 +0000 Received: by outflank-mailman (input) for mailman id 1452430; Fri, 16 Oct 2026 16:46:32 +0000 Received: from mx.expurgate.net ([194.145.224.10]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1xHl4i-00068m-Jy for xen-devel@lists.xenproject.org; Fri, 16 Oct 2026 16:46:32 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1xHl4i-00BCOx-0r for xen-devel@lists.xenproject.org; Fri, 16 Oct 2026 18:46:32 +0200 Received: from [10.42.69.2] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from ) id 6ad254cb-2eae-0a2a0a5409dd-0a2a4502a668-34 for ; Fri, 16 Oct 2026 18:46:32 +0200 Received: from [52.101.61.1] (helo=DM1PR04CU001.outbound.protection.outlook.com) by tlsNG-720697.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1) (envelope-from ) id 6ad254e6-6ca4-0a2a45020019-34653d019999-3 for ; Fri, 16 Oct 2026 18:46:31 +0200 Received: from BY1PR03MB7996.namprd03.prod.outlook.com (2603:10b6:a03:5b2::8) by SN4PR03MB989476.namprd03.prod.outlook.com (2603:10b6:806:219::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.522.14; Fri, 16 Oct 2026 16:46:20 +0000 Received: from BY1PR03MB7996.namprd03.prod.outlook.com ([fe80::5068:e1b5:b478:8d07]) by BY1PR03MB7996.namprd03.prod.outlook.com ([fe80::5068:e1b5:b478:8d07%3]) with mapi id 15.21.0522.016; Fri, 16 Oct 2026 16:46:20 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=citrix.com header.i="@citrix.com" header.h="From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=QsmNXOTsRFgGScYpquzDQqBEi9ewNRy6vagNB4/ZEB6vQJYynWvR0iPjoR+lpG07R4U05RXkBLOnfC/g7mbyzoUV3p7mfOI+PPk+9tFWftdims0pgvsWyOMFMizhu3D8/APoffb6vaHHBq7k88lV4oDCjAp16h7KAiLJcUzoQE5IeI5Vcr9SO8SWEg5oxKOCSNkEC76lMtCqBb8w/83fY/hTevcSITnWK0lMWXKJobJri98cgxDPQ3ZHITz8sceZbRCWbg8N2hHRhXsaBy1KYCzgGdxbAeSs0vVLSCAphAx5rl+/3a9zKuhGJ/QpBADudca/wUlwPQXfHihPN75eiw== 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=xVqOtSOUy2pB6e59N44Js2UK5JmQmOee60/HkofDur4=; b=Y3XwR6LCZby3CQyqiYPpIvHyq5KEU/Tohptm1CaqGZXrwWyJxt1ClYL2/Lq0sSIl1U4RnmfKzXkTkM6++nemmivPV6G3jCCUmgyEWHNgptNnw7lDZtcwTVbFXhIAF4ntbysiGWnq+K4/hgYX5GBnYpzQPGEjdpGzmNFMjKQGZR3kx+sr6NNsaVA+gfQXF0K6XE3xN9lYr0/7mRtJAPmdPxPT4v0DmgnzNQBLIztgwyucngaiYXleOxRxz2SEgtB6OafUTj04JqbuLD7YZgYj1beyZRVF3vCdJAOlOhIH/frT1aMtDK5jXZmEOkJz5sUZUqZrNY6Q25btqGTd+YQYmQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com; dkim=pass header.d=citrix.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=xVqOtSOUy2pB6e59N44Js2UK5JmQmOee60/HkofDur4=; b=lqyEXew8uPvdavnn52fq5L0TFRNxpit09shEZxZykHxhW+sW2X91GeqylckSfZTwfZULw2x0f4B4Bnva/9wzxm21Kwu7LP7dACWKnM6OS17ET+5LSnyhTaTmfyYaiS1hnrwtSPYHBbz1AeSIUKnsfoDUdLVxQDk2bF0ockHLRl4= Authentication-Results: mx.microsoft.com 1; dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=citrix.com; From: Kevin Lampis To: xen-devel@lists.xenproject.org Cc: jbeulich@suse.com, andrew.cooper3@citrix.com, roger@xenproject.org, teddy.astie@vates.tech, Kevin Lampis Subject: [PATCH v4 4/5] x86: New feature flag XENFEAT_mmu_pt_update_swap. Date: Fri, 16 Oct 2026 17:48:14 +0100 Message-ID: <20261016164815.3109065-5-kevin.lampis@citrix.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20261016164815.3109065-1-kevin.lampis@citrix.com> References: <20261016164815.3109065-1-kevin.lampis@citrix.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: LO4P265CA0194.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:318::9) To BY1PR03MB7996.namprd03.prod.outlook.com (2603:10b6:a03:5b2::8) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BY1PR03MB7996:EE_|SN4PR03MB989476:EE_ X-MS-Office365-Filtering-Correlation-Id: 44e34282-88a9-4b98-6946-08df2ba5014d X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|376014|23010399003|56012099006|11063799006|261009223027099003|10067099003|18002099003|22082099003; X-Microsoft-Antispam-Message-Info: o9kC48xBTSySPm8LskyqlQt2qh8myWbyppis3MG1EuwuXz3P0+Y6scGxhP40CC3nam4SqqjenAgy9uuJGo7l57bmpwn1RWEusSNC/jcetkqT5cTz8FDDz9gw49Bt6i6vxAA7iM0MDE9lj1XkvqiS35cNCfjyI8t8bEw9nzNsbORqxT2RFVijvuPTD5yZpuizVnRXAe91/UNhjezB6WQT62obSrrhe84bC0Rc+l1BtsBYz3vI0r8Q4WL7THy88h+HIPJjKp6eNiKysZIieP94VYwjVKJWc38hwJ/0zld6oOHzgqjtlAnf9dzT/74XLRMuYoKoGrpP5YLcVszTE0xwW75ZZIEAkQmfFkwd135YkdFtpfYSgmcSl/gQqMjeeLUmpOylZGWrnIgFhQFMtsKFKYxdMRKfLtLJY9cdPexVgihkY8flwpzfMVdwIgvwupSo4NaJJwQ/iOdtRTfsePeU6vgLTinWZPu4Hs8/pSUsJANzzDvNlkZP1yAkELAcnzDKX8AAY1APrATuoKIZAG8voRXaUcOyUCXkwSltUbKyhixOtbkECMFgtctOwmnBhixvgCY2YLbr/bCi3YaECc7Z1e1WZ3pFMw6dg2ZGXJ+ctHVoEbfOfvHIZhr1z5ZT2vDC2l9jBCH9QGY1asJg/U7Lom5vX7qnnB/Muc2w0Mqkcco= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BY1PR03MB7996.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(376014)(23010399003)(56012099006)(11063799006)(261009223027099003)(10067099003)(18002099003)(22082099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?Q0vv8Y9Zn2PcB5hmS4ElsbWqGOOTnDrmZTNi2XWyYJEGNYnwVQoIdmZzuG96?= =?us-ascii?Q?4uMG2T/Jk8yb+YWnUAJAy1OgD2wsgvHgzg9/QeKmtF/g7FvOtHQ6gLPrMWGu?= =?us-ascii?Q?YXSlRneQZLgn2jj2xnh6Tsjn9ZxnS9R8EFZ4PidE6j5BO+8ccen2GIh/aG1Z?= =?us-ascii?Q?SyPfCAqXDP2+A/0orbp0eQD8zATCrhF/bBN757ACddKyXNfFT29FiyCNtnoa?= =?us-ascii?Q?jFqhkoYsNJ1jE4qyTME6QAiOvF93/ugxCwFCyOSCFRA+yPueGCr34Uxw3au5?= =?us-ascii?Q?+nzqhIJ8ElCAyt6a+kF0zge/CuO1k6+x4MJyPj5Qo+YMINvsMnWnL3vvyDvx?= =?us-ascii?Q?/62YtrebTJZnmU+kn1Ap3Klmb20pfXhWDdHKq6qW26wlvGJ/kqNdoTB3P2N6?= =?us-ascii?Q?Iysk0Efeioq2vEZYU5yHfhu2GOI1kgqYC/1cmNcaOVrwuKh5U05+nJgU7vNh?= =?us-ascii?Q?EP9kOzdZUfZlVtbsNaGEbJ9dO/LiY92jb79CLA7YJmOCB+mzG8pI+VlQxIX1?= =?us-ascii?Q?njboFRRSZHKxjkBXjw2l8RiDoj7vNcbncSoAVxlbvQFT4du3hjWMXO8StnAK?= =?us-ascii?Q?opjYr5ciASG3e5W+LVZB42es85DeNTtyHPoM4iQmhw7b7vwx662Ej4kfGrBU?= =?us-ascii?Q?JFHUlN5q/PEMthanjSqj4hppzEOUasJTF4xy/Ks6BHmia0J0lujlq73gIxAe?= =?us-ascii?Q?eGAUpOfdIDdy0GErnj6ME51AzGOfu5zYoI77JVBmiUiiZDAVI8zRpgZku+9d?= =?us-ascii?Q?TX8d/3O5PonneH/1BVluZnRAT605bFosp97Il1o03NBR8FXzOT3+FUIIG92e?= =?us-ascii?Q?SsT+PgwtA2JFXgfhYaxnTwT8vBzuB9dy16ttskOMtKTsuXfkFyydviueXFQ+?= =?us-ascii?Q?UGBzorTD8Z+C2DZOjZ0rueTQI9JbDp7RYYykvd9jY8bthuJFptI0UMQGqy94?= =?us-ascii?Q?NLMi60Yj7GDG5Q2UiSOI3aYxmzNJEHWvCbk4sxm0Ic7CdLvIJ6OEcdVHXvIl?= =?us-ascii?Q?jhwhdVb05xM5YcMEmSjekPKHDoLERknhZpA3fgtbn2p8uhQLvXBXTr1BU4z2?= =?us-ascii?Q?/ZpvKyR5rUN3WMgBEMPwFbUM2HIPuWl3YLy2lkfzJ6lniAEKvJjudPbSJFxT?= =?us-ascii?Q?Lx41rw5gs2QZGbaG8D4fq4v6UMiY9hWavE2sjK+BvZFg1AEH1YMg2EThvtGd?= =?us-ascii?Q?qDhtnwr1aMD0kDgTrrNUicFlhBm5XU5GTCq/6xXkeUwxkc3vDPQW6nXHGiIA?= =?us-ascii?Q?tFT3JtbnnaRS5OOosmoz5Y3rdsnzMVW80NzZfc+Rpf+KazaS29SUcwaWJ0V2?= =?us-ascii?Q?/JMrvXu4NzmPk6e2gjZEr9NATDdy50jK+Fh+EI9g5W2KEjnZtzPz3Nrumz4L?= =?us-ascii?Q?5ySRe0B7xGPmIJWp3CdyPe3uNqjEpI9vmJscUfHr65Euh3FznehdfmiRIk/4?= =?us-ascii?Q?WmFXMSbTYs+ckr6Mj6bW4Ae6EwvbB+JeT2mz/LauL4eoMOozaAWRnqbCJYXb?= =?us-ascii?Q?b/BctAT9moEXJUg2DekPpSQZ71AtO48PTszDINZuP+Ns9jgapq3QXaAJu1QJ?= =?us-ascii?Q?yZ16RoLW11FdYqPoHwjdMHGoVEZRH8Hgtq1+sqdjS5k648wYrWF1xeE7TTGj?= =?us-ascii?Q?o5PZ2wOFHsFbwQabuUL3jsqQceM+i5uR8Q3Xzd6rwhmCLRGyE/O/eatKVBcE?= =?us-ascii?Q?e/YcdHl7XhZXMzTVYPUgSuCkVGppjF4DPbf7INn2InhBI3V5l4zcnAsaeg5U?= =?us-ascii?Q?x4mUBWq1Eg=3D=3D?= X-OriginatorOrg: citrix.com X-MS-Exchange-CrossTenant-Network-Message-Id: 44e34282-88a9-4b98-6946-08df2ba5014d X-MS-Exchange-CrossTenant-AuthSource: BY1PR03MB7996.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Oct 2026 16:46:20.2210 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: caZrALoDwRrtjvspL6MTscRuubzJFcu6Fe1H8JPbwvdcGHherm/7khr6gHU58elxYn34fDvvgA3xWvGc5pjV3g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN4PR03MB989476 X-purgate-ID: tlsNG-720697/1792169191-F08A42AC-EF9B9C7B/0/0 X-purgate-type: clean X-purgate-size: 1305 X-ZohoMail-DKIM: pass (identity @citrix.com) X-ZM-MESSAGEID: 1792169214172158500 Content-Type: text/plain; charset="utf-8" Signed-off-by: Kevin Lampis --- xen/common/kernel.c | 1 + xen/include/public/features.h | 3 +++ 2 files changed, 4 insertions(+) diff --git a/xen/common/kernel.c b/xen/common/kernel.c index 499023fae6fd..dc3cd9c3321b 100644 --- a/xen/common/kernel.c +++ b/xen/common/kernel.c @@ -690,6 +690,7 @@ long do_xen_version(int cmd, XEN_GUEST_HANDLE_PARAM(voi= d) arg) if ( is_pv_domain(d) ) { fi.submap |=3D (1U << XENFEAT_mmu_pt_update_preserve_ad) | + (1U << XENFEAT_mmu_pt_update_swap) | (1U << XENFEAT_highmem_assist) | (1U << XENFEAT_gnttab_map_avail_bits); if ( IS_ENABLED(CONFIG_PV32) && VM_ASSIST(d, pae_extended_= cr3) ) diff --git a/xen/include/public/features.h b/xen/include/public/features.h index 880193094713..227f1e408e41 100644 --- a/xen/include/public/features.h +++ b/xen/include/public/features.h @@ -128,6 +128,9 @@ */ #define XENFEAT_dm_msix_all_writes 20 =20 +/* x86: Does this Xen host support the MMU_PT_UPDATE_SWAP hypercall? */ +#define XENFEAT_mmu_pt_update_swap 21 + #define XENFEAT_NR_SUBMAPS 1 =20 #endif /* __XEN_PUBLIC_FEATURES_H__ */ --=20 2.52.0 From nobody Fri Oct 23 16:18:12 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=citrix.com); dmarc=pass(p=reject dis=none) header.from=citrix.com ARC-Seal: i=2; a=rsa-sha256; t=1792169209; cv=pass; d=zohomail.com; s=zohoarc; b=WGT+7/ukS4FMT+zdAIQnP0odITb8rIWGkibxaViiWbzv9rP96YsqGL913+IAqQVyV+kphOpzHyQ2WbolDDcbcjYaBlskp46Zlzvf9u0TfnPyvmzJ29hovrtOSEEXji3lKqAhkAVmWkLvJVwCCkB1V0g2Ghorv2j0EBJJl9ISKPk= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1792169209; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=TzJSH5d1PozqUsLrg++wK8/emMiRnK9WBI0v3qfVBns=; b=BzclytwCt0+b6r4Zzmgg4MxYJkvgqE/kB8GjvoFDBznvLvOE1mPLytPfgF3BKoS6fAHkc+MO7MxuW9turdbvbGzaf/B2BUCz8KhzzEKYRuQ9+ebO3ij2wrha0zKlmdxr+ZooVitaDqTczP4Jnz/n4cxVpzAnXy6cVH1+QAe0yDs= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=citrix.com); dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1792169209706463.51523145498777; Fri, 16 Oct 2026 09:46:49 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1452431.1667270 (Exim 4.92) (envelope-from ) id 1xHl4l-0006PV-22; Fri, 16 Oct 2026 16:46:35 +0000 Received: by outflank-mailman (output) from mailman id 1452431.1667270; Fri, 16 Oct 2026 16:46:35 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1xHl4k-0006Op-Ux; Fri, 16 Oct 2026 16:46:34 +0000 Received: by outflank-mailman (input) for mailman id 1452431; Fri, 16 Oct 2026 16:46:33 +0000 Received: from mx.expurgate.net ([195.190.135.10]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1xHl4j-00069n-PX for xen-devel@lists.xenproject.org; Fri, 16 Oct 2026 16:46:33 +0000 Received: from mx.expurgate.net (helo=localhost) by mx.expurgate.net with esmtp id 1xHl4i-00994g-Vs for xen-devel@lists.xenproject.org; Fri, 16 Oct 2026 18:46:32 +0200 Received: from [10.42.69.2] (helo=localhost) by localhost with ESMTP (eXpurgate MTA 0.9.1) (envelope-from ) id 6ad254cb-2eae-0a2a0a5409dd-0a2a4502a668-36 for ; Fri, 16 Oct 2026 18:46:32 +0200 Received: from [52.101.61.1] (helo=DM1PR04CU001.outbound.protection.outlook.com) by tlsNG-720697.mxtls.expurgate.net with ESMTPS (eXpurgate 4.57.1) (envelope-from ) id 6ad254e6-6ca4-0a2a45020019-34653d019999-4 for ; Fri, 16 Oct 2026 18:46:32 +0200 Received: from BY1PR03MB7996.namprd03.prod.outlook.com (2603:10b6:a03:5b2::8) by SN4PR03MB989476.namprd03.prod.outlook.com (2603:10b6:806:219::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.522.14; Fri, 16 Oct 2026 16:46:27 +0000 Received: from BY1PR03MB7996.namprd03.prod.outlook.com ([fe80::5068:e1b5:b478:8d07]) by BY1PR03MB7996.namprd03.prod.outlook.com ([fe80::5068:e1b5:b478:8d07%3]) with mapi id 15.21.0522.016; Fri, 16 Oct 2026 16:46:27 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" Authentication-Results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=citrix.com header.i="@citrix.com" header.h="From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=tTHSpKd4ZELmeDnuLlLLsA6bI3gAbEfLZ8b4hl55Sbaue1AX/OyikiLqczF6OJHGhW4Cl8KJPovorHizJjF1efZLGYwd1LAquNn0cleEcWNQu0uxofQtz0d4ksWaP1n6lRnXmuCsnjiAS+2eOO63QpLNfRrifV9AikpgkMfR0QyTRpTV1NbGgPJHkH6z+cr9v+Aaq9nkw9Awe5o+YmbdOttC2HPDa/FL3sw1QBZVzBVx7NJzBzueapORTLyil8jFlEttqaMPEFhyFBCUJlOJyyFkt97yCsEpxFATMC49D4L5ObxWvkuyYyNjxbdgi8G66V4Yy/lVA2OVllDPkxUypQ== 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=TzJSH5d1PozqUsLrg++wK8/emMiRnK9WBI0v3qfVBns=; b=czb9d+gaCI8q0A6rwAvhayRubnnj4NtWVLyD8YqCQ7yCALriHZWoUIXDeuP4cLqkthwUeLyqGHF3DQhi62eYIYhZe3UijY0+LVDGgffWzA84oy31qQ4iqXdV/ixKVL/qON+0y9uKix7kAUMZqoqDIuanW5ewsoEG1EdBSf0NHeK4rDusz6SjFekwjkAPPUu5PfFxuRewTSEdrgjd5oVKy7Fa2FusK+0v1HFQLV2BaU5/fBEwJOSNQMKKGcPtHj9Y3HAiqinvaZ0t3TRV9P9QqvI3vAWFLaG6iPi9G5+nlHUcEFmbSlB6NGAVolp7Os+uZLcs0bjmNwoU2JvSC1O+Dg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com; dkim=pass header.d=citrix.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=TzJSH5d1PozqUsLrg++wK8/emMiRnK9WBI0v3qfVBns=; b=jM68RFw2WJ8WQJnOn7iEfdAlxqMIJU/l9RxXn+HWVD8cFp5geikaKEu8qahpm9ybUCvSFu6PLm4FO6cKV92DUPX7udrUtr6U3Mx0R8ByUodhiu4g7f65gnrLFZACnMBuCnnA7oiQBUs1gHmi58wVoocSGEtrNnHD3mJkK7/R8E4= Authentication-Results: mx.microsoft.com 1; dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=citrix.com; From: Kevin Lampis To: xen-devel@lists.xenproject.org Cc: jbeulich@suse.com, andrew.cooper3@citrix.com, roger@xenproject.org, teddy.astie@vates.tech, Kevin Lampis , jgross@suse.com Subject: [PATCH Linux v4 5/5] xen: Add new Xen pv-op pte_get_and_clear Date: Fri, 16 Oct 2026 17:48:15 +0100 Message-ID: <20261016164815.3109065-6-kevin.lampis@citrix.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20261016164815.3109065-1-kevin.lampis@citrix.com> References: <20261016164815.3109065-1-kevin.lampis@citrix.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: LO4P123CA0054.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:152::23) To BY1PR03MB7996.namprd03.prod.outlook.com (2603:10b6:a03:5b2::8) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BY1PR03MB7996:EE_|SN4PR03MB989476:EE_ X-MS-Office365-Filtering-Correlation-Id: 063f5804-c64d-43f8-3a5e-08df2ba5058f X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|376014|23010399003|56012099006|11063799006|261009223027099003|10067099003|18002099003|22082099003|6133799003; X-Microsoft-Antispam-Message-Info: 2YYDyTPdRdnujixve6mIkwXPBqmevpu4lflKxhELVIxXRCEMIdnXdnouB+q4Dv6yyhYHIAb5rjx2DLPB+bJiuCEeUGiSjNoMcFggquUCrdNoDJgY8cubUAD8E5nO5T2PXw0EWPMmSR3vGQbx1BDZm2jr/T+feYyK6jrCYicxWz1tZdrzWjSAE7JhIJje43GILkmr9WxWTM+YxT9Y8/TLRtEFAhA0KBFkIOCSxHJe0cWVbqikUMp1DLhAUGwrmLfWJga3L1fFLdBgsVL0byNsbtelRnPBZsQU28iZuiVEhpzl/+8Ad99lLZwzvhOcnH0uXFpcxKs1nDaYlBeZX4/OclCY2Fyn/3yw0G8fMHqxJtqiAXN0OUWJ8wy0HiYBCaZDdUZg3KwiROCuJa9jKhwSAc3piX7L8x3CywSlgUOIx4HKyUjskWcsh5qrsr0u1FIV7Z3OKT+FOFt9LCmssXQUCj7xagIoaVMptmNYKhQE31SaWigj+peSMvHu77rJvktRVrw12VY6N+6YsJrrYYp51hSm6QRwQWdZqEXNdA5fAvNGdeeUdcAgW6hpGk/kif2l3hphWZRRgXIwnjhZSQv0CyZfjERhbDbDya9PLiudzIIrPz5pusv0y4sdyGSzOTJk97mxXUpHkmqKqgZ/sviBHQ== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BY1PR03MB7996.namprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(376014)(23010399003)(56012099006)(11063799006)(261009223027099003)(10067099003)(18002099003)(22082099003)(6133799003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?u9qYSckP1SKjLstBDd7rj8X3mBgdEYVnfDKokHKmgKefPqAnOEMCsZfmWPBK?= =?us-ascii?Q?A+0q6VDCunVAEi7NRnyPxxljNjZzTCanpD4f/WdOyz+wX1dbel5GshxuGb8Z?= =?us-ascii?Q?SbsmLgnPusTFICO2PKsuMwSk9iBayungR6BLWrHGBO4eDGNRyjTv0ZAFm8On?= =?us-ascii?Q?fQZKK3/N9XSgcrlgWezEkOcAStTMs1YUTYewbN9c17a4h/4coJQy6mIyNgj1?= =?us-ascii?Q?5k0XYzgyInYQhN7+6dMpgwpwbHzmGg3xDHcOKcSnealPyH6lV+L77xO/lAaJ?= =?us-ascii?Q?fFx2Mbs8CSn2IVxAF6LiW69j4v0ZOsVERYZUsvntoHSkIYIVEvOhpgSc7euq?= =?us-ascii?Q?/Arjq+Z3pSpJ+3k3GuV/gmSBdHUNQexZXgd/N5Sm3ou5V8KWT6QKmnriQ7OZ?= =?us-ascii?Q?IMOnyKPF/0mUlunqFOQWIjjTcq6oze+9GJFviTbR/fxCAaxp3LfgWEppFfT/?= =?us-ascii?Q?rsojlPKPyfqOf40TkluExn63vll+Op5AJUt+3mWYd83nLY7ddX7iVG4m8jh9?= =?us-ascii?Q?iilx/CIMDqChN7wEmV2m6SJp14Tt+FlvzoMwxKOOormtjcSL5ktOxplHNYDA?= =?us-ascii?Q?mO/8vAdF2Bsk13tO/ORW6QLZtnQH/UVLNqktAxa2gQI7UGP79CccZLzilg69?= =?us-ascii?Q?KGZt00uekL2x0ESYJmL3XHCNyVNy2Hmxk8ZBJfKtcd1mysFr8PJaThYyNioQ?= =?us-ascii?Q?ushZOOeMO1DAgHbM6yd+qX2xHKJIWWd6AT84Qfbm/bgE3FgLzN97rW35XpVw?= =?us-ascii?Q?jczDt4crqOskFQD9G4x6x4G5eenC5x9+OUgIQ2EJJk5kCjcZbb5G4uncZbcA?= =?us-ascii?Q?l/U2+7ARH84FU6tf/ErDxgBf5GU5OM2JXiYYS9K4ERnzFz/UHA9Dy749VXy0?= =?us-ascii?Q?ZkUkYmHvUGihhi14PrcVV10Xf11C7OumViVK0d2MJzWJuUK5LL9Zf4Bp5LYM?= =?us-ascii?Q?EeXN+klVHmithNEn3/KFwASAIKCtjJNz2eEkki2S1AYZMsFRkyANlvoDjOf6?= =?us-ascii?Q?3T7y3gSzZNbtnDKMysaPTlDH5FTTRAP8y6Ml5J5zJVZxOshmv+za8AoJ8wgH?= =?us-ascii?Q?Y+No5NDtLPD20ueLfGBUfZSW+K8JItLtXtTZQESbDd1AUvU11j/F7E+OksOK?= =?us-ascii?Q?xtBCjRTk/dpOCAl5/ufPKNZO49ovek6gblv7YnzHW1Rqd9BMrcM+crgIwv84?= =?us-ascii?Q?GmavgyuIq6V/M15Cfmi79tvqcgVAeyMY+JlzucblWypvfE1ktYNjpmPjOaEd?= =?us-ascii?Q?bP1raOlunOPTWIDrCnAIYTqQE1QnOi/v5WVK1eQI83RrQnkZV9Q36yRS0DMB?= =?us-ascii?Q?0RQ+AyZAtzkW6t9Lg+qyY27xZ0NXzIXBxyUU3Ue6D0Ght1i4gxbeOw2rVErF?= =?us-ascii?Q?65bNeYgEe0+ienioOjh4ddtOcJjY3sRHMJyxOsipZzTuaj2ADRH3qYUYSHDJ?= =?us-ascii?Q?j9BwC9M8ehZT75yuotKGjaYhBE9yscklEsBRK/FogDhnM/O6aO/fk94qTCIi?= =?us-ascii?Q?BB4NcGD2XDtZ/1VmtrCrbOtWp7n4jVv8GXdOPKMVtREwRHRVutDByeJrk3fZ?= =?us-ascii?Q?mOjybuD0qvCzfXiqQecStkHlE47hRLPSB9pzsbg6FXgDvtu5C2wpTtGfxtlT?= =?us-ascii?Q?rxAnw9+VDeE1ZIZ8/1gbt8qJoZgpVuB+AA0c38E8BraM1P6q/Vaew6/zKo92?= =?us-ascii?Q?5MUV0mvxMVAlBSsi57tyHheRSq/IiYVyRmD2kzF6LD31okBgWRVfSXCtB0/v?= =?us-ascii?Q?9YlNfcgBfA=3D=3D?= X-OriginatorOrg: citrix.com X-MS-Exchange-CrossTenant-Network-Message-Id: 063f5804-c64d-43f8-3a5e-08df2ba5058f X-MS-Exchange-CrossTenant-AuthSource: BY1PR03MB7996.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Oct 2026 16:46:27.3521 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 335836de-42ef-43a2-b145-348c2ee9ca5b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: ic3y8ib3x4VjCCYRtMMKca3QGl7YReFkTMCooITUQmrMf9qOpOCo8HelDMaSyVKtpHHEh2t4Td6kUH/vKtp7dg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN4PR03MB989476 X-purgate-ID: tlsNG-720697/1792169192-F0AA52AC-91CB55E0/0/0 X-purgate-type: clean X-purgate-size: 5548 X-ZohoMail-DKIM: pass (identity @citrix.com) X-ZM-MESSAGEID: 1792169210121158500 Content-Type: text/plain; charset="utf-8" If Xen supports XENFEAT_mmu_pt_update_swap, use the new MMU_PT_UPDATE_SWAP instead of native_ptep_get_and_clear(). This avoids the pagetable write trapping for emulation. Signed-off-by: Kevin Lampis --- Changes in v4: - Reword the commit message Changes in v3: - Add spacing to xen_pte_get_and_clear - BUG_ON if hypercall fails - Remove extra blank line - Add documentation for MMU_PT_UPDATE_SWAP Changes in v2: - New patch --- arch/x86/include/asm/paravirt.h | 5 +++++ arch/x86/include/asm/paravirt_types.h | 1 + arch/x86/include/asm/pgtable.h | 3 ++- arch/x86/kernel/paravirt.c | 1 + arch/x86/xen/mmu_pv.c | 17 +++++++++++++++++ include/xen/interface/features.h | 2 ++ include/xen/interface/xen.h | 1 + 7 files changed, 29 insertions(+), 1 deletion(-) diff --git a/arch/x86/include/asm/paravirt.h b/arch/x86/include/asm/paravir= t.h index 0591aa38fd85..0a3a286c46f0 100644 --- a/arch/x86/include/asm/paravirt.h +++ b/arch/x86/include/asm/paravirt.h @@ -373,6 +373,11 @@ static inline void set_pmd(pmd_t *pmdp, pmd_t pmd) PVOP_VCALL2(pv_ops, mmu.set_pmd, pmdp, native_pmd_val(pmd)); } =20 +static inline pte_t pte_get_and_clear(pte_t *ptep) +{ + return (pte_t){PVOP_CALL1(pte_t, mmu.pte_get_and_clear, ptep)}; +} + static inline pmd_t __pmd(pmdval_t val) { return (pmd_t) { PVOP_ALT_CALLEE1(pmdval_t, pv_ops, mmu.make_pmd, val, diff --git a/arch/x86/include/asm/paravirt_types.h b/arch/x86/include/asm/p= aravirt_types.h index b4c4a23e77a1..1bd4c19450b5 100644 --- a/arch/x86/include/asm/paravirt_types.h +++ b/arch/x86/include/asm/paravirt_types.h @@ -135,6 +135,7 @@ struct pv_mmu_ops { /* Pagetable manipulation functions */ void (*set_pte)(pte_t *ptep, pte_t pteval); void (*set_pmd)(pmd_t *pmdp, pmd_t pmdval); + pte_t (*pte_get_and_clear)(pte_t *ptep); =20 pte_t (*ptep_modify_prot_start)(struct vm_area_struct *vma, unsigned long= addr, pte_t *ptep); diff --git a/arch/x86/include/asm/pgtable.h b/arch/x86/include/asm/pgtable.h index ac295ca6c92f..c2a7035b4848 100644 --- a/arch/x86/include/asm/pgtable.h +++ b/arch/x86/include/asm/pgtable.h @@ -58,6 +58,7 @@ extern pmdval_t early_pmd_flags; #include #else /* !CONFIG_PARAVIRT_XXL */ #define set_pte(ptep, pte) native_set_pte(ptep, pte) +#define pte_get_and_clear(ptep) native_ptep_get_and_clear(ptep) =20 #define set_pte_atomic(ptep, pte) \ native_set_pte_atomic(ptep, pte) @@ -1243,7 +1244,7 @@ bool ptep_clear_flush_young(struct vm_area_struct *vm= a, static inline pte_t ptep_get_and_clear(struct mm_struct *mm, unsigned long= addr, pte_t *ptep) { - pte_t pte =3D native_ptep_get_and_clear(ptep); + pte_t pte =3D pte_get_and_clear(ptep); page_table_check_pte_clear(mm, addr, pte); return pte; } diff --git a/arch/x86/kernel/paravirt.c b/arch/x86/kernel/paravirt.c index 00b59d774389..58ecd12b10ee 100644 --- a/arch/x86/kernel/paravirt.c +++ b/arch/x86/kernel/paravirt.c @@ -178,6 +178,7 @@ struct paravirt_patch_template pv_ops =3D { =20 .mmu.set_pte =3D native_set_pte, .mmu.set_pmd =3D native_set_pmd, + .mmu.pte_get_and_clear =3D native_ptep_get_and_clear, =20 .mmu.ptep_modify_prot_start =3D __ptep_modify_prot_start, .mmu.ptep_modify_prot_commit =3D __ptep_modify_prot_commit, diff --git a/arch/x86/xen/mmu_pv.c b/arch/x86/xen/mmu_pv.c index 820af6f0aa57..a1e79672a408 100644 --- a/arch/x86/xen/mmu_pv.c +++ b/arch/x86/xen/mmu_pv.c @@ -359,6 +359,18 @@ static void xen_set_pte(pte_t *ptep, pte_t pteval) __xen_set_pte(ptep, pteval); } =20 +static pte_t xen_pte_get_and_clear(pte_t *ptep) +{ + struct mmu_update u =3D { + .ptr =3D virt_to_machine(ptep).maddr | MMU_PT_UPDATE_SWAP, + .val =3D pte_val_ma(native_make_pte(0)) + }; + + BUG_ON(HYPERVISOR_mmu_update(&u, 1, NULL, DOMID_SELF) !=3D 0); + + return native_make_pte(u.val); +} + static pte_t xen_ptep_modify_prot_start(struct vm_area_struct *vma, unsigned long addr, pte_t *ptep) { @@ -2165,6 +2177,11 @@ static void __init xen_post_allocator_init(void) pv_ops.mmu.set_pud =3D xen_set_pud; pv_ops.mmu.set_p4d =3D xen_set_p4d; =20 + if (xen_feature(XENFEAT_mmu_pt_update_swap)) + pv_ops.mmu.pte_get_and_clear =3D xen_pte_get_and_clear; + else + pv_ops.mmu.pte_get_and_clear =3D native_ptep_get_and_clear; + /* This will work as long as patching hasn't happened yet (which it hasn't) */ pv_ops.mmu.alloc_pte =3D xen_alloc_pte; diff --git a/include/xen/interface/features.h b/include/xen/interface/featu= res.h index 53f760378e39..b346d58c0a41 100644 --- a/include/xen/interface/features.h +++ b/include/xen/interface/features.h @@ -97,6 +97,8 @@ #define XENFEAT_not_direct_mapped 16 #define XENFEAT_direct_mapped 17 =20 +#define XENFEAT_mmu_pt_update_swap 21 + #define XENFEAT_NR_SUBMAPS 1 =20 #endif /* __XEN_PUBLIC_FEATURES_H__ */ diff --git a/include/xen/interface/xen.h b/include/xen/interface/xen.h index 40c9793e9880..64c120d8a100 100644 --- a/include/xen/interface/xen.h +++ b/include/xen/interface/xen.h @@ -252,6 +252,7 @@ #define MMU_MACHPHYS_UPDATE 1 /* ptr =3D MA of frame to modify entr= y for */ #define MMU_PT_UPDATE_PRESERVE_AD 2 /* atomically: *ptr =3D val | (*ptr&(= A|D)) */ #define MMU_PT_UPDATE_NO_TRANSLATE 3 /* checked '*ptr =3D val'. ptr is MA.= */ +#define MMU_PT_UPDATE_SWAP 4 /* Update and return the old value. */ =20 /* * MMU EXTENDED OPERATIONS --=20 2.52.0