From mboxrd@z Thu Jan 1 00:00:00 1970 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 kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id AFB2BC71155 for ; Mon, 16 Jun 2025 13:43:28 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 519D36B00BE; Mon, 16 Jun 2025 09:43:28 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 4CAAB6B00BF; Mon, 16 Jun 2025 09:43:28 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 344A66B00C0; Mon, 16 Jun 2025 09:43:28 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id 1D5F66B00BE for ; Mon, 16 Jun 2025 09:43:28 -0400 (EDT) Received: from smtpin22.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id DA284803FE for ; Mon, 16 Jun 2025 13:43:27 +0000 (UTC) X-FDA: 83561380854.22.3CDFB1C Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.14]) by imf16.hostedemail.com (Postfix) with ESMTP id C280B18000C for ; Mon, 16 Jun 2025 13:43:23 +0000 (UTC) Authentication-Results: imf16.hostedemail.com; dkim=pass header.d=intel.com header.s=Intel header.b=M5B7ON4B; dmarc=pass (policy=none) header.from=intel.com; arc=reject ("signature check failed: fail, {[1] = sig:microsoft.com:reject}"); spf=pass (imf16.hostedemail.com: domain of ira.weiny@intel.com designates 192.198.163.14 as permitted sender) smtp.mailfrom=ira.weiny@intel.com ARC-Seal: i=2; s=arc-20220608; d=hostedemail.com; t=1750081404; a=rsa-sha256; cv=fail; b=Psluzs4buvdVx2AMF+eceTG/gNXusVsgKS4wzGjk7P+DLGajQUJK3pds22/VIbZeueGZo1 j/beysmbxlleZyGvRxF/ZUei6j0IE8L3adOkTDcXqLSQuH+0A82T4RjCf5Wb6T29nNT0Qr NdfqE4doy5mv37b3Pd1PsmlHwUfejHo= ARC-Authentication-Results: i=2; imf16.hostedemail.com; dkim=pass header.d=intel.com header.s=Intel header.b=M5B7ON4B; dmarc=pass (policy=none) header.from=intel.com; arc=reject ("signature check failed: fail, {[1] = sig:microsoft.com:reject}"); spf=pass (imf16.hostedemail.com: domain of ira.weiny@intel.com designates 192.198.163.14 as permitted sender) smtp.mailfrom=ira.weiny@intel.com ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1750081404; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=zcFljD8rP7OtsuANFsBQ0C3gYtGRYsATyTij7PAVa/w=; b=RX2EFLKGF2AgRT5xXNRl/R997oRJqXNtoRwSNrIQpXcSweGMC+bGsJQjiDfLnNiRKBBALo 2l8Aan6FRg6Xzkd9flCQ8Buv8v0Y5AipVIKPOmUfXNwblqhyw6nrCzGKdjS3z766enmsYU N9PwKXVqH33FA+GrMMOMXg6lQHTucoI= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1750081403; x=1781617403; h=date:from:to:cc:subject:message-id:references: in-reply-to:mime-version; bh=FiW9n2KszQAzEEwW61SbvorwN3dnL3g5QpVJjnGFjSM=; b=M5B7ON4BGmJ6xngMFqnCcPIXksGCUYCNIi701boioASBBUZXGEIHgJ4D S2IaedA/hk60R2F4jAEgMCsvosmM/UdKMutbLqi3eH9el9fI6fL2pgk8P 05BQMHwxv1sJfjn5m5cue/WypPqVMJr9ZGXYFef6nW9Gq9+lAkXXqvX// nw/aufur5V6uz7Mib5QJ4gLbEK2EFSqF6/yRdjNC+VKYXSLo+mtnHPB1l dlQbJOqXquVFpsA6J9YRN7izvclmS8eoE68BMuM0pWqwjYAvQ6tgGICeU bX94EjzGM6s77RbbAcOZjtH6YZbQbKCHRyFA8vIA1Bv328CRkUIn2s2qW w==; X-CSE-ConnectionGUID: 82NhFCk1QriAWSvO1zC6TA== X-CSE-MsgGUID: ULQXis4ZR+qHL3g5s52kqQ== X-IronPort-AV: E=McAfee;i="6800,10657,11465"; a="52315974" X-IronPort-AV: E=Sophos;i="6.16,241,1744095600"; d="scan'208";a="52315974" Received: from fmviesa002.fm.intel.com ([10.60.135.142]) by fmvoesa108.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 16 Jun 2025 06:43:21 -0700 X-CSE-ConnectionGUID: S/sTlcr9SDiE2VZPRgkzVA== X-CSE-MsgGUID: vVV97YBBRVO1eaf29H9SEw== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.16,241,1744095600"; d="scan'208";a="171697793" Received: from orsmsx901.amr.corp.intel.com ([10.22.229.23]) by fmviesa002.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 16 Jun 2025 06:43:20 -0700 Received: from ORSMSX903.amr.corp.intel.com (10.22.229.25) by ORSMSX901.amr.corp.intel.com (10.22.229.23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.25; Mon, 16 Jun 2025 06:43:18 -0700 Received: from ORSEDG902.ED.cps.intel.com (10.7.248.12) by ORSMSX903.amr.corp.intel.com (10.22.229.25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.25 via Frontend Transport; Mon, 16 Jun 2025 06:43:18 -0700 Received: from NAM10-DM6-obe.outbound.protection.outlook.com (40.107.93.70) by edgegateway.intel.com (134.134.137.112) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.25; Mon, 16 Jun 2025 06:43:17 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=jB64cXjczRvhNjurfcJdyTfSG5mqTKfkAtm9kVL+DG8JoaqdjEkzOGC6anT+1T/tbpPBbmDR9BAl3LkJJ54XWhQcf2gSWvEOM+2dvM2W/1G54P+dWzdndKZMVUeLRmoblv6loiusoEwszPP5iyiqrMd0oiHAoVaFlkmnWmzKfAwRwlfcpsF0gYdpDtWx2/UEJI1RZGCTjdBAMgNxZSdHiQgWrafisDasWz+L30KFpqx2dKgEpT5Y4boCghNMEyr7e+RRAX3JUWBu9taiqumQ0qMwQ2n3HdifS3895jNN6V2gnPyR+2AHWrB7rhVtxVRnN7l5gFTJtn3fwJ4Ew6WylQ== 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=zcFljD8rP7OtsuANFsBQ0C3gYtGRYsATyTij7PAVa/w=; b=p4JqOOFx1hfdTupGScG0CriPCA8FyuSmLOUyQBDrhZbWqwl/MiA3pNpG3Hy96zgCFms2/NrYkmLZrT+RauLnG7tzTUcx3qsMtdhOTnFh24YRInlPz/QMj4dcSYvCVZPUKkTJpwDyziRWokXBqtYYYI5BFZGj8fPqou69/o82d9gAOIi6uUHKYh/1n4DeUyYXA52iWp6FKIrUzQVK1Kfboig4EvQVVKlklz/V2a2Keyo1CwSszgM1DUgLKcvCk1A7PvuQDaPRo/3OVrTxEtUeKZK2SdyWFhnzdKcvYVpQxBXFL7oFImBdRdrhO6D5OlJsHBCmM4fMXq4OJMWlEBOXoA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none Received: from PH3PPF9E162731D.namprd11.prod.outlook.com (2603:10b6:518:1::d3c) by MN2PR11MB4550.namprd11.prod.outlook.com (2603:10b6:208:267::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8835.25; Mon, 16 Jun 2025 13:43:01 +0000 Received: from PH3PPF9E162731D.namprd11.prod.outlook.com ([fe80::19ef:ed1c:d30:468f]) by PH3PPF9E162731D.namprd11.prod.outlook.com ([fe80::19ef:ed1c:d30:468f%4]) with mapi id 15.20.8835.018; Mon, 16 Jun 2025 13:43:00 +0000 Date: Mon, 16 Jun 2025 08:44:05 -0500 From: Ira Weiny To: Sean Christopherson , Fuad Tabba CC: , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , Subject: Re: [PATCH v12 08/18] KVM: guest_memfd: Allow host to map guest_memfd pages Message-ID: <68501fa5dce32_2376af294d1@iweiny-mobl.notmuch> References: <20250611133330.1514028-1-tabba@google.com> <20250611133330.1514028-9-tabba@google.com> Content-Type: text/plain; charset="us-ascii" Content-Disposition: inline In-Reply-To: X-ClientProxiedBy: MW4PR04CA0075.namprd04.prod.outlook.com (2603:10b6:303:6b::20) To PH3PPF9E162731D.namprd11.prod.outlook.com (2603:10b6:518:1::d3c) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PH3PPF9E162731D:EE_|MN2PR11MB4550:EE_ X-MS-Office365-Filtering-Correlation-Id: ee6786be-d227-4087-9430-08ddacdbb5d6 X-LD-Processed: 46c98d88-e344-4ed4-8496-4ed7712e255d,ExtAddr X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|1800799024|366016|376014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?hdARHb780v1wlHgoVAT+p4aMpBwC03mCAbJSscNvhXAuKyIM2m7v0+RgIJgd?= =?us-ascii?Q?4NMGr6OEHpyqggipFRKF2AorIena4RHQzVJwbNejh10LjCGhkdXQ0vbXIkiv?= =?us-ascii?Q?iR4IEar5RlF8MukF821iaqQZQRjlswiW61ExfIETqciXP+24XWl3uqeAyCjV?= =?us-ascii?Q?GtK0qg69ewg3aAgS0AMs8S3WRfk2Ehf1bnJVWc9aFUhx1HCy3ThW3V1gRG6P?= =?us-ascii?Q?Tur0LVLVv39Jv7P8q0RfMjttSd4ISAhDaZ/tD2rbvR4wHQ13mieDvHlSL4hD?= =?us-ascii?Q?xlPaTOahwFV1rhUURoMaPmBMkHuGWH8HDWCieeBUneS53s2H1cg4NCICRIMd?= =?us-ascii?Q?PweYQQYK8F7Lr42uWHWV3AFmLAJCpCXSBY2KxlCiAt5DhC35oAJpf+DAIBao?= =?us-ascii?Q?emusFa/apUxGCypKqif96V8x26lbguLFyGZZ4TSg1ZmU1AO4RjOgqqpB3IKq?= =?us-ascii?Q?pActYdCCZpU8oqAsVaaX6sEVWx2EucFg2N5yeWGplNXHszgjQKgBqab8OpN2?= =?us-ascii?Q?NwB/zGL/S8tMBwNwvZlwNQ9VCx1wTZch8D/yZFZO3+052l7u26UWbHELY6j7?= =?us-ascii?Q?JiWx2SzA3r1H07nY99Sl7vzmV6zNqhsDs9p2dLWRCWoVs/i6/mALljiXkEda?= =?us-ascii?Q?fNPsYBRmFDQy1EYIlAKoebSv2LeS3YgUMHB1p1WaZoTvN/LOyXrpUh1i3ojO?= =?us-ascii?Q?Dtf1nwSuBw2czBiNNXHXn2CjUzGtuYmorAGVKUaq6dBAhjrs6AiNiys4qTbi?= =?us-ascii?Q?1kHVO9xnvbp8uV10lLR7brYnQjnywlOxp15iMiAAh6i9K+YtvaTktXPA7P8x?= =?us-ascii?Q?dgK/nsRr7cKNVkILopVVkcPSoI31/okqQ7Y4Tg1keYPi77bdDEPb6EA3Mgfy?= =?us-ascii?Q?GzXYtk1fkfbatzzwzm0dQKe2Hq6dVAje/DZRYLT3icsb6hkIFNb6s1VszYZI?= =?us-ascii?Q?gns3uDCMyk8mgaUNby6ZdEZjXRnYXnbLR5pkqVa82Hv6vWu/amMQ7jdFbfqn?= =?us-ascii?Q?l/CGtto+9wr/Q8Yvu0AMAOUdLT5DqaDuMYJ3fQ8EoHBG+XRKZIcxa50ppk2G?= =?us-ascii?Q?3KDi76uw54v6OomgjEgFB/3YGWgi3AGxDF0xy63HUKwT4W169u4xXskvAt8S?= =?us-ascii?Q?Plg3zZPoXGVF/vB4MirXmHDRJaH/sktyrCt1OayVtrIXSzh9cXOTbFkLW5Sy?= =?us-ascii?Q?YMinwA1r+PU7vS+W2pMuBv3tfgyWOc4/wdoHAfO3h3+6nT1Ul46DUH5zhlJ6?= =?us-ascii?Q?if/v2fxDaqJLjqxpb/fLqSPMdS5+2ApY+AnHRt56UnWJn7JBULxvA6lgnQ+6?= =?us-ascii?Q?fHjazTC172sAL7sCjR/3SFEb9EgsZJ5SQnZYnFxx0xedl/y+P5hYBxy44uRp?= =?us-ascii?Q?qawHK7l/UNlt7ODG75CfmzdhMMUaBqisL3tiD1KU6TubLGApwkHozWzZFyv1?= =?us-ascii?Q?rSbGR9xjxi4=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PH3PPF9E162731D.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(7416014)(1800799024)(366016)(376014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?ho6P0A6t3dudpxjAvsbTyyvAFIRyEQChXtLDoDoihQvsurdyZWUtlEuTNK8G?= =?us-ascii?Q?vOyAsEJUiTGsNWbRug4RUQL5KyW2WnXRXqWlcbidD1q7QBVb7DFbBEa1CUrJ?= =?us-ascii?Q?JA8/IfB05HDhSar2OGo2CmpSvNbCM4ctIM84jbs7P7Dh3aGJ4IEgi0AiSHxq?= =?us-ascii?Q?DXWLGY+9RAlLaNn+D3GgICXssqE8wB0asMnIl2aAqS+EIufGBsOkGTy4g9ch?= =?us-ascii?Q?5QHKDBOAzEdk+UOHqC7y+aK1MDvxXzxHU1OmUqpmcXUtODXiQw1xXNVViFan?= =?us-ascii?Q?qp9QYpd91aGOFuPatYkdqUTLpFva/LW4wih3TJow6Mo9NsZKCJn2lqkkYYOR?= =?us-ascii?Q?QmKQbz04/JhYw7Yk0AfoKmrQJxhXcxOfnK9LRpRN1r5eQVRkBHIkn7/Kw/MA?= =?us-ascii?Q?ZJHyQE7dTCHgR0ZHfDP2HKUQC//G4KEbLFeaDIEpXasUQez30BpAWCja4T8P?= =?us-ascii?Q?fdmLmktJMhKIJeO4pXwul/0V2HuxYwv9HHaO5ahOB+fbir1vXKv5ABt/L+GP?= =?us-ascii?Q?RQyj7J+7argOb/GKfENooK/kOCHCRLOridhdEEgIki5r50HMAoQkvimEmdTA?= =?us-ascii?Q?7eGi3gwDFU3V7DMrUGxtu0TlHcWtaTjfp/dDOCQi7JDO9vhhb+CcYsaJcsln?= =?us-ascii?Q?J7cgYcnMHUgDtE8V6n6BUgVcldq7Nu8EjA93494Vsl/N2tk7eE9VtnTnKB4e?= =?us-ascii?Q?Ar7EOuUmJfnUHfq8UDqBeMswgSMjVoDcYf+ww20Z6PU9QXym1HdTKQF3j97L?= =?us-ascii?Q?uMIWdNAdWZCRA/7zIN5+E08IXAEHAMFX9rG12dUbM9sG9NcFwNJHdL66DvW4?= =?us-ascii?Q?mtfsQnLloDXErK96tRaaL/UoSbd8sdy0YpnCILQeqLBbWdUxPfSVJb4yUyNe?= =?us-ascii?Q?Lbr4RoQxeZsSpn5JwP05qFmWWaaNbJNAof2lUqmlapww+RguZ/oD/56NKIRG?= =?us-ascii?Q?P34WG4R+RpbhB1/A5n7G2cQa1FRwKENbmRL5wD4SaWMvDM3z81nMaaaq7jCj?= =?us-ascii?Q?nvic6FvcHl2VA/7iK8krBea80xHmWDLTJ2dGA829pOOAcdDIhNt05tgxZGg/?= =?us-ascii?Q?OmHXml+UWL8Kbl+StEMXYfm2Sz2cN6IhdOq9HORHlAG71WJrc3lOY23RSQut?= =?us-ascii?Q?KgdhZIFSCnkxUgCcujQN/h+CLXXw9LfUVHcxX9sXZLGu0GqJ7pBVQHeIQF+E?= =?us-ascii?Q?4w8ahXAD9Q0Sq/Qht/HKKB7e8yli5x+HyDanc9z5dR47I3Np05WiNpnBkdIF?= =?us-ascii?Q?1i27/Scgj+DDCqllVzo/GFFGjZNJlUMcpoBXC9Gj5pKywStsdqIKGvUfCyAC?= =?us-ascii?Q?CEDw1O6oxjfTSOJBp8o0cEXDhn12Ukhf4yympz1gZxNe53xLUSyTG0m50ESC?= =?us-ascii?Q?4oiFrNjUBgylGKIGDDouZHVKauMw6UxLP+xuYWyVqlS5ZcpArjGkwknF2MzC?= =?us-ascii?Q?8HqU3sHIfdm2HPYOrm64ma0M68bMLCvj2ugleB6LvYovk9GxvHUwy0ODclfU?= =?us-ascii?Q?+udj8zIgqj40FUyIU1CdMo27mCXHoWAyHYk8XroMlJ33Y/A0D89yhVpb1tQr?= =?us-ascii?Q?C8o4yb8kOKqSXVr4Nni/S9iDjR7Gx1b0KfeZWCgM?= X-MS-Exchange-CrossTenant-Network-Message-Id: ee6786be-d227-4087-9430-08ddacdbb5d6 X-MS-Exchange-CrossTenant-AuthSource: PH3PPF9E162731D.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Jun 2025 13:43:00.7923 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: u1WKVykR11RyRD+RFqIwdTfm9uqRQyug1Dy0NqcwJho3jeQsdcG5RehqbD0g+5RgX0+Lju1zkdOjtt7DEVxu/Q== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN2PR11MB4550 X-OriginatorOrg: intel.com X-Rspamd-Server: rspam01 X-Stat-Signature: ronx5jt9co5onjgn6y8yymwh75qfmryz X-Rspamd-Queue-Id: C280B18000C X-Rspam-User: X-HE-Tag: 1750081403-738982 X-HE-Meta: U2FsdGVkX18Pqk/fp6yP3sfchmA1IMzDoTB4JFmxpV1tL1ptLYA0TxXkeuBH4MzRGiPdjOYWgIQzGLsuS16fY/+Ms2nWYJ2nlqY4YpWNZIbVyG8HV3tx1wbjJHNxE9P/mp812nSDmbFC4hq5iHc56C+azuZDGhycx6YtEFdQqX23GrgaN0zu2xiIK1ii/bgumANZKk2fmYlpDt5ScKSFZKwlEJCYYO2zslnlNtYdAJMm6MX6uVMW5teF26ZpvYy4EjGnvuZAj6dpHEpESMMY5hppq8yxQd86yQurA8jDxo8i8tB7RkL9aBUwNPFDNrSn9TNotoB++9/2WDO1NiBM7V38d1btpzcEk3hHf6QE/rZee8NoRAeXPu1qpbTiaZ9AvdCb8zokT5e6AVWWrVCVYTo8jh0Rr1GSEb88Rbu5xdzxXozAaJ1OfzII0pBcCKj72SXrk+VNeyQbozoaqSTm1hosFWYOto3ELW/HtnB8gVurylbkD5ISmak6EVnZfAugTRxF6ayMPi76AJgHMZxfXQkyiXyKm9bNF5zvLqi4nUvqQrsbNGcUeXS88zh4lRq/ObxzOSi7xybQc3MuxBxgoKd4Rv1pn+oZ/W0uy0EHWB3QFV7pul7boI9YNXD/MDT4CQpl+EbNK4Slqh4b2K3qIt3++y62XyftLxUrr2F6Zygk4kh/XuAO1gqfkxiaaOxbx1oJPONaZngii0hrJi3IdcngD8jkBLz9rzlBqmb00X1UWOpMLO6oadglW+L6Unmw320KDYkB8A7Y1Ya/FOD/PlJ3pBu5SvYu5/XoTFapciQqXdp0FSQ9BOUbX9AZ+Qm/FXe4KaKPQMKkruUmqzzqLiUMm7kyZ10CeX1ePC6XAD0QHUPeae4EGehs2n5GOJIkDdnw9m0P3KZel1IMpQ6fpINeypz0zOtgSxqVtfMAoLlbqBE+kOX05AvSGmXzkWe1swNHS6613VJRu7F6Ve9 ADjMYMwf iICDkXehVeBQ+UE63doQXleVe7H6cK/KsJL35nguYm+Ym2m9ludg0ACiQ8lDiP4SVUlsrinpJdjLywBl48rDnZCHy6VaW4xRdUourdNge7bEJSllHW9KEobML4JQxD77xYvLhp+/sznzPOm/fC617lFmUXHmB4RxVniu3bFoviWsKR5ZcyzI7DBygl9E5Mr/8uSY2QQKL4KR28vjj4n+eQiV6B8IiRUIvZrSswwkH9DJA1xthdb0weXyq19VPBiCUiXBVSmkwAj/3grh3MT+L6AdQvo6b/QsYiqD9TL2QD29ihAv6VUoku5fVqFpuSO6PQBgWTAtYO7o+AjqXirNJrupMzbka0idcVEj+nFER8DdajwdFzphYsvri+ykWxUQNbDxKeehDjhdvj8gq5lkHdm8UzJxrXGhNQVQMhYMEbU12BPGOMZRb9WEjPU/JxQNWgP9NZWGbNVLmc9R4SI/mhy0GGNIs9ITYPMU/3FJ5NQprHlp3HnG7ix2gmR6fEyZ4Pks5+Kg8T1V9v9G1Dw1Xe2YcXjlV0sLjg5DqciQqlY/+c9PZlyl2Qzp4OadOwtT/Fei0K5ziwZHkqUaIZCom1qTDNGZzuC6P7mFov3rcU1q0YqhNSjUYRI5hBq7x2fCPHJIyxcDHp+mKlII= X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: Sean Christopherson wrote: > On Wed, Jun 11, 2025, Fuad Tabba wrote: > > This patch enables support for shared memory in guest_memfd, including > > Please don't lead with with "This patch", simply state what changes are being > made as a command. > > > mapping that memory from host userspace. > > > This functionality is gated by the KVM_GMEM_SHARED_MEM Kconfig option, > > and enabled for a given instance by the GUEST_MEMFD_FLAG_SUPPORT_SHARED > > flag at creation time. > > Why? I can see that from the patch. > > This changelog is way, way, waaay too light on details. Sorry for jumping in at > the 11th hour, but we've spent what, 2 years working on this? > > > Reviewed-by: Gavin Shan > > Acked-by: David Hildenbrand > > Co-developed-by: Ackerley Tng > > Signed-off-by: Ackerley Tng > > Signed-off-by: Fuad Tabba > > --- > > diff --git a/include/uapi/linux/kvm.h b/include/uapi/linux/kvm.h > > index d00b85cb168c..cb19150fd595 100644 > > --- a/include/uapi/linux/kvm.h > > +++ b/include/uapi/linux/kvm.h > > @@ -1570,6 +1570,7 @@ struct kvm_memory_attributes { > > #define KVM_MEMORY_ATTRIBUTE_PRIVATE (1ULL << 3) > > > > #define KVM_CREATE_GUEST_MEMFD _IOWR(KVMIO, 0xd4, struct kvm_create_guest_memfd) > > +#define GUEST_MEMFD_FLAG_SUPPORT_SHARED (1ULL << 0) > > I find the SUPPORT_SHARED terminology to be super confusing. I had to dig quite > deep to undesrtand that "support shared" actually mean "userspace explicitly > enable sharing on _this_ guest_memfd instance". E.g. I was surprised to see > > IMO, GUEST_MEMFD_FLAG_SHAREABLE would be more appropriate. But even that is > weird to me. For non-CoCo VMs, there is no concept of shared vs. private. What's > novel and notable is that the memory is _mappable_. Yeah, yeah, pKVM's use case > is to share memory, but that's a _use case_, not the property of guest_memfd that > is being controlled by userspace. > > And kvm_gmem_memslot_supports_shared() is even worse. It's simply that the > memslot is bound to a mappable guest_memfd instance, it's that the guest_memfd > instance is the _only_ entry point to the memslot. > > So my vote would be "GUEST_MEMFD_FLAG_MAPPABLE", and then something like If we are going to change this; FLAG_MAPPABLE is not clear to me either. The guest can map private memory, right? I see your point about shared being overloaded with file shared but it would not be the first time a term is overloaded. kvm_slot_has_gmem() does makes a lot of sense. If it is going to change; how about GUEST_MEMFD_FLAG_USER_MAPPABLE? Ira > KVM_MEMSLOT_GUEST_MEMFD_ONLY. That will make code like this: > > if (kvm_slot_has_gmem(slot) && > (kvm_gmem_memslot_supports_shared(slot) || > kvm_get_memory_attributes(kvm, gfn) & KVM_MEMORY_ATTRIBUTE_PRIVATE)) { > return kvm_gmem_max_mapping_level(slot, gfn, max_level); > } > > much more intutive: > > if (kvm_is_memslot_gmem_only(slot) || > kvm_get_memory_attributes(kvm, gfn) & KVM_MEMORY_ATTRIBUTE_PRIVATE)) > return kvm_gmem_max_mapping_level(slot, gfn, max_level); > > And then have kvm_gmem_mapping_order() do: > > WARN_ON_ONCE(!kvm_slot_has_gmem(slot)); > return 0; > > > struct kvm_create_guest_memfd { > > __u64 size; > > diff --git a/virt/kvm/Kconfig b/virt/kvm/Kconfig > > index 559c93ad90be..e90884f74404 100644 > > --- a/virt/kvm/Kconfig > > +++ b/virt/kvm/Kconfig > > @@ -128,3 +128,7 @@ config HAVE_KVM_ARCH_GMEM_PREPARE > > config HAVE_KVM_ARCH_GMEM_INVALIDATE > > bool > > depends on KVM_GMEM > > + > > +config KVM_GMEM_SHARED_MEM > > + select KVM_GMEM > > + bool > > diff --git a/virt/kvm/guest_memfd.c b/virt/kvm/guest_memfd.c > > index 6db515833f61..06616b6b493b 100644 > > --- a/virt/kvm/guest_memfd.c > > +++ b/virt/kvm/guest_memfd.c > > @@ -312,7 +312,77 @@ static pgoff_t kvm_gmem_get_index(struct kvm_memory_slot *slot, gfn_t gfn) > > return gfn - slot->base_gfn + slot->gmem.pgoff; > > } > > > > +static bool kvm_gmem_supports_shared(struct inode *inode) > > +{ > > + const u64 flags = (u64)inode->i_private; > > + > > + if (!IS_ENABLED(CONFIG_KVM_GMEM_SHARED_MEM)) > > + return false; > > + > > + return flags & GUEST_MEMFD_FLAG_SUPPORT_SHARED; > > +} > > + > > +static vm_fault_t kvm_gmem_fault_shared(struct vm_fault *vmf) > > And to my point about "shared", this is also very confusing, because there are > zero checks in here about shared vs. private. > > > +{ > > + struct inode *inode = file_inode(vmf->vma->vm_file); > > + struct folio *folio; > > + vm_fault_t ret = VM_FAULT_LOCKED; > > + > > + if (((loff_t)vmf->pgoff << PAGE_SHIFT) >= i_size_read(inode)) > > + return VM_FAULT_SIGBUS; > > + > > + folio = kvm_gmem_get_folio(inode, vmf->pgoff); > > + if (IS_ERR(folio)) { > > + int err = PTR_ERR(folio); > > + > > + if (err == -EAGAIN) > > + return VM_FAULT_RETRY; > > + > > + return vmf_error(err); > > + } > > + > > + if (WARN_ON_ONCE(folio_test_large(folio))) { > > + ret = VM_FAULT_SIGBUS; > > + goto out_folio; > > + } > > + > > + if (!folio_test_uptodate(folio)) { > > + clear_highpage(folio_page(folio, 0)); > > + kvm_gmem_mark_prepared(folio); > > + } > > + > > + vmf->page = folio_file_page(folio, vmf->pgoff); > > + > > +out_folio: > > + if (ret != VM_FAULT_LOCKED) { > > + folio_unlock(folio); > > + folio_put(folio); > > + } > > + > > + return ret; > > +} > > + > > +static const struct vm_operations_struct kvm_gmem_vm_ops = { > > + .fault = kvm_gmem_fault_shared, > > +}; > > + > > +static int kvm_gmem_mmap(struct file *file, struct vm_area_struct *vma) > > +{ > > + if (!kvm_gmem_supports_shared(file_inode(file))) > > + return -ENODEV; > > + > > + if ((vma->vm_flags & (VM_SHARED | VM_MAYSHARE)) != > > + (VM_SHARED | VM_MAYSHARE)) { > > And the SHARED terminology gets really confusing here, due to colliding with the > existing notion of SHARED file mappings. > > > + return -EINVAL; > > + } > > + > > + vma->vm_ops = &kvm_gmem_vm_ops; > > + > > + return 0; > > +} > > + > > static struct file_operations kvm_gmem_fops = { > > + .mmap = kvm_gmem_mmap, > > .open = generic_file_open, > > .release = kvm_gmem_release, > > .fallocate = kvm_gmem_fallocate, > > @@ -463,6 +533,9 @@ int kvm_gmem_create(struct kvm *kvm, struct kvm_create_guest_memfd *args) > > u64 flags = args->flags; > > u64 valid_flags = 0; > > > > + if (kvm_arch_supports_gmem_shared_mem(kvm)) > > + valid_flags |= GUEST_MEMFD_FLAG_SUPPORT_SHARED; > > + > > if (flags & ~valid_flags) > > return -EINVAL; > > > > -- > > 2.50.0.rc0.642.g800a2b2222-goog > >