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 DD4C2C36014 for ; Mon, 31 Mar 2025 21:45:41 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 3B505280002; Mon, 31 Mar 2025 17:45:40 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 3646E280001; Mon, 31 Mar 2025 17:45:40 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 1DEA0280002; Mon, 31 Mar 2025 17:45:40 -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 01504280001 for ; Mon, 31 Mar 2025 17:45:39 -0400 (EDT) Received: from smtpin29.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id 66C82803C2 for ; Mon, 31 Mar 2025 21:45:40 +0000 (UTC) X-FDA: 83283178440.29.45F6EE7 Received: from CO1PR03CU002.outbound.protection.outlook.com (mail-westus2azolkn19010010.outbound.protection.outlook.com [52.103.10.10]) by imf15.hostedemail.com (Postfix) with ESMTP id CCFB3A0003 for ; Mon, 31 Mar 2025 21:45:37 +0000 (UTC) Authentication-Results: imf15.hostedemail.com; dkim=pass header.d=outlook.com header.s=selector1 header.b=uB6MLa4n; arc=pass ("microsoft.com:s=arcselector10001:i=1"); spf=pass (imf15.hostedemail.com: domain of mhklinux@outlook.com designates 52.103.10.10 as permitted sender) smtp.mailfrom=mhklinux@outlook.com; dmarc=pass (policy=none) header.from=outlook.com ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1743457537; 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:content-transfer-encoding:in-reply-to: references:dkim-signature; bh=dGiuRasQG3c+xhI8mssM5UrFVkfR7c6OSVr3bZfuId4=; b=O9RAX4rY/k3friCi2cvvcaDCrzVoMjoPEH5+CJvZOpVUwMlTZ0dk2eZqs2CHqMK73S/ExO Xv+42+5gpcxGb6WTP2oOoj2CV8pg/lEU1B5GlSLXv82ufpcDmqEW83p8QtlPBCytLQajdh I+WZbNZ2DkwQc/D2UR13oCBHKDgfX1k= ARC-Seal: i=2; s=arc-20220608; d=hostedemail.com; t=1743457537; a=rsa-sha256; cv=pass; b=wwutBWApzaEPjSqNXPqi277gOlX5UR/88jllEm+TNYU9EwqTfYyS0XnIMj8xLbM/L21lyj EDFFq9CJaL3zaKQUUv1cAFd59JbGqy46CaiA5ylDRzLEZmgu+u9ofdNgXVR2ASWk/XtjUe PsYWQgpdELYvKQuatHFJtiGownUTdTY= ARC-Authentication-Results: i=2; imf15.hostedemail.com; dkim=pass header.d=outlook.com header.s=selector1 header.b=uB6MLa4n; arc=pass ("microsoft.com:s=arcselector10001:i=1"); spf=pass (imf15.hostedemail.com: domain of mhklinux@outlook.com designates 52.103.10.10 as permitted sender) smtp.mailfrom=mhklinux@outlook.com; dmarc=pass (policy=none) header.from=outlook.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=kkxt4CDmeytfsqPRbgTH2v0pI6lSnKsK4oCzer2r6oWRetOz4scxkmP+GLyr49dgkUhZ8kpNFRH5olRwOcdN3BNwX2LjkPadxDfarY59672Ajx9JsmxKAqHKclut0TrUiAHor1oTT9NEBo3qrSIv398NjO0U1eK/eoOj7s2agWk5rcSejWRK8Novm+at9/c+30LVg62GeJWF45jtdnioDe9W7qRBcMXXBdNadKIEW7wV474jRUerRRjal0bNDE5KjR32tqPT/39qen5JRmyGwW+TcL9ZtkWJV7UzP203wIaKTzKkTBUGcvJKk4jq2wXEZz55FLGGg8dPO6uctayB7A== 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=dGiuRasQG3c+xhI8mssM5UrFVkfR7c6OSVr3bZfuId4=; b=o7VPLPOsFTJHczo+JIG+Nrj3wXPbrwH3KZtLdZTwVNdX8el+9tBRwc0HTE6to0V2Gu0ZFfpk4PLHFnYdLYNqvyXzLrohudER7W/Om1hBh4pP+p9KE+r5PpCQLkNHCStK/Hken9bVHPYaJtKhS6twxaXDUANpRLTEwtCKrPbDmylt1PmJspmV+JOal9ZuvUjZ5tZ9J8nEWwA4JrFrfBZkJsYbTSYMw33iUmYTCpK/1fUolrztEOmftyFW98sTWgciPkbbpdeyNjiteJ34UoohBpdfvhczqY2DCsOfdm8FafI/t37EUB1SuC1AiexwJzNYpLjdXL0Tc288VB9NGQd9Dw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=outlook.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=dGiuRasQG3c+xhI8mssM5UrFVkfR7c6OSVr3bZfuId4=; b=uB6MLa4na+EgISWp2rajWryoNPl3eVTEyiiCd7ffUlf8/3j3F8gL527U7RhCQcicFabXCRkOFo0faXxv2jLXOW6QIhvs0ro1EvCDa5syKWFM6VFh6GxEGPtdwAWSTBwTlYIz5ny0XtSZ/hvu1flIBTEdlYjoEtTaCKUrhQdYzqx9z5/7RO1Eyow3ryT2NPlMsqFqpKDiFNXRA5nDwBBWuTp6jCKDYNg/htPVmFyYKpAAaYDWgjUH20vXWwgGLD3a7gCRhxkRcKcvQFN/L57cbq7fJlb/JvWu11PnfnDtixgS9wpuyC9JajaLwfbf5VYHliRxDAEF8QVRVeHWWrWYlw== Received: from SN6PR02MB4157.namprd02.prod.outlook.com (2603:10b6:805:33::23) by SA1PR02MB9775.namprd02.prod.outlook.com (2603:10b6:806:37c::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8534.50; Mon, 31 Mar 2025 21:45:34 +0000 Received: from SN6PR02MB4157.namprd02.prod.outlook.com ([fe80::cedd:1e64:8f61:b9df]) by SN6PR02MB4157.namprd02.prod.outlook.com ([fe80::cedd:1e64:8f61:b9df%4]) with mapi id 15.20.8534.043; Mon, 31 Mar 2025 21:45:34 +0000 From: Michael Kelley To: "linux-mm@kvack.org" CC: "linux-kernel@vger.kernel.org" Subject: Questions on .fault, .page_mkwrite, and .pfn_mkwrite callbacks Thread-Topic: Questions on .fault, .page_mkwrite, and .pfn_mkwrite callbacks Thread-Index: Aduihhd+rA9P/XX2RCShvzv440oggg== Date: Mon, 31 Mar 2025 21:45:34 +0000 Message-ID: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ms-publictraffictype: Email x-ms-traffictypediagnostic: SN6PR02MB4157:EE_|SA1PR02MB9775:EE_ x-ms-office365-filtering-correlation-id: cbfd5f22-4881-4875-5898-08dd709d5e1d x-ms-exchange-slblob-mailprops: ScCmN3RHayFXX0mVJp9wZC4LLIW1QoQ+OCUJXP1rnt0dr7v6oWGddT2hf306YIjQgcy7nocYSVkE+83ivV05kt+r8gkq7DhvNPao52wvBCXd30xiFItwNwyU4XUDpgxJRArrS+xnmDniv5EkTVxeL/S4Jim9tBhVL/wSGbAZJQZwstxYBY9+ikqxR8m7Xwt8IjXWj4Wyv7OOTdz3Md+bROblI69QEQCTmOmmvWFwzzhHSMm3LipQ2McxzPmWIFBBqypyKFz8BCrlzjqzgCmDvZBeSXgjiEKAmscUzOqjLKu8VjE5IZn/ywhaVhB+9787syxpmI1c4Jyr7cWTEd7EHqOy/AJZFttkmvNV2i6Mm8DPN1NXLI65Lva+rAV1IXVaaKEp2PajHlap/8BwSDXJvhgaA+zYfppldmvT2AnCikBEEFcRZnn6F/pCgRpcfxNomhyFGpU/g2Lpj1aTaiIIU/dwSwSMR4yyKCDe7dUmKMWpW6SR0BDS4MLOZ5iFG4j3/r4JGPUQsBVNVMdmncD8qww5f+QjlV34TGnU1Dv5Dzp9KXtIBOF/9GO/Q9DHYGBxRkk4vcaA/drFBp/M/lUzCt7krq7K6EsDOzTfMs2/gleLcJCcxpe7MDNCO9JW8e8dq3BI2qNAROa1CtkWub9RpFqXp4VNjs9xxYlE8oPiZRI33HrGfMjK4XoYePYnUJoUQjcdUVzbopL0/xQSQmoMrVrTobzKMj9wVMMyyBBF2yI= x-microsoft-antispam: BCL:0;ARA:14566002|461199028|8060799006|15080799006|8062599003|19110799003|102099032|3412199025|440099028|41001999003; x-microsoft-antispam-message-info: =?us-ascii?Q?gp21MEi/zUg6WRtayBFV6TUWPHQ2G7sFJ3eRz2xhD4wkXM9J7puifUYR5571?= =?us-ascii?Q?RIxyE8tj5djQVbfQauv1vRFDoKo5x9jBVq9UsyoT/GHxhlFSfVYx7pwAtQ0A?= =?us-ascii?Q?RZarqsFz3mSpxQ54dgdOXDVYJgTkWIFy0CNcZU95XWoULJPmwqkIbedA4LuR?= =?us-ascii?Q?9C6thIsxxYlAbPmV6/dCV8HbnivzR88Bcv9m7hdR/f+bPunnihebEv52gPxl?= =?us-ascii?Q?ETzmkF+4YYK6tuypLf3gS0iFUtvjpd7azOc3Ji0gSh8yghRqlii4LZMf7gA7?= =?us-ascii?Q?FLq34tGvIbH91nCymlSIZuBahMuVuZIW490mEpwCGmSxJMfnEk0qbKGru9R5?= =?us-ascii?Q?tSADJJGKDe6ZkjA7QnzwLJJMRrfSmXOGyKat3l4Umy1QJKgwDA2DMo5WkD39?= =?us-ascii?Q?RIVPBjzpi3P2AeTea5/WpJpWd4MBlelCdeJp8Bmj2eHno7M4vAP1Vb++sxdL?= =?us-ascii?Q?ughSTeOVMqsqdkc0lWybKnJ0PXNGRvJ3CJ2DpHI1lbrBQCmY/ZRcTc8n0Svh?= =?us-ascii?Q?4mDQKDFaV6N0A3hsNnYlUwUfS42OuIOJpfwyiL+qH/avhbs61WSdHlEV6Vev?= =?us-ascii?Q?EHJ3tfiFWc7G04A61fSQ49DMSvShbq5yOxd7ZYgbFRMERPgVpCVBC8IIvggn?= =?us-ascii?Q?4+fDN6VhmNTCNLvo6O16CcSOq1z8umdw6ZWxEbK2hKYG0DmrQkHg/3W1iiJN?= =?us-ascii?Q?b4OrEoKZGc4rW339Qz+IslVjMbt9tMUIT2asdTc0QBDPfRn56B6iIVXsMeG9?= =?us-ascii?Q?S39F+oFoA0dL3EZTg+X+yyB90L+9wk10FQy+z+1oM/ucCX96GMW8JUdZ6p1R?= =?us-ascii?Q?Vf2gI527gNacqjxLJD4r/JA7owXFfZ4lUx/BVvlJovnmaLB0q5FO/fzkZwxs?= =?us-ascii?Q?P5wQyrz+wiUYw/ykuDaMgKzddCMRHbKhXxZdX6avvZe4uoAohupEcBIXjoQ3?= =?us-ascii?Q?T8D/wiucrHsQC5pOFR+K7XSF/JcK1HwxgOctPNQIOCroHdByshsHAfy7hry0?= =?us-ascii?Q?MnQ5YliAIYLMzErw+O5UUmtuwfEciesuEWmZtt0FiWdcBsI++A+1Q5nPzP4Y?= =?us-ascii?Q?IpuuAyme9BWH9ymppSK/yivVhkHa5kJ1qMXh9Weg6hfvDtLg5qxnuVikjmnJ?= =?us-ascii?Q?ZaVTGBRf75a5?= x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?AdTjdMmR3LBm63gehilP+LpM5oaIYtXS1wuUOgabuTumZzz+PLws+uPYnmpv?= =?us-ascii?Q?UZNxwcWPuxK78NgB4tMVRnnzPv7ZR8U++E2ddglEF8uj932OJFKoqEdrCKnD?= =?us-ascii?Q?Ad1ONCtoXegsJaNujba3hreLw6Kpn1XZh57NaS+0b9GMTQ3ATQ1lyIQD8uEP?= =?us-ascii?Q?OAjivK4Pr6cN+3lRuPFwLablEkZcSlAzkAvprok673aFpkOFJsn2LlLh6ita?= =?us-ascii?Q?UTp+D9JdQnxkjE5tQ50cBLCWNsjXziGLwj1fKFeaVU19B8a1fC/fREOES9rc?= =?us-ascii?Q?wmvF8Cia8F2eSOaKyFIcOs4usH/A6w5vyWzQ9Bodd27KigIsYLwHHXAeGaJM?= =?us-ascii?Q?os5SNK1GtOCrUYdwrPsBkG67xVdm38o9f3XT7XZW1OdyU3bfN6f6o92G0aNn?= =?us-ascii?Q?qJvdsoUtfuyIEB6XzRY0eHd85nsI8Pvd3076EREKXXLocnM4Pdl99NSzw4Mu?= =?us-ascii?Q?WhFK1wFe4m9TxEZf2lRtxhO+aIhvV+Qs/wG+wVbKbK0+bt/hBnlYZ9jdgm++?= =?us-ascii?Q?Wzecpf5uSSueYP3KytUO+Kc0lhmRT+mA7k2EGJQOra6oBqDza0LG+DmKytLR?= =?us-ascii?Q?ELTeU15o06xIh6PDOy78xJdl9+TNx35wXGvvm91cSp3ee3FSaucdGBdHx2Rj?= =?us-ascii?Q?k7G6XaOHlelJEbc47YtlnqUHIBHGbJZ7uHnclA1XgfEbTFFBD13q8vNKlXIm?= =?us-ascii?Q?LRcm8DeceY+2xBLE9eamZqTpo87Yjy06fzzLVpbO6QnNlbbh5BDPCubAMm9i?= =?us-ascii?Q?xmcuJ9YXgOjFiS5xTqGXX639aBlUQxAK/zEVAu2RCeCYac+wiKvSq4vlc4lg?= =?us-ascii?Q?mhZbMtSgZfNlpfAvGT6ecmmHG6IraJqXnD4EP5XpvdjY3LDPxCvwpaoZEBxL?= =?us-ascii?Q?DPvXnDm90oESm1Fi4ALnvJpGMX7j4Zo2BVleVzJsLZlYTMA/zXioVyLK+GwJ?= =?us-ascii?Q?vX6sdJXDD25I+EH41abn7TfP1ZfAa8S5mSC1b1pRNpz9MFx5aFUBU5hAnxzj?= =?us-ascii?Q?3D6HZlzHxOYMHzJ6mey32M4nEghKvT8mSfRJWsg2wHpRyx/1aqNZxD0AneBT?= =?us-ascii?Q?tmWKQsDRj4V8HWugouPtnsUM3+r9lC9jo3rJlWjU89FYEAQWvoCFNAn8atIo?= =?us-ascii?Q?/fiauU7tNLJc8pkiGdQZ+BEuOdosXzkcUyekDMG2jrAcBNV2vWn/7s/d0xwC?= =?us-ascii?Q?lEq0sab3Rwhxv+FdXmYSG9q7ogRTtJEfFT3cKS2uUtPVpUr5hEKhZtdDy9A?= =?us-ascii?Q?=3D?= Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: SN6PR02MB4157.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-CrossTenant-Network-Message-Id: cbfd5f22-4881-4875-5898-08dd709d5e1d X-MS-Exchange-CrossTenant-originalarrivaltime: 31 Mar 2025 21:45:34.7332 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-rms-persistedconsumerorg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA1PR02MB9775 X-Rspam-User: X-Rspamd-Server: rspam10 X-Rspamd-Queue-Id: CCFB3A0003 X-Stat-Signature: s1uqohndkc58jpkxhccobqn3o9xx9anw X-HE-Tag: 1743457537-687038 X-HE-Meta: U2FsdGVkX1/dBB/RJDIbRsnM7bkB1gaGloQXGAB+lY5LcqXGtC8PB037uY8IsUEzaGsItn6sBDNtKW2uBMH+z/KcG5uk68Q8KOIiVvB2suQweBtrazXyBcsjJ2ppmQrZ/Si1Eqkk/6iWoMIEj1iYtwz36AYMDSlX/OO3j1YPyDICW5PP+Imaq/sIogQ8FLe/HgBRN4KBU/vj7onqg6F8r0TtWklEqweNY6xhpEbEp/mf1ugfDdjNPWw0YS8aiGXkac7g0KE4jO07jWY/naUKbwM+f48qADC08RPLDioUD9P3dG4LDcd3lTyWuJPm9HvRqoJ4CPP5pHrv8keXv/QeEctF1X1AA2L++1iR0VihrHR2kx9UKMAfnumOtDbwwhJjt+utubyeGp+VO67sjoIYikncfxEs5vBcJBHIutiFEnJkeUK3oRxY1e+J+9SApapgnw5rwkle+6dWwtrGp47wOL0ArxkXjSaKRNXTXRZmj3ZvRxxjTKekBYW9ssKhJMo2hwNlTA7yJf/YN76DmefIg6AHVGxB6abme5lFDx1Nr2dDzfCD6AjstlPnZ/xNprN0E+RsSRJLzkI/GJIhmMddwyZ9FOtVJ4PFKq0ENYSedhpozEWO6VpTnqQQ+zCmMJU24ycMJ1WkYtBHkDJhXNSTJy7veLvu8rSjmMHRhhvNuemvmWtf2PswaHzImVKnVM9MSc0nz+4sgxvZDYf/c3m8XE1K73RkA9LERzwmp8PB+rxtKhztjqmrwLDiBI6WY1/aW8yJyKQkoVgQcLYJ+HIM5pUCsLNElnNfUqOx+PMj7UrY1LRgYuBITYandr2scwPsLZPgaSfHrwIy7wiXJZZrV9nEIFLa59tsVlRsl3HpxZPMHGBjvcQbNDYEoFbmB+nAdJvlu6WInsWogCyGw3+jfAwClRHUlNNB4jFeMkVxYSlwtLxOV36PveMQy17rDFPgQ0lKELA32i/PZs5r/Qs Qc7mpf8+ 1fN9xUKt5yZ0j3YrzayGCA8YSTD3aTWAiImivz0RPu5sm6Fznlt2skfwo1UvII1Fkw/akPV/upX+9JS8AI+2bfh7TJmHxk/y3tQPOMsO5vlb2+dU= X-Bogosity: Ham, tests=bogofilter, spamicity=0.000010, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: I have some questions about the use of the .fault, .page_mkwrite, and .pfn_mkwrite callbacks in struct vm_operations_struct. 1. The .fault callback can return a struct page pointer in the vmf->page field after incrementing the page reference count. In this case, the .fault callback returns 0, and mm code inserts the PTE after the callbac= k finishes. But alternatively, the callback can use vmf_insert_page() to immediately insert the PTE and return VM_FAULT_NOPAGE. Is there any meaningful difference in these two approaches? Is one preferred over the other? 2. Same question for the .page_mkwrite callback. Additionally, this callback can do lock_page() on the page, and mm code will finish write-enabling the PTE before releasing the lock. This locking enables synchronization with some other thread that might be trying to write protect the PTE. Alternatively, if vmf_insert_page_mkwrite() is used, the .page_mkwrite callback can do its own synchronization. 3. Finally, it appears that for the .pfn_mkwrite callback, the only option is a vmf_insert_*() function if synchronization is needed, as the mm code doesn't do an unlock after write-enabling the PTE (presumably since there might not be a struct page). Or did I miss something? The context for my questions is the fbdev deferred I/O mechanism for a framebuffer mmap'ed into user space (drivers/video/fbdev/core/fb_defio.c). Current code works great if the framebuffer is a vmalloc() allocation because mm can manage the page lifetimes with the page refcount. But it doesn't work for a framebuffer allocated with alloc_pages(), where the page refcounts cannot be used. For such I've marked the vma VM_PFNMAP, and added a .pfn_mkwrite callback that seems to work. But I want to double-check that I understand things correctly. My .pfn_mkwrite callback does: vmf_insert_mixed_mkwrite(vmf->vma, vmf->address, __pfn_to_pfn_t(pfn, PFN_SPECIAL)); to make the PTE writeable, and returns VM_FAULT_NOPAGE. Using the "mixed" variant seems like a bit of hack, but I didn't see any other way to handle a PTE marked "special". Thoughts? Thanks for any help, Michael Kelley