From patchwork Fri Jan 31 18:28:56 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lorenzo Stoakes X-Patchwork-Id: 13955659 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 08AA3C02196 for ; Fri, 31 Jan 2025 18:30:37 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 7212D280005; Fri, 31 Jan 2025 13:30:37 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 6AAA5280001; Fri, 31 Jan 2025 13:30:37 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 487CF280005; Fri, 31 Jan 2025 13:30:37 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id 1D6C9280001 for ; Fri, 31 Jan 2025 13:30:37 -0500 (EST) Received: from smtpin06.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id 11600161130 for ; Fri, 31 Jan 2025 18:30:24 +0000 (UTC) X-FDA: 83068587168.06.CF94D54 Received: from mx0b-00069f02.pphosted.com (mx0b-00069f02.pphosted.com [205.220.177.32]) by imf01.hostedemail.com (Postfix) with ESMTP id A95B840016 for ; Fri, 31 Jan 2025 18:30:20 +0000 (UTC) Authentication-Results: imf01.hostedemail.com; dkim=pass header.d=oracle.com header.s=corp-2023-11-20 header.b="hahjzEm/"; dkim=pass header.d=oracle.onmicrosoft.com header.s=selector2-oracle-onmicrosoft-com header.b=HVe9LGj9; spf=pass (imf01.hostedemail.com: domain of lorenzo.stoakes@oracle.com designates 205.220.177.32 as permitted sender) smtp.mailfrom=lorenzo.stoakes@oracle.com; dmarc=pass (policy=reject) header.from=oracle.com; arc=pass ("microsoft.com:s=arcselector10001:i=1") ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1738348220; 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:in-reply-to:references:references:dkim-signature; bh=RcB7LwTuP+jiSSGiex70kDWysccFmogi0nMMMReg+CY=; b=II/2qrJ4e/rMbuIaiMnMGAhMDZ7cHply2ub6NS56r4X835RWVxe60YfbNDHr5hPtJw9Gvr xzxp2huaXQhNY8uVPJ35FgBoQrbUYiq8YAyl9oe/0znTfEiRdp/p/k7DmOh+Zqop5ao/0X Qt1z+zI+zxXfPmZsvRbZLrMZbdgKYTw= ARC-Authentication-Results: i=2; imf01.hostedemail.com; dkim=pass header.d=oracle.com header.s=corp-2023-11-20 header.b="hahjzEm/"; dkim=pass header.d=oracle.onmicrosoft.com header.s=selector2-oracle-onmicrosoft-com header.b=HVe9LGj9; spf=pass (imf01.hostedemail.com: domain of lorenzo.stoakes@oracle.com designates 205.220.177.32 as permitted sender) smtp.mailfrom=lorenzo.stoakes@oracle.com; dmarc=pass (policy=reject) header.from=oracle.com; arc=pass ("microsoft.com:s=arcselector10001:i=1") ARC-Seal: i=2; s=arc-20220608; d=hostedemail.com; t=1738348220; a=rsa-sha256; cv=pass; b=sjbU5cosSfEdVfyEvWkqcvM9w5G7Ecbvw9k04hBc+349WATDyP2qh7AVG2RzrZH0Etbaro aLA6tyRs4koZAjXmMi5+qR3jiXmuNLJOTTndQkOEpGwgkckaONc5GUZsBZEYlDsGJozGFF htew5QnPMLog2QVxg3x12HMaZw+M/VU= Received: from pps.filterd (m0333520.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 50VIJfuA008394; Fri, 31 Jan 2025 18:30:02 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s= corp-2023-11-20; bh=RcB7LwTuP+jiSSGiex70kDWysccFmogi0nMMMReg+CY=; b= hahjzEm/epDCWh3zvMGNKLk2HxeaC/X+oZIpf8AqHKqY6o4IRDDZ6ffn50h9Aoy2 cwlG9XHQ9/o89oLoBuFqU4J8GKCmRWTx9LhevqdRr37MuukHudN3BGfrFWEoTp9V uoqcrDzJAcmikGnOjAbTj3ZNaFqphHPnUYYi+smhswVCVgt2bR66Wfs4yFptupzF WXu4AIS3MNcdFNBbo0azucKlkpwVTA+R31yXzv97+ukct8aDroNpJyKOTMZ3E3HZ 7NFYeVURu7PnVZ0NAJJi9pkWRWp4tU6KZDkvvJSlsjp9Rbcaji7SdHDB663ZGLbE STAV1GeMpiyJTO5ZC3DtDA== Received: from iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta02.appoci.oracle.com [147.154.18.20]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 44h3pwg0s9-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Fri, 31 Jan 2025 18:30:02 +0000 (GMT) Received: from pps.filterd (iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 50VHQeJF008949; Fri, 31 Jan 2025 18:30:01 GMT Received: from nam11-co1-obe.outbound.protection.outlook.com (mail-co1nam11lp2177.outbound.protection.outlook.com [104.47.56.177]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 44gg1gqkm0-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Fri, 31 Jan 2025 18:30:01 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=pIhDb8XGPPGrRxE/vjzB7dJsSqC7sxIgk3Kc4YDtY1geZdRwwzuvOgtuS5AucB8Aw/GvEJ7C+4KE70CYkhifX6S3nvBcuMYCOjx1wva/0bFwJPnPM0YneFVM3bv5Apy3wVd3npjlIvxhs7HtKSSG3F8F5xb4o3lG4UPFpFD0R16cugp1uLbhSMheAfiEuTsbH+jgSKDVsZVYF29BUJaHRsA7F+qXeUiQzEgcTiB56v5MhAJpe9FeTaKUz/Vst5xJjnlaaQUmSVMJeXMaFaV2vItt18XSaqM3GExdKGtm2D6olpNgmTDOBE1ut5Q+ORx6ImvgJ96SpKxNsccJqAMqFg== 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=RcB7LwTuP+jiSSGiex70kDWysccFmogi0nMMMReg+CY=; b=jkJk/GMq/3Fg4CN1yV8B2orB8ivxzdX2rwGQ1px3v8V/YX9000EOIf1WHOW+hSes4LvMK6Iv++1iJKA/vJ30Y0LxFSYZ7/rdy/IbHs5o1c0UhMm8k253Y3jo8kgO5klSvvJcsvWhv1bv7+dE8xelD/B6nKZxb1XVwEPV3pih8HWbzfshFqozt3YU8Lgd4fOpAyM8iOf/mBXhvFWDKNr0DaEHjnmegSb2o38RvJByhyokj/RVWDiyPHGDpsvSjVsFHOWE8iD4r1rUuORFePDPiJtoavlr09soCHc8KksF5kErUM7IlT04aCrFU7VeOWjNpDL3MGWCPUFhDFrVsuyQwQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com; dkim=pass header.d=oracle.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=RcB7LwTuP+jiSSGiex70kDWysccFmogi0nMMMReg+CY=; b=HVe9LGj9vHv83Hc7pJNg72j81ZZITovrtot8nhGCC6ojEm7FhMFs4KbArdnFB4tC+TKt6/sOHpjvoANeYKep8+cHV6Edx8Pd3KlXRijgCr0oHKz0p5JBF7xOGAnEy+vkr7QIfn4QAkyJJ8h8fJgzXKTBoSCrDXY7VIUIWKbWJuQ= Received: from BYAPR10MB3366.namprd10.prod.outlook.com (2603:10b6:a03:14f::25) by PH0PR10MB4407.namprd10.prod.outlook.com (2603:10b6:510:31::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8398.20; Fri, 31 Jan 2025 18:29:59 +0000 Received: from BYAPR10MB3366.namprd10.prod.outlook.com ([fe80::baf2:dff1:d471:1c9]) by BYAPR10MB3366.namprd10.prod.outlook.com ([fe80::baf2:dff1:d471:1c9%6]) with mapi id 15.20.8398.020; Fri, 31 Jan 2025 18:29:59 +0000 From: Lorenzo Stoakes To: Andrew Morton Cc: Jaya Kumar , Simona Vetter , Helge Deller , linux-fbdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, Matthew Wilcox , David Hildenbrand , Kajtar Zsolt , Maira Canal Subject: [PATCH 1/3] mm: refactor rmap_walk_file() to separate out traversal logic Date: Fri, 31 Jan 2025 18:28:56 +0000 Message-ID: X-Mailer: git-send-email 2.48.1 In-Reply-To: References: X-ClientProxiedBy: LO4P123CA0245.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:1a7::16) To BYAPR10MB3366.namprd10.prod.outlook.com (2603:10b6:a03:14f::25) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BYAPR10MB3366:EE_|PH0PR10MB4407:EE_ X-MS-Office365-Filtering-Correlation-Id: 14ccb904-197c-444f-88ec-08dd42254491 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|366016|1800799024; X-Microsoft-Antispam-Message-Info: e38rIdzb+DmloN2yGQvwVQQBVhvk+rJoPPo7nLIqtJNQ1eSYnwTwnmLB/ekluQoW5ir2ZQ87Z3aBsXFa/RsIqfN72OX1R7Gww/Dcd8pqOKfER7PvEWaKZKWzeY/MqqxxsJiqDevZ6LOwcERiGw3idblWBQs3VRcNLLyyIWe1ZCldwOXLjPscv2MLlISHUDgdoyVvFz97Gj/uQTbjGhnv7kEe7MWasJCTYNrQ4Yubte4wbb6khYIcD0fdWP6fVvCfTaV7F01IMYIDZnEcbLN7jmq7JrIPQDaYP5clG5XdGv0Itbk1NSlhMewVBlA7/Gqpd1WA02uPCeNoEOYzvaiHCHXGaSTMkxl0QEcGEFnBNuU5hxml+W4W0FR9Z5zO6MroMkn4WVWfoAf7WA8cqGLcCYlAOxyKvxjerfDHw4eGl6pQVg6lm+9MUOudHWoPZZ0V52Irt7QHxI6iQO2mA7eRJx2vVYa40dmQxdXV9FeYxOuUUJtDgR3pVjqQszs2oyHvKM+c1oulvmKgqTsT54A+RViWUt+ZMvqXyOZfRpMQv3hVpDbvgthCf01RS9UB1a9jV/0S3JUtXBb7xow1NFE2I2oJtnuoTaQD3Ks8igy5xqSBm3COSnIu0/tE1mTTAIUd2sV4w1nJkflBCrGLkz/FAGLuqSMRp5grYS05kJBXaFcthE2e5rMMGJ5YtS6l1EnFVhvCjebhmWyVycjcu9LJDn0x56U2+Cfs8NZIKk5V78VqR+LjMbcBCjLql4PlMl4KdzsUJv9BYj5CazpJ1uJ/X6P6lVanH313SS2nAfDrx3c2wm3H1TanRMW3REkARyn0/FDACHsnZawlKvqNAyuPSgoCKnDq/WYogrJ8Xis3nHQug03l3H9w8g4ng0w87dWndOrvc0FUdo44uN7M9T/nS7w1/ZwP6IsvtCjGeGD7vbdBLKIVKHc3IcdP+cHLyAitUcO3Ij9+IacfSGPrSAc/ZqGkaWZROQMdeyatcZvGMKsg0n/lryXIO21k+amJAKCKLhXo10EC5kfM4q9VlyV8jkqIHe6aeAhtdtPse7OTzNwwjbosYhbqd4Okv096umrugO28IpswdZuyC9Ba9epEAWxSjQFnF//KAHpHKPrbYSZPtyzVObnxcoi1c4rGcddw5pvLiRSivzgYBfDSqfoKAaqxP7xzQfLd3KksWDntoe6stcFYZWNOXgi6V9l5A/4+g3BZNd6r9n3XaDmdy96cz4mw4BSLma0dI5rFiMoDDJe5bO0krSaC/9B5+PfPVEKCSfDFPpxBh3DOn2jdVfJde6x/zCqDwDRlZ+t1mSv8WzWiin7W/ma/AB38S5WgxdZbDpOlJucEak2yoXr7qVI33ye6KeQwzohAfE8n137/WpQZqU8mNxUqOn4dxvnKCodI X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BYAPR10MB3366.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(7416014)(366016)(1800799024);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: oo2kvIJ1LMg9hYNBzmn9/ouM/X0D34/FtPMXdtA6JdA6eOw6R/TvcMwCuQQOD9fKgzdNPU+aw4jkUTSDn1hDw66HYNOsi5qHmyMlgSwZz4q3Oz7oIr90imwi1dehhYCtPrNRqVJ+mmdJ2WPf1pHAO4THnltFlGHGv8JBIumaMJSC2vzj13dtLaVLep1+45uUiS/l6LEGCPQCz3QQ3Ke7lUKWYnRiKm9loKgIvDe3FCl/1Debv64BIjBV92zYdY/WDdgHh1OuBuGY21yWVnT0Cr/AD0l4XXISvpZjv9Wgzv0u7wq9ChArXaNOPdVmXe35MKHn1fcDgp2N0ap29/MHR66rFvKQIaI98OPg5uCm0hbvO4+7XMah6ImrS9c/m900YQn64ZeDiU4CioE6pFqzlQZt/MtuIc7OdzJHJOeShhflyFJhfeJvB36V6xB4KOgRWFDqfHJJq7sYvqOtSQp/X47i3j/g7AaIQPMUtbFF99+iY2VtIAHMq1So1hqcXz7ArYmRx8tVeOI8fZfb9yitYt7+zKu/zvlwxq9bXCdAwSpGJzXHlUgcNYjjYkzIOTPGUOVA0/gjcV0/XxVsSEF+ozc9RrlQXQBaFbUHoIv7KDutX6KQcBzxkPMhI78He3dgrUyLlEIvM7oDBXITw7aEKnq+nVkf+ho36jAZ/A2VyMUYD+u0hXE7v807um9vaW2Cz6gA7fLbZbkJodVjJhFxt+HliNy/HQ7BdPc3r6wyBJ5/CTY/wP4M7jp1sHz3YHpws0V5WtRKXuprhI2dMXRncms5LeRxA5HcREoyue0BUFEc2Yg5+J3jShowhNWxD/i4nZ+7r1+wO1hhF0pTx6yUhGlWybguX2aKuP9b9MwOdTLAGi85iO+0hw0fMW85cUdYQuDCJCUh2wTfJTOW8Z3/zmtpWDm+OBtsgDzXhkNu8n91ysoFXnQfeEWbtbdF9RMv/EaMNOfXDC50Wdxm7qC099vaNjaBjYjlAQBLfcHHOLKWq1vAaruBMv+iX+abiD346zlAtN0btXCs3YATipXeBtO6GVhTPxWp8bCpIiY89D/WmdesY7xFs3YmEF7cL5/H9AO0xPuopomy1GjgvqLC6jHWGkDRxEOrqAf4c1cYzL05HO8kqNFsYDyWAzEXCowWnpZowNyYTKId471bwMZdaTe89n+yLnhXKJoNvc335K0f5dECPaQ14QJFsd2KI16mPgO20tj+91eopPSdiw+tT3Gs3JwWcf/GIZNgNpSk/sZIhcPgZ6c/lJ23fcqpVEyXua504SbRKH+ITOV5qU2LAiQ1TCiHPhp4kQWdqxp2ELgjMFOOZ5g9NXl3GfNo5SmmuUk0A4MTHb0Flg7TRp9E+CdyAlYJG3CKf3XMQ6sc4l449N5L/HOXInhZ5XdgEBXbq8HxzX0arz3obBVQ6zT+98Ru50au9BK2CcxIz+PJgn/4qeUuWdD5dlU0GJoPX8uSiem387hXVVaPLkMNxdvEup9e5ykA4yS4qFBHx1JxJd1YcShiJp3BviDaIJBXx68EAfU+FYC8k2b+4HCau0xi5NJrPOelzJxjf9beKSPK/MPfGUsTF6Q+dCnlKjKbPih6YP93ryBrvi3mC1yCUjZ3QQ== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: agSzGupkqCGk0voEuKuOODbchiGb3HYil10Y6T5xxBW5qeCjRnuxMwPaktNgbNQJmw+WsE88WS6oQa/YKZce31RPKphxvg0+C6MRAo+L7acNrVNZLV6gKXt+4TLtSSGjUO8Q8t04/7w8anVYXH2RZqZVOgUE+t2re+ZJjAw773q4sGCIVErbcG0g7j0A4Q18w0y6iI8xIAdGhrdhhv7RHWE/1Mto1E8UELS7E8WcwoYOs85qWXOd/TsZoDTl8mF7pyNNJhJZTwoDHz9km0N1EsaGUJoxNwJMdcAMVmo2OyElRFCi/fgLwXkbCgoRbNgb1nt/+U8eol1kPvZGqqs1MMxdTxBCN04Kyszw3NTnCdBT20KUsvpEMaJk14qMv+PLcNxOs77Tt35NxJHLQmKXWrcl+tPnUDay6AR0EF1lG/nNVBISar9Zegj0VPJICW9hLmNSFTY/ClJpGDir+HIv0ibfLR2HZT5BvZ0T14HV7OJ+lL10XAujqe/i57ZfkBfQc/AiwxKDDlDIHro/7U2pTF/dMFX09YeVKslRdkuKuMAWSNDP0KWEbjnYAMhNzcy4m+FZHjCIlFW3DRT1PT7DyFNmu7Fp2Gw/XVP2BKHel/M= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 14ccb904-197c-444f-88ec-08dd42254491 X-MS-Exchange-CrossTenant-AuthSource: BYAPR10MB3366.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 Jan 2025 18:29:58.9310 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: XZKOWuGmybWRfqT+SlFsMn/6fHWLrpEVp4+ldJ9AeshX/goVqjutePqF0+Ugq2QTE5y2Csw9kgf3CA+/aV3Gf5U6eiiOaNzR+mJJN/PAfgI= X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH0PR10MB4407 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1057,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-01-31_06,2025-01-31_02,2024-11-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 spamscore=0 bulkscore=0 suspectscore=0 adultscore=0 malwarescore=0 phishscore=0 mlxscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2501170000 definitions=main-2501310139 X-Proofpoint-GUID: cOFu9VZt_LZVgTnQMYeONU3u5gCRdcoi X-Proofpoint-ORIG-GUID: cOFu9VZt_LZVgTnQMYeONU3u5gCRdcoi X-Rspamd-Server: rspam07 X-Rspamd-Queue-Id: A95B840016 X-Stat-Signature: 31n66oyndjqpr9pzs61hfhzgajw1kujo X-Rspam-User: X-HE-Tag: 1738348220-994718 X-HE-Meta: U2FsdGVkX1/x/ORl+BFoB3OdKUjCfFmuwBbVfJ26tCjQ/ZGhj7ZzF/+gZJP3qKOMK2cDSZaZveeYj1WXmAoOrSXAhvyhNaVYjPvAphgRECd0x/OZKK2IF1IO4E8nmSTfRDrISxHG9uosPHNV9UnGB9GggYNKuMFlU38ZeaXpu2w3/FUiJBFTf9GRJ62g/f0uJtWoomp4Mdlx3RaSYuWxuedesatehMb/+tWxvepae4Wv0VJjak10SpzNmEKidKC7Nl5PJU9ENxk5Exloxtg/18UoSexSS9H9i7t9XiyPe75plR8EzhJ2+oF1wiVWwQ0Mw62OCkFTXnQ4ogdljmCp35i/OFWE7WYRQ6jGfff0CnssTvoh2x4OgAsSH0iO4LE63JUC61GW2ZX66oFTmiCGqcxwfUb36/YG4+NA1t3SAqH9usVL3ICS3+kuHrhvMmXc+/EltVev2pIUAZEi1TGC3/FiLycTUhpS+mwubBRrz8sGvE5K8dgtpjYXRxGXal5tfBWEA5F5Z6s1so8JgVWgexWFfc6SQt1uYFH2KTJhBQGZ6J50S34axkJ0tdNDhhRnUNwBdXJms/6y/cMmJElgVludPT+JLDKJut0Kvf2gz7svSp3b6p5/iE+D6lZUsl2iz2wNBgU8kPLbMF3C7joo9IgABLFIEhKg9w1iIHNAq3dRUluwixQFe/Se0YIdl4F3vZcaERzHjaIlB224qOV5GXyhQ+i3ZlN/xLaqbdtMGTCwBXuCmkUJMJWUqieyikwL8C7kbwDZ2rfo5FJyaEcFckwcIdYY1P/6uB6RAGaLGkKrJ+TWhGACo4KcWoki2T409w105x2q8Ia1NgSyT21qUopsAVfwWf3bbmk9IaxzhM5Bgo1LwHYEyLrl2YOTqDQ55zMg7YHN2uYMBbryNH6UDarvjnELBumf5gkXSb6hlF1HC833plY7nZkbeQkN3lZy7itwWh6N6BHr7iNsfq1 TzvuuQwg ItVMrUuEgNTycdywtTlH4wdtAlDyJBcs8p91MVYXVZXIaSmHpAypQG3BU9r1zONkS3UqfUVw03R+CNn45E4AVAXpPZVH9QJ1yFdS4vmLfKy2Nh9T1BYVmwOGt8l9N+4BHz46TKdT4BARIiA1f3qSxDxzmGSfc3OzmEgYF1y3I9/qmFLJff1KodEKi+VLih8ox2wqKNG/IdKqqvnx1q4SmwmwcB0bOQ7Rs8CeqykOU9yd0fKpxXy/uIeKUV88BEZE0hKxgy40s9Z7Uo5TJdm8C50/t7NHUOKrMBSvJKo9XZIcWkyGIBgSgQOskIB+qOKIjgaly1BnyEeBaEO3/V+jVEEVWgpqAqW/uywtQek1mnFCdeKT9DnnZBgDIENrTw8hqoG4X+71xswuFGbYNbMc4PKDhvDl5RxcWEcdl9AliQGKOfpbUB9DGAaxYPARBWnWgrhJrOGwiheaVXzwG5W0bm0vLjx5ESkOmSVFSwgt01kYf/3sz2mZ4KW6mfY3zLJnInukCoO/9NXexjLRXgEM84236BvnIdhS2QL2mgy3LU1PtZmmq9cJAQgkZel5d9HZrgzXAmzsbwKQqbMoghmjaBojHCrGl9yAR7M12UH5jLj2hv3b/D40aveTi2rgtIZ9FblbNx4/yyEM2Iv22KmxmY0p4kPHwtC0nZvVNg+w5eLHOdxJRM7ZFaQq6hg== 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: In order to permit the traversal of the reverse mapping at a specified mapping and offset rather than those specified by an input folio, we need to separate out the portion of the rmap file logic which deals with this traversal from those parts of the logic which interact with the folio. This patch achieves this by adding a new static __rmap_walk_file() function which rmap_walk_file() invokes. This function permits the ability to pass NULL folio, on the assumption that the caller has provided for this correctly in the callbacks specified in the rmap_walk_control object. Though it provides for this, and adds debug asserts to ensure that, should a folio be specified, these are equal to the mapping and offset specified in the folio, there should be no functional change as a result of this patch. The reason for adding this is to enable for future changes to permit users to be able to traverse mappings of userland-mapped kernel memory, write-protecting those mappings to enable page_mkwrite() or pfn_mkwrite() fault handlers to be retriggered on subsequent dirty. Signed-off-by: Lorenzo Stoakes --- mm/rmap.c | 79 +++++++++++++++++++++++++++++++++++++------------------ 1 file changed, 53 insertions(+), 26 deletions(-) diff --git a/mm/rmap.c b/mm/rmap.c index c6c4d4ea29a7..a2ff20c2eccd 100644 --- a/mm/rmap.c +++ b/mm/rmap.c @@ -2653,35 +2653,37 @@ static void rmap_walk_anon(struct folio *folio, anon_vma_unlock_read(anon_vma); } -/* - * rmap_walk_file - do something to file page using the object-based rmap method - * @folio: the folio to be handled - * @rwc: control variable according to each walk type - * @locked: caller holds relevant rmap lock +/** + * __rmap_walk_file() - Traverse the reverse mapping for a file-backed mapping + * of a page mapped within a specified page cache object at a specified offset. * - * Find all the mappings of a folio using the mapping pointer and the vma chains - * contained in the address_space struct it points to. + * @folio: Either the folio whose mappings to traverse, or if NULL, + * the callbacks specified in @rwc will be configured such + * as to be able to look up mappings correctly. + * @mapping: The page cache object whose mapping VMAs we intend to + * traverse. If @folio is non-NULL, this should be equal to + * folio_mapping(folio). + * @pgoff_start: The offset within @mapping of the page which we are + * looking up. If @folio is non-NULL, this should be equal + * to folio_pgoff(folio). + * @nr_pages: The number of pages mapped by the mapping. If @folio is + * non-NULL, this should be equal to folio_nr_pages(folio). + * @rwc: The reverse mapping walk control object describing how + * the traversal should proceed. + * @locked: Is the @mapping already locked? If not, we acquire the + * lock. */ -static void rmap_walk_file(struct folio *folio, - struct rmap_walk_control *rwc, bool locked) +static void __rmap_walk_file(struct folio *folio, struct address_space *mapping, + pgoff_t pgoff_start, unsigned long nr_pages, + struct rmap_walk_control *rwc, bool locked) { - struct address_space *mapping = folio_mapping(folio); - pgoff_t pgoff_start, pgoff_end; + pgoff_t pgoff_end = pgoff_start + nr_pages - 1; struct vm_area_struct *vma; - /* - * The page lock not only makes sure that page->mapping cannot - * suddenly be NULLified by truncation, it makes sure that the - * structure at mapping cannot be freed and reused yet, - * so we can safely take mapping->i_mmap_rwsem. - */ - VM_BUG_ON_FOLIO(!folio_test_locked(folio), folio); - - if (!mapping) - return; + VM_WARN_ON_FOLIO(folio && mapping != folio_mapping(folio), folio); + VM_WARN_ON_FOLIO(folio && pgoff_start != folio_pgoff(folio), folio); + VM_WARN_ON_FOLIO(folio && nr_pages != folio_nr_pages(folio), folio); - pgoff_start = folio_pgoff(folio); - pgoff_end = pgoff_start + folio_nr_pages(folio) - 1; if (!locked) { if (i_mmap_trylock_read(mapping)) goto lookup; @@ -2696,8 +2698,7 @@ static void rmap_walk_file(struct folio *folio, lookup: vma_interval_tree_foreach(vma, &mapping->i_mmap, pgoff_start, pgoff_end) { - unsigned long address = vma_address(vma, pgoff_start, - folio_nr_pages(folio)); + unsigned long address = vma_address(vma, pgoff_start, nr_pages); VM_BUG_ON_VMA(address == -EFAULT, vma); cond_resched(); @@ -2710,12 +2711,38 @@ static void rmap_walk_file(struct folio *folio, if (rwc->done && rwc->done(folio)) goto done; } - done: if (!locked) i_mmap_unlock_read(mapping); } +/* + * rmap_walk_file - do something to file page using the object-based rmap method + * @folio: the folio to be handled + * @rwc: control variable according to each walk type + * @locked: caller holds relevant rmap lock + * + * Find all the mappings of a folio using the mapping pointer and the vma chains + * contained in the address_space struct it points to. + */ +static void rmap_walk_file(struct folio *folio, + struct rmap_walk_control *rwc, bool locked) +{ + /* + * The folio lock not only makes sure that folio->mapping cannot + * suddenly be NULLified by truncation, it makes sure that the structure + * at mapping cannot be freed and reused yet, so we can safely take + * mapping->i_mmap_rwsem. + */ + VM_BUG_ON_FOLIO(!folio_test_locked(folio), folio); + + if (!folio->mapping) + return; + + __rmap_walk_file(folio, folio->mapping, folio->index, + folio_nr_pages(folio), rwc, locked); +} + void rmap_walk(struct folio *folio, struct rmap_walk_control *rwc) { if (unlikely(folio_test_ksm(folio))) From patchwork Fri Jan 31 18:28:57 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lorenzo Stoakes X-Patchwork-Id: 13955657 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 D149AC0218F for ; Fri, 31 Jan 2025 18:30:26 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 6AC0B280003; Fri, 31 Jan 2025 13:30:26 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 6350D280001; Fri, 31 Jan 2025 13:30:26 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 43A5C280003; Fri, 31 Jan 2025 13:30:26 -0500 (EST) 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 1CBAA280001 for ; Fri, 31 Jan 2025 13:30:26 -0500 (EST) Received: from smtpin30.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id 148AA1C8401 for ; Fri, 31 Jan 2025 18:30:25 +0000 (UTC) X-FDA: 83068587210.30.D7C616E Received: from mx0b-00069f02.pphosted.com (mx0b-00069f02.pphosted.com [205.220.177.32]) by imf12.hostedemail.com (Postfix) with ESMTP id A957740006 for ; Fri, 31 Jan 2025 18:30:21 +0000 (UTC) Authentication-Results: imf12.hostedemail.com; dkim=pass header.d=oracle.com header.s=corp-2023-11-20 header.b=KMXZlXZK; dkim=pass header.d=oracle.onmicrosoft.com header.s=selector2-oracle-onmicrosoft-com header.b=tR39KZo6; spf=pass (imf12.hostedemail.com: domain of lorenzo.stoakes@oracle.com designates 205.220.177.32 as permitted sender) smtp.mailfrom=lorenzo.stoakes@oracle.com; dmarc=pass (policy=reject) header.from=oracle.com; arc=pass ("microsoft.com:s=arcselector10001:i=1") ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1738348221; 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:in-reply-to:references:references:dkim-signature; bh=vIk21mj59ZgaBOgOzltnjU6J7QwYZm9Z6mtoj9ezbAQ=; b=eT8Hx37d5Z/x2os5w/Uz8d82YnscKANSGX2yu2tVqJWW53qMpyTBNPYjU2gBLxFDtmDue1 M1hIVG83LKw8V8SU08k4PEhXJfcZql7VCDlCR8FD82tFr0HEX5K4U0wGy/yaX8RpuxN1AU g5Ev/eCa7ARuCOFYW6OgtyDxV++ZYR8= ARC-Authentication-Results: i=2; imf12.hostedemail.com; dkim=pass header.d=oracle.com header.s=corp-2023-11-20 header.b=KMXZlXZK; dkim=pass header.d=oracle.onmicrosoft.com header.s=selector2-oracle-onmicrosoft-com header.b=tR39KZo6; spf=pass (imf12.hostedemail.com: domain of lorenzo.stoakes@oracle.com designates 205.220.177.32 as permitted sender) smtp.mailfrom=lorenzo.stoakes@oracle.com; dmarc=pass (policy=reject) header.from=oracle.com; arc=pass ("microsoft.com:s=arcselector10001:i=1") ARC-Seal: i=2; s=arc-20220608; d=hostedemail.com; t=1738348221; a=rsa-sha256; cv=pass; b=kYsoGvapK8R7Yrw2vkncWGPeo4J1oZ3XnzDOhxl3Rb4VhMiH7ZvQeWHJ4JmEDHAJjX1fyJ pN7ZBbX6Eb5qAGMg4AamjJal+iDr1mBO7+AWVroVOZfROS/LmiyfTQA9+Hxhpsof/YZdTA jg/dp+2tgW813fGtpnKHjaQVn/YNnjk= Received: from pps.filterd (m0246631.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 50VHtm8c024798; Fri, 31 Jan 2025 18:30:05 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s= corp-2023-11-20; bh=vIk21mj59ZgaBOgOzltnjU6J7QwYZm9Z6mtoj9ezbAQ=; b= KMXZlXZK9VjufQKLZLHUElVYcbJxIDavRQZrXgk2AFyOoVXJ4UIDIF0HpVS8SFZr XyiJPFqO169REGrQaDBJO5n7VvzKHErXkJq7I9Gpz3FF+B3NCtRZrF8Y6yJT4p9h +RqKy96VQ3rjue0HImxNqwCt0aPTNJZ193RN45PzTVhTAJxQjOr2Mczp70st6li/ YfjBTXuUNu2OJ9vWWDgqoQzIiE4ljPC0dQM0E+pno72QKfEgS6p2Pia5CDQ0CLJu WHXb6NMkLZ/V3XgtGagMyMnYQgC+S96q2Ha5bNr4nLeiYQKwhzuXK/TFAekuumEs kVg6P4uIC+iB/qX4UwVOXg== Received: from iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta01.appoci.oracle.com [130.35.100.223]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 44h1yj89fx-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Fri, 31 Jan 2025 18:30:05 +0000 (GMT) Received: from pps.filterd (iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 50VIFCtZ016091; Fri, 31 Jan 2025 18:30:05 GMT Received: from nam11-co1-obe.outbound.protection.outlook.com (mail-co1nam11lp2175.outbound.protection.outlook.com [104.47.56.175]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 44ggvkmvj4-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Fri, 31 Jan 2025 18:30:04 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=srXwS/70AdMYZONhu9+tcwc/fB5lr5jaoas9ckg6zYucDWHMTeF6GQx6fL224n2wadjLItZi9MjqMFlPa/EJQmJbPG7WNZHvQ992ivgHparchORBuc/preT77aTsSCSZyZ9Nb9t2gxOsoHjSOfMyzdJax+6+FylUdnEnVNc8+q7Tcea3xkxuS4Yvp0wJklmhmpgtsjKSKecsg95yl/mJy0EaXKB3rP9MKNVjIDFpcVB9aotUxS03p5hQraxv+QCfxxgTZb2/3IqrQfaVmEwJqzmKejfSaS9golrAgia/gFVY5+zIc9yiEcOhTuDB9TRRnAt/7ScLCfgg8+qVlQo2Hw== 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=vIk21mj59ZgaBOgOzltnjU6J7QwYZm9Z6mtoj9ezbAQ=; b=HXZtldWyNa8+TU3ZxWsqfJPqPKcjhch9OCQn56t/j3Ti/kJ53EVEsCkdc3jN6SRUenm71uViEiXmv0fQCKtiVflRzhLooxrZTKyWy0cRHRVHAXJu2nakMLdDJ6xelCwX4lXwGT31KwdnH5FBn+9tcztVeLb06VJN6UQ1q/G0O4dqSKnjfyMh69YW+KKHWewyJU+2WP/fao2hSrze59WKzasCQSwzFQ5xEBjT+4tkzSpMvBDOL+7+8u7eZXEyHtMz7o5jcnQFyc7a/H2LiesAPmtWDPjvBWrtJVUT3zfLAytlr01SLp2WJZNtLdpgZ2F1+dh+voa6Pr9cZFMnDPP7oQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com; dkim=pass header.d=oracle.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=vIk21mj59ZgaBOgOzltnjU6J7QwYZm9Z6mtoj9ezbAQ=; b=tR39KZo66nVVUTwhVhluJOehDRDVvlirv76rzYBJmJf6iAhOPx/n9ibt6Xeq1lFOcQhezDn9r6FD65FPQJ8cnEFgxUCsq51kytR9BOKZJ0js3PezdQZnogeb39UcEKGKSgEY/pvZ9YbnVypypmxehJ9jZ69+cK6/3FVJm69FzCk= Received: from BYAPR10MB3366.namprd10.prod.outlook.com (2603:10b6:a03:14f::25) by PH0PR10MB4407.namprd10.prod.outlook.com (2603:10b6:510:31::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8398.20; Fri, 31 Jan 2025 18:30:02 +0000 Received: from BYAPR10MB3366.namprd10.prod.outlook.com ([fe80::baf2:dff1:d471:1c9]) by BYAPR10MB3366.namprd10.prod.outlook.com ([fe80::baf2:dff1:d471:1c9%6]) with mapi id 15.20.8398.020; Fri, 31 Jan 2025 18:30:02 +0000 From: Lorenzo Stoakes To: Andrew Morton Cc: Jaya Kumar , Simona Vetter , Helge Deller , linux-fbdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, Matthew Wilcox , David Hildenbrand , Kajtar Zsolt , Maira Canal Subject: [PATCH 2/3] mm: provide mapping_wrprotect_page() function Date: Fri, 31 Jan 2025 18:28:57 +0000 Message-ID: X-Mailer: git-send-email 2.48.1 In-Reply-To: References: X-ClientProxiedBy: LO4P265CA0169.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:312::6) To BYAPR10MB3366.namprd10.prod.outlook.com (2603:10b6:a03:14f::25) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BYAPR10MB3366:EE_|PH0PR10MB4407:EE_ X-MS-Office365-Filtering-Correlation-Id: 081c31c3-9ef9-447f-6f18-08dd42254661 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|366016|1800799024; X-Microsoft-Antispam-Message-Info: UTNaV3rxV5bwYgGpkjLnLV6xr8KH0+DXX8UnygGzRZWzoMz2brh64jvA73RSaeJe3OkDLHiKphG0RHAE3CtrDtnLxbkYlh29gCj++GRaVnDYPGrmBtO4by14UtbtyKQw2pYwhE8agbt9Ue1bsnXSzuAckaGmxlUJ7QXnG+XapaGY/kzWmhAbyVELD7lQOAPVn3JoRKNWY9kS2KMTKk+d+y7JzQWPXMScexZQZw+XllvLHGuez5NhiBXY5XQ3UFOxa2jOQNB3ebR/HyLl73eVQHZFPJea8PQJWTgkL77fBsKzNhLjcGYerxN5uis15+maEWnI4x/coyfBDnf+VTtFZrsqqXv0cVEYWVketRglYAKmy9e04mgTDS6OzxzTULc20LkoMjj1P/CTj4ei2ErMutfxZ1dVpdx/J63nhWIC39yuFg/8mCxrPPO4r1GJCwL4NQ5AR/MbWnlYTmftfQvqnJsSzU9uXker+PzPy2IGQwUradIUSwIqYWCrs5aO7goMl92mfGwRzJWxTW9qZlHOCDQZAOTipCZodbnaotiyzm1NjmpEnwmFIYu/vVnPlvGGWBxnB14C67tYFgoLW8/YknBDrdd8JgYrEEOUjPefnQYmukJHjeev7QPi9N8HwzjhsS6Y/sq3OBFSSQWvv8xOFJ1yIdbKZyt69jTYOePK8uZnooFvYAFc6k7qb6kTinkvlEzAWINu67PQ45Rv2EEW6+Qrq8dqi2MjsEsj7QVaU6a91HYNq8aRn4n4ZoS5REA98bRN8rPRcPhx3t5wE8wmg7sXXOJqio/21RAWpn4t26t269QPkPGFmTdGQ9bqBBfZQI0YXD1h40Yik3Tc6YXQg+1aPS+tr9iWV8gz0KCpal2/k2l49ernOmXkmgqE5NLg/IGuqC/RSJvbRqqFAfIrH8VPFgYl/8TW91SZFNHERhzmuZ2++SlQrjyRaj2AR2gihXFc4xBC7AzW8OE+NR7XI+z+IxTh0b6k6Nbhif/TXY4FZbSgf2PGcfrJPaJkdZZBIjatISe1Pm1K2DpswHN8qNnALNK9Lrj81fDROd2UJ8m5sJXir6rBhNFjwrZZ1tDXGay1/rUM1GchnappefL3EhAaJ1ufbzwNrxFrkmX3/AmRDBoo0vjGgfI1foHk/LpC91YfD+25m1+t0syCCoi9FpxPdvJ9rkLCImCsCPht68sQeCu8baBZiy6AI5wpy16E5EohVwF0kRcZIYE7btqxDEBbj9QkD3lMt3ZUSSF4xGLEQMmRjaklC6lMUmMPYBaUgSoJSoBlxKT2J/vVDfe1/En8ituqLfE+N6yJjXV1wxvt/BaTveVsP0+Co9c2PaYXP6zd6KH6nlSjlMGKrQjWrNJ7X6em0AWr5ELpEsac69xpHdN65JAada34s43zrU1k X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BYAPR10MB3366.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(7416014)(366016)(1800799024);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: gVsJKjh7Oy6wJ+8VJpbBBJcV6dQ/x+c8oZoLyAoBc0NHI7MmWwucj8DvnvmJmfeY/pmlI5c4W7SIgElPFOWths5cX+j/uQOUL/1K1MrNsvmgRJPf55nXR9Ro5hxfMhAm9FiIetYaMAmAwgMlyywKNZVz826O6uLtUgRxeQZ3pQBmuYAx3Txt9yo2s7F8ErztKK9h+JM3zAnIpSZKqhvSWritnX190w4uYA1xEtsKMIL1zrSJbA9UZBgQ8WiNsSSR3oObRy8WVgf7rIcqJPxXU9ZsxE9udVoDNorwYZnsI3y5gfgExfPujEeO+bwN0PgnpDQwWR1I2p5eM9DuIG6aDSPD/yXKruoPuIs3Nsr8TbBVL8vHjyuOojoILX1XZW/0zT79a05VFp/GX8Fb7jKMngugvjMGD/HvLOcOcbYVq7fBoO84pKIZXVqQiJl1SVrqBbiQ7zGWeOg445K7QEg3OjBewrYW7ni5XB2i8TvryHPqQF1YzIkAMgIrUfpkN9DtvfCdIVwD+c89Q/9gz29g9a824HPkE1f5XlO0rlDjA/WO0F4h20c78kFCehqTC+1+WQ50166JYBoSOrQXYpM6YX34cUHrLireJtLIK8iMCGio9fSs+WKZ9KEheG8FIMv6AZshHs9UmGwc9qiFeSpWHZnX5zAeK95HlYfC1xDlPESgTwKLYCDXbDAC1vsGAFUS1a6sr4jKn1norB9pLGl3xPOBPYCPTXuGCQEOFeBftph22H0v1Rr91QZNNyfdvjQeJvC42ocBXTb3Ig8pnxiH0/1t9+UtdtBxilhbqD5PSiPohPSi4mkX4M3636YGDjpDOLFf74H46+TWxrhpzdRrRabzZLwjSVJDjeJDjyWUZQ2BrVtQTMSRQCVv5CFCRQstCR2AAGNimQ66n2cGTlxiDcBR3OWAabo7IRmjwNjy9C/hS2r4sJ8wYU5C9t4/oqgnuD2bw8FogkHOMthTwMt284Li96mOCR+pM/dYNxaYIPZtfrVODjSMwGOGFKKqzEDLm3Jf5NEColiTpFj+h1RtPP9+F0dvQh9ULaVkvx8TYdGeE0hB7vtI5N8l4p5X6nNQgO3mU4d8rKcVzvH/wXGzrP2gotoYrKCKieCVyaa2bVviewzekNj5R2f+qlzNqiU907KimOWh2KgbqQBRBARhfh2+QUGeuc1veSNYbuslXDlQnXuUr5oTYxn31PRTZiV8hDW35jbudEadRsHRqVb25BGXeheXfM6tBqyWV/rzx7xqsDwlxmh3qP0P6SuUQrHFnKZV6TwDOUXKYX1cpjINiGFuh9APSR7VoxgudJa3tNgXN2ZX4vsGlpRVCDG2Hfr7hvE4y5aNUrHpJdwJ3uI9TMEJXITcJrlyblt0FBg2nozAuFFoI6Xn+QlL/U3sPdCy/nhEnl36Eb4cwDa5yMfvjLbN5K7hSuL0q1eW6y1HNxFMez2fclDiTK9gPoDq1efh8Oc2pp0Aj83+XWeqtUNmV1fVd/v/oinwLQqqIMpnl/LiPC4sUeYCxhTR1YhsqHxoM3hCydqA6IlH2HUmFq3x0xehHxSOY/Ne2G+v6uxhiJlVsA0KQZmrrFJu+uqx4m6W0em8ahdcr0Od2bIBImnYcg== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: QGn+iZRZrI6ArBF5UPXDa8s+Ub759aBQYXh9aqt7Ei9JpTYJJGO4+FjbWOMOr8rIVP3HjQ/5NPn7kWp9C5fBGp4d46rZwW5GXidPptZ7C9nZeA/ngjw54Vev2pV5oLbm2rOtgaSPRA8tjuZ5thneyl/7UVEk3jtMmLvVJCOXCHopw946ps+waxvekMAo1O6EDY4uCI+PKfjMds55u5C4dH7T9aaQJnwNUyqpoP/pwuCjnzsoxVp4n1intFJQWunQDxzPCE6k3ayVWm/xIEHGNdSS9cHRMyh3YK6S45mTIYRRdUd/Ol+ezCx90jPtLfl7ZodGZ8e2zB5918EQn1Ysi7HdmPf9rHQocwNO0O9G5/mbby7wuIJNwP7WEk3cqfQGfEdrB1eU7IsJo351bUn2Pde8535rHyTUh+mW7LXSFrpLH67R0lpAuc6MlkbEahgE88h8//R8x5RTssNNiHF6qhu0/VxPt04a62Vd2e2ZvsjuCRv7fw8AjB23pt+3HYN4WstaHv/QWIf7AlCojoYYoTaaXvD4Q8g9eggupIZbPfGca535fXEBVE3ixX7qpj5VDbxVoSFHfPOz+x5jxVOIOe+VTNaCwAhSlIngSD2THvc= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 081c31c3-9ef9-447f-6f18-08dd42254661 X-MS-Exchange-CrossTenant-AuthSource: BYAPR10MB3366.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 Jan 2025 18:30:01.9229 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: KXnQZExOSlFc/F06n1yBcR3b2dr8BWWXxhq4AUiAb3tKWotf0vx7zp+Q/X2lHdZK6h3qlQZ4gOC7ynpdQoiEncXkseqkJhxhoXe7BhUesEo= X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH0PR10MB4407 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1057,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-01-31_06,2025-01-31_02,2024-11-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 adultscore=0 phishscore=0 spamscore=0 suspectscore=0 mlxscore=0 bulkscore=0 malwarescore=0 mlxlogscore=999 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2501170000 definitions=main-2501310139 X-Proofpoint-ORIG-GUID: mlFgOAIe2mdbnrIRYmRGJ6GLxpsXvmD4 X-Proofpoint-GUID: mlFgOAIe2mdbnrIRYmRGJ6GLxpsXvmD4 X-Rspamd-Queue-Id: A957740006 X-Stat-Signature: mqnxmyiu43k6i65i6nxph6xotdhp5ogk X-Rspamd-Server: rspam08 X-Rspam-User: X-HE-Tag: 1738348221-730411 X-HE-Meta: U2FsdGVkX18cwMkaRDZlhJCSpjv/CjcsdLDU8beZIEc78himU7mD85aDp91P+AqzihblAedvt23C+Ho9KQlOmO29ZAyWX7lL1JT35HZ8fdw7TEHc9vOhhIIrZkF+natQAB8rZVOQLwKjSDmsLqPeoS6LRXKrLUupijKBAditPXjF6mcoA89AeQn4oBBVliemBnn1zDvXVK2mZEf6JCChmXrN2Eh9nyPXhQ9yusvkT+eM23E3z79/ll74FTdoicuOiUhbNFrW4XYtP60ogFhXOZRGKkEscTh2LG3tLNHP79b2519g3d+CRloagsbzzCmRYv+c8q6DgM16kSd+rb9rNl51myJ03Sv4QY7za6FrQDrKVdmO3NyFDo8PwOMb9ZFueOVHb2fdaUDGpRa4hR8nGuv3mLjXKN2jBPPVgg0SDxNXNS/Ejc9CZk+UTFx85oxgIaQqEY//1hm1Gyj1IISmAiXlYMP7KYfSjXM/TXVXIfcohI2fWMecmleJXakQ9Hg+tn1O8gRI/4C3bpae8tNREqwIn6BFWUCdmQo4BPQOoaMadcpiP7AgdSf9dkE6uFQ4evrFz/CrRKY9ft6zhRqwwK1CbQ5Kmrw//UZA7F1qTKeyb4aMYsL8fhSX8t2N26udhAQqcQNTY1wNEcICoCDAByCJ+IPAEjzuRVhY26CRDGTi6teyJ1lFOQFcT5SRTyeSnOc00hyXzHpejJqtVDE/dv0emtN/HLDXEjCBnEfvoLxz4w5wQRaVS9oDctV5phm58Gm0ARNRgjrX5xBBSTNAih3LdyWhUs2BUiDzRDt9D0HqdDOvuYSCnWxNnpA6a3KJmU/Keg0irmV3MztcG6a4pnW12JjEobIQB1vv7RbpmN9JHAWCs/x7JOEIkXRUDEFZvQuKM22GV5yyYqLdcLzvxc5m2lK/dIIZqAGq3Qitx7ZpPj76IOe8LSa7VGsqhcTGMXOCiAYoOdodSkpvoyh Gdrry51o haAFmf10TA+hOzBlR5R65DF7jk+jLS8ERPcL4+4UYUA2Z34f1QnUVuDJHrQ93F4ndSZq4aKGaIWu6HDc8L6sqyy4xB7kBt3bsetwFrYaEuAX3YI5nuqB2NSH17vqoyzWbxxPXMfiGAupUqaCsv/3L4pFo0cJ5OkweJHATn+COYwEBH5qLWsBvQnxTxmdxkc05QGifZ405N3avLyky2s9g10TbxSOleHU9y2hsVq8jkD1EftOpFo4OscXIsm/LUlEjLz+gTOwWcB3IeWJxhxG4Ag4cXm2aI7wFH9N8jOiRuRk/+VOhQ2KrqZzEz87kV4uYr+qUkzAZcu65tFuuLRvBkFvFLag4fs5uty2TMOJL042n3jWps6sxzl1g/1QUmfdps0dpc4jfGhrUXoUMcIHTqSQmp/AwXC2fnVZHn5dSUZ7mb2oUIAoL984/XZBWjMX+bbaeP+LELI6XrgMiflw3aeV35/ukFWC4nZwUCIRIY9SvEVph/POrXCr5ygiPUSSQ/hgeGSukcP/TB2h8nCrujq7PCoBTTbp+Qzl0ydRIYSiSFhgcQIO5xDTLa33QOKXejl0cKIoVa3nWIt5/TjIBSKlHIIXUrVZJ9/nLanjEU9jZRdBcPTfx/eqSVs2DbyFRUVSafYPUxnJ7Y5+pvC6M0m8Y55o+QMXLHBFtGSHbiHTIkwdvRz+8MWCdJQ== 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: in the fb_defio video driver, page dirty state is used to determine when frame buffer pages have been changed, allowing for batched, deferred I/O to be performed for efficiency. This implementation had only one means of doing so effectively - the use of the folio_mkclean() function. However, this use of the function is inappropriate, as the fb_defio implementation allocates kernel memory to back the framebuffer, and then is forced to specified page->index, mapping fields in order to permit the folio_mkclean() rmap traversal to proceed correctly. It is not correct to specify these fields on kernel-allocated memory, and moreover since these are not folios, page->index, mapping are deprecated fields, soon to be removed. We therefore need to provide a means by which we can correctly traverse the reverse mapping and write-protect mappings for a page backing an address_space page cache object at a given offset. This patch provides this - mapping_wrprotect_page() allows for this operation to be performed for a specified address_space, offset and page, without requiring a folio nor, of course, an inappropriate use of page->index, mapping. With this provided, we can subequently adjust the fb_defio implementation to make use of this function and avoid incorrect invocation of folio_mkclean() and more importantly, incorrect manipulation of page->index, mapping fields. Signed-off-by: Lorenzo Stoakes --- include/linux/rmap.h | 3 ++ mm/rmap.c | 73 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 76 insertions(+) diff --git a/include/linux/rmap.h b/include/linux/rmap.h index 683a04088f3f..0bf5f64884df 100644 --- a/include/linux/rmap.h +++ b/include/linux/rmap.h @@ -739,6 +739,9 @@ unsigned long page_address_in_vma(const struct folio *folio, */ int folio_mkclean(struct folio *); +int mapping_wrprotect_page(struct address_space *mapping, pgoff_t pgoff, + unsigned long nr_pages, struct page *page); + int pfn_mkclean_range(unsigned long pfn, unsigned long nr_pages, pgoff_t pgoff, struct vm_area_struct *vma); diff --git a/mm/rmap.c b/mm/rmap.c index a2ff20c2eccd..bb5a42d95c48 100644 --- a/mm/rmap.c +++ b/mm/rmap.c @@ -1127,6 +1127,79 @@ int folio_mkclean(struct folio *folio) } EXPORT_SYMBOL_GPL(folio_mkclean); +struct wrprotect_file_state { + int cleaned; + pgoff_t pgoff; + unsigned long pfn; + unsigned long nr_pages; +}; + +static bool mapping_wrprotect_page_one(struct folio *folio, + struct vm_area_struct *vma, unsigned long address, void *arg) +{ + struct wrprotect_file_state *state = (struct wrprotect_file_state *)arg; + struct page_vma_mapped_walk pvmw = { + .pfn = state->pfn, + .nr_pages = state->nr_pages, + .pgoff = state->pgoff, + .vma = vma, + .address = address, + .flags = PVMW_SYNC, + }; + + state->cleaned += page_vma_mkclean_one(&pvmw); + + return true; +} + +static void __rmap_walk_file(struct folio *folio, struct address_space *mapping, + pgoff_t pgoff_start, unsigned long nr_pages, + struct rmap_walk_control *rwc, bool locked); + +/** + * mapping_wrprotect_page() - Write protect all mappings of this page. + * + * @mapping: The mapping whose reverse mapping should be traversed. + * @pgoff: The page offset at which @page is mapped within @mapping. + * @nr_pages: The number of physically contiguous base pages spanned. + * @page: The page mapped in @mapping at @pgoff. + * + * Traverses the reverse mapping, finding all VMAs which contain a shared + * mapping of the single @page in @mapping at offset @pgoff and write-protecting + * the mappings. + * + * The page does not have to be a folio, but rather can be a kernel allocation + * that is mapped into userland. We therefore do not require that the page maps + * to a folio with a valid mapping or index field, rather these are specified in + * @mapping and @pgoff. + * + * Return: the number of write-protected PTEs, or an error. + */ +int mapping_wrprotect_page(struct address_space *mapping, pgoff_t pgoff, + unsigned long nr_pages, struct page *page) +{ + struct wrprotect_file_state state = { + .cleaned = 0, + .pgoff = pgoff, + .pfn = page_to_pfn(page), + .nr_pages = nr_pages, + }; + struct rmap_walk_control rwc = { + .arg = (void *)&state, + .rmap_one = mapping_wrprotect_page_one, + .invalid_vma = invalid_mkclean_vma, + }; + + if (!mapping) + return 0; + + __rmap_walk_file(/* folio = */NULL, mapping, pgoff, nr_pages, &rwc, + /* locked = */false); + + return state.cleaned; +} +EXPORT_SYMBOL_GPL(mapping_wrprotect_page); + /** * pfn_mkclean_range - Cleans the PTEs (including PMDs) mapped with range of * [@pfn, @pfn + @nr_pages) at the specific offset (@pgoff) From patchwork Fri Jan 31 18:28:58 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lorenzo Stoakes X-Patchwork-Id: 13955658 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 DD54AC02194 for ; Fri, 31 Jan 2025 18:30:33 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 6D2D9280004; Fri, 31 Jan 2025 13:30:33 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 65C84280001; Fri, 31 Jan 2025 13:30:33 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 439F4280004; Fri, 31 Jan 2025 13:30:33 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0013.hostedemail.com [216.40.44.13]) by kanga.kvack.org (Postfix) with ESMTP id 1B91F280001 for ; Fri, 31 Jan 2025 13:30:33 -0500 (EST) Received: from smtpin12.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id 728D5140FCB for ; Fri, 31 Jan 2025 18:30:32 +0000 (UTC) X-FDA: 83068587504.12.DDDBAF3 Received: from mx0a-00069f02.pphosted.com (mx0a-00069f02.pphosted.com [205.220.165.32]) by imf13.hostedemail.com (Postfix) with ESMTP id 1283E20022 for ; Fri, 31 Jan 2025 18:30:28 +0000 (UTC) Authentication-Results: imf13.hostedemail.com; dkim=pass header.d=oracle.com header.s=corp-2023-11-20 header.b=OSPatDnR; dkim=pass header.d=oracle.onmicrosoft.com header.s=selector2-oracle-onmicrosoft-com header.b=qmW3qbaH; spf=pass (imf13.hostedemail.com: domain of lorenzo.stoakes@oracle.com designates 205.220.165.32 as permitted sender) smtp.mailfrom=lorenzo.stoakes@oracle.com; dmarc=pass (policy=reject) header.from=oracle.com; arc=pass ("microsoft.com:s=arcselector10001:i=1") ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1738348229; 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:in-reply-to:references:references:dkim-signature; bh=APK9TXKHuRez9Uo798KK+h4eWqVx6akEX3HBP/qF1nI=; b=k61PUU34bjwl6FTTSxQeZUPKRdGAUBFA7jX2oJ5Rzc1L1/m3UDf1NU2fnozllch/xS1T5q nuhDKOXcV0QMAPO5Iks/RtgoXG4hsAHYnUc9rSVD2d7H1rW92tfm5L6jtlzwf1ZUDWUZaY 66VYWGf9em7Nkv55RA3eqs1/tZWfzdM= ARC-Authentication-Results: i=2; imf13.hostedemail.com; dkim=pass header.d=oracle.com header.s=corp-2023-11-20 header.b=OSPatDnR; dkim=pass header.d=oracle.onmicrosoft.com header.s=selector2-oracle-onmicrosoft-com header.b=qmW3qbaH; spf=pass (imf13.hostedemail.com: domain of lorenzo.stoakes@oracle.com designates 205.220.165.32 as permitted sender) smtp.mailfrom=lorenzo.stoakes@oracle.com; dmarc=pass (policy=reject) header.from=oracle.com; arc=pass ("microsoft.com:s=arcselector10001:i=1") ARC-Seal: i=2; s=arc-20220608; d=hostedemail.com; t=1738348229; a=rsa-sha256; cv=pass; b=YTdhsK93Y19uvqRXbf1BqSfGg4loQpX5DiBCxC+XywNqc0D9TDYwyMPUlix1IADk/bdtaf vQldnEes7fiJKym8o9/WMIKU4OT+EgUDuRKouRG3AEihO2Bkpi6uGb4F9Zq5Bs9ZopdgA2 hPNADgVpPL9lStbeHxybYiRyCML7lxs= Received: from pps.filterd (m0246629.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 50VI7SiQ026914; Fri, 31 Jan 2025 18:30:09 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s= corp-2023-11-20; bh=APK9TXKHuRez9Uo798KK+h4eWqVx6akEX3HBP/qF1nI=; b= OSPatDnRo9s1dyPc0cYfaviyKa1LuAES/SdhoQY2bvLghQZaRn0+67L3PNZC/u8b NxWn6/kwwlC3JyvXW30viiJEcn12Mm6CMW4HqUWubQVrJ6KOxiYDETNPZ4Dm6zQD dpQHyeUt2dINMQIBT0qEHzP/Ccz7kRB4R3iuJPHzY/qLMNei3dwVdig1AkIrU11d ZoLxj2DCTV0XnqbQBonnmawvQfRDPhyqzpQKPVIax5SrX/TJxYbIDyX9UX2fdvMq 7O8Ns+sU9H/Hsvjb3utfIjTKsNKXMFDBw0sVHSErhcHDrxYzS+/NS7HCzNMorXgU MkOT2RCYsAa6YPlglvQJkQ== Received: from iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta03.appoci.oracle.com [130.35.103.27]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 44h3gh018b-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Fri, 31 Jan 2025 18:30:08 +0000 (GMT) Received: from pps.filterd (iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 50VGeuom004104; Fri, 31 Jan 2025 18:30:07 GMT Received: from nam11-co1-obe.outbound.protection.outlook.com (mail-co1nam11lp2172.outbound.protection.outlook.com [104.47.56.172]) by iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 44gfe59ceq-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Fri, 31 Jan 2025 18:30:07 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=YGR97mi8KHZfdNmZABuDSYZ8XjBrF5BWxnUEdUIxwRoZ6vQcUVw8cVlfzWAkQvg0Ub5h/95csS0os5vy1dcEs261cIrwGo3ozTG/Wea9XifpW+UDfg8SLoMZiyDF+XmOltJGCfpDZZT/x/M1qYvT71/5WeMv6KiTHjA9zqhxNcJfI92aAnAZH8DECt9K3azXxJ4DJqoCGIAdimQbZQutLrISLxQWcJLxfXvluOdUNmp44+y8N4fN337uXHV2M6tX4XLAp+p4jKbKy6nxS5qDrmkbOSk5w3FSXspmOoHDxiJ1FCkxTFl+x7ePr9iMU/qZ58UJW8wsoZczLkrRbITAqQ== 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=APK9TXKHuRez9Uo798KK+h4eWqVx6akEX3HBP/qF1nI=; b=hYY9Z9emlk1fjl65+nnLtTY5kkcst7/j2PrazQ/Rc9FkBVmi8Ez2eTS8QHPApYI62ArtWv1ENqbd14705H+zOh8BKShyDB2JyRMcsDl0oRzHMaCRt2Nre6L6sNJPbI1QUDw6tJrVtONnVMJihd8ZediRJ0mKZHvTWmHqdnLxWmi7M2+3BeOVcjD8IQHOWOSacro/bJcsDiIsDC7gpUaM07p92l+D8OLonjFdk6Hm+5friJ07uEtUKBBI2Q7WRb8iMI7h58NFCnMffh00tq07gycGTfu5yxlo//o8q5WMfCucNohOjvo69ZxewTfwU8w2s1PInAXjien85nClx3Uf3A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com; dkim=pass header.d=oracle.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=APK9TXKHuRez9Uo798KK+h4eWqVx6akEX3HBP/qF1nI=; b=qmW3qbaHfnzBjKUJGAmLZ2RUpO/Ob6vIu3aK3Q9ALwnzrGhPmiQ6lXwRnWy+Eg6zYUCilrLGoJde9rEu6F62FuP6utiE6VOYw4z92pVEjsBkTWYcyKeI+tZcmKkIIESc1F6lzKJ1xC9xgJg5/ucjMf60kyvGukOsm/rnYToO024= Received: from BYAPR10MB3366.namprd10.prod.outlook.com (2603:10b6:a03:14f::25) by PH0PR10MB4407.namprd10.prod.outlook.com (2603:10b6:510:31::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8398.20; Fri, 31 Jan 2025 18:30:04 +0000 Received: from BYAPR10MB3366.namprd10.prod.outlook.com ([fe80::baf2:dff1:d471:1c9]) by BYAPR10MB3366.namprd10.prod.outlook.com ([fe80::baf2:dff1:d471:1c9%6]) with mapi id 15.20.8398.020; Fri, 31 Jan 2025 18:30:04 +0000 From: Lorenzo Stoakes To: Andrew Morton Cc: Jaya Kumar , Simona Vetter , Helge Deller , linux-fbdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, Matthew Wilcox , David Hildenbrand , Kajtar Zsolt , Maira Canal Subject: [PATCH 3/3] fb_defio: do not use deprecated page->mapping, index fields Date: Fri, 31 Jan 2025 18:28:58 +0000 Message-ID: <3542c5bb74d2487cf45d1d02ee5e73a05c4d279a.1738347308.git.lorenzo.stoakes@oracle.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: References: X-ClientProxiedBy: LO4P123CA0151.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:188::12) To BYAPR10MB3366.namprd10.prod.outlook.com (2603:10b6:a03:14f::25) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BYAPR10MB3366:EE_|PH0PR10MB4407:EE_ X-MS-Office365-Filtering-Correlation-Id: b0668f92-48bd-435b-4b67-08dd42254817 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|366016|1800799024; X-Microsoft-Antispam-Message-Info: rsG9tLlraMra1fOSdJk/zz6xaXPNxnCErH0ACJwZkkbVRXmC+XDIF20qZXi3ELIM6mXO+bUEf/aajo+JvvNZMESE9ZCSy0OTnEcTnK/lLXDRsadZPF47VmsnMD846qZMHa3wU+o0bGkz95EAAIcjfW2kEYMQMiQtA/DkwVaIIzIPCwjqhkWw1MXXB32jp+xw7iPUV4EdnjJPOtimw//kyayHgOZtdGn2VvZUF2rFSYgvAwrSB8mpBx99cP/TXJpdA6JpdxFZ87qoEDuxTvC6zfSB1htwrpKO73eyIp1osEjre4jK/mNP6eYqbCzEAI+/VbI7NF1puvhRxuldMxNckIXj4nTc9xw3SeZvav8kR1qPnVD4yyYO4XUWfjz+AMjrzHWofrXwmKl+32drKvAUeo/csbYBumMiP/CkD8W95k2/jWZp1epbjyNKZ8JNzW+E+SHgdlTyL6U30sUikdooFYhYLAe7qIw3EY+XoVCSy+zwo9B2UJp4qDuMXTKG8B6v+7/0i/v9HcJ9jGHrsZSkNF4UIGFRAj0OIn08tR+hNJaqAg+99KaPklN3rXfZs2kuLvcwJJWWHlkiPf0qTuWRJ+DSP4Jl/SSF1JzLXmIGZcUMfFraPuhmGKVCBWYEk6i6s15sf+99My7rZK0M484YzMROKsK18GZ/60k/gr3IIp5S6xX3Y58PlIl4P+v4EqkH6K/UNsjp9eJ2ESfXc/LmsfhoCeEXTqq15RK+4PJ/khdo4Tu6VxhyPkJiUwsUdBsBTe04Iy+QN5mi+L9MbudO8tm/bV5yAV3CohKeOO+nnGVk5K/NjQ+Be+oa+nK8+7ZKpnIgaJXYoE7OhgaPcITLT/8G4u5yeIcC2DKQQhd/e3TLeZCat5JUMEqJcA1itKowlLBMn6pvelh4LweHnTH9YmoAWCwV40t/G+s40vbBxYWcTx2FmpURDmVlX5rExdrM8soMkm1MAvZ/QJf0UsutgemOcWUIgSbeRtVI+mMjJrb3npmV89hBBf7MOIqP4TBdsGDthhB1wY3ulVJmi5D8VdERr+6xbHAT1AStLiDQGVFdw0nzrjrLtUDDzIQnY58z+jltipjO8yZzCXxvLg25JH4WwHCFyi9jyed9QiIpVP/gq7JhGKv/ebMrwQl/41HcjGl9SvZ34yMklk8PnZHU/yU4Rm1T5BYvS8ZnYvPBNHktZRXtNEt6FsRXR18G7OQLj8NK5afwjufKdaB63uGBZmCKxngJg1CCoyWPwZRTZcm7cUkJrWHCExnUDlTfkmJnCRBflMu7d6KzS3uyQE7xUVvxdwP/mIXX+XSixxKsKBCV2wiKAk6GdHdSddvDYnWE10HJVwHBKqxd8JvByN4yUNyKCS4waw8dDHitC9A6szA/gPoz6ZhUUh7B89zW4YA0 X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BYAPR10MB3366.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(7416014)(366016)(1800799024);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: StAIoSLe1C1AS5CzvhW6N2BYlP7IyLADJ3wgIIaBQ3EbbCxql3/mpzwgQVqEUtW4WQAXMYZp+LkUI+OcvyR+AKtqm0WIs9ZtShpTlN1tS+40F9iXxf1gFZgZdJ/qZ1atJWHS4WH98/MnlE+CvBcHlHmykQMzMHIZunW9tnJiOSW7hdsWl5oFpo1xjJM+fIM37vjfIyEDBiZwETNWEdNSfN8uIT9+uZM1ijjEuX8uq74Mw9kUpS1ISKuRqXpm0Q8Jtr8t2i7BXkpfiaejSOTeKr4RKI+knCLWNRQ9oMfa+eBzxO6LNg6+n8SYoHEbfGERuDsD9c8PmOhGPus/k9tZ9Dm8XY3V93VdbTjCDznlGPq8mFXNXfIOuNcyn6AnjH1wJdZJDgW48uPTx2nRtamg02igSHltnn+gSZ1+rhD3ZP3zjeT2kVvlXXZ4pj/usKhE9gto22qFnyrNyoy/k1NJkqlljdE55xhhMzt8smf7U0TIAcGGZBDpRmjg38TZBRMcYTOZWor4AqMTA55NdaDqiFeGLXQ2mg8kEVLtuszadZPcFTRQ6f14+ru3L8MNr+WaJjhFLfi+pKcyvXXSafGhNhQBWKlHpieyHL5sFP/BQykqB590ObaqxsSZiJHzHGTMzPvfBNijTA8fVe77kvA/h+XIIX8LRBRwdmbg82KVcXv51QeuJ7FX+RMUCbkMYfFb2otVIJu70s8JVeueJhctIDG7UoIbBQ9RFVuxhqMWLHqD+JZK8TR/qcblS9fxhqU6G2P0rtt/CS7RbyKudXMEzE+NqNVs9FbG64aijy0FG3iZYGfKJc1KR9AjobldYyfiR5O0iXlDuMCB8ZcpkkT8/0teD//iP2fN0bVBkU8KcO1Fr9gzaHWyLnB13F/DS8YlGOOsl197beDgJoVZACXpwpmVJ1LFYAobTfZxw4Mv8POTA32JJ7FOLHDNyAgLadhYjh6CR/rPrvmS6nuJHeQhFZ3EnmZWVin8FqAo+fh4QucgeNyqqfG7gl+EaqHAk/+43ZLudtIXUcTWGi8aANLErtpD88X1seLAuXzZumm9v3Ge/ZHXEFBSarujtI1xlSP+8fjJv2k1eTIYIlaVAkTTHbTAbF4DH+VddQat8fjckY2taHDIDMo8yrUVN+MiFeaKyHA95e+HjKbVN8LxTdySq0MrdYAaGrGaWnT1LY3GOXc8/q2MhgR/Pvm3Ov8JxwIImqpmjd0kCI2E9x2ws0u/ItgSiUjAi+H9SYOlP7ABpZ6r6LZEAhLPnR8QQvcjM+A8KZRTPNSzrbY7HIZyax87uGLbuPydtARHMFvOMoFbXLjs34tEYMEqF1nAxUGhh02noA6vbUMxoTScobY7CemmxcCVRW9Y+DDWFl+wggQwrdtwhNnA+CT3HwMNmW/uUj+eAEPbZH1MjD2pbpn8ws0VLNdDzeRMRY8GBCDd6UyZwdidWUAFt6d43c47Q+diRNSmMpTTnDLukGJJfZLhJZuKvgsuqpDpJqM5sZoaKVjNWwuP4DD0vhwiwhH3tk0UuKDBxrLswX0+cBY/yGaERrZ1j9QyLBkwWsCtgBMzqUqjJRbPc3cyXiCrzzotKRnDd6camlzKxsYoq98LysRFkfW3Kg== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: BqkFdtTZBNp5KNNdMPsamRRgYfPBJ7nFWCfnirSvyJn7g/qa5uuQUcUqSLbJyFwrJT4+o1AlQxDtHG1zrL8KRUjZrDTrlN/HSkDSLzv1E+CXFvygqPYy24uy5qujG0gAsdaeYiqRsW8Tvg9+ieJuSNobNrKM5LzoMagWruKxt7In/3UWIocgPGvlFNrlchG5iTdrcObQerwwXUzOwTMOigjVM2al1EE3Xujv+cCbXVOA2ILK92CESmvBDtan4e6pEEAAwzrPcFpyNOKPsogfz+P+C0HwBCPj7Oxn6IMAYeK/tKsoJjLMv/64ClDw80rwtcWwC/eDnP7cxiP/RqXIJaUoERVt6si4uHvYJXfTDERPRblbXiWeuctB35AW8OKXEFx0sCoX50Q34SQs94SaimtyENgQ6b3HV7wY0ATAFtP8ymVdbPwFAJU120DQUmgnDnaL+CdRWUK2khFvgzuDStnhiPXRrICOiTEHe3oKZo9wzgtlo8XucMG7Of85kPggF+9meAnYtDmcU18lDM11CwVbckA1n3PBkc/iZOn9qkalpSsSFKkw32yTLYbzhacycd2KnW2z9YiaIW2Hmlq9hZZmzTz95mjT8NMgHMb7V6U= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: b0668f92-48bd-435b-4b67-08dd42254817 X-MS-Exchange-CrossTenant-AuthSource: BYAPR10MB3366.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 Jan 2025 18:30:04.8050 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 3vfn4+cHAhHrTO0ecdLEajCSYELviMv2yYmFPN3OPBuISEsojEHgILhRdP7ysjQp6q1IvU249a3Rzrb/pQhpgU6gw8YwBPcoKrW67ziAieM= X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH0PR10MB4407 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1057,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-01-31_06,2025-01-31_02,2024-11-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 adultscore=0 malwarescore=0 spamscore=0 phishscore=0 suspectscore=0 mlxscore=0 mlxlogscore=999 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2501170000 definitions=main-2501310139 X-Proofpoint-ORIG-GUID: 6gNRA5KC0du6BI6IYLCuvkP_aH-qWYUj X-Proofpoint-GUID: 6gNRA5KC0du6BI6IYLCuvkP_aH-qWYUj X-Rspamd-Queue-Id: 1283E20022 X-Stat-Signature: sngjin3cwi8pfgp8f6coujokycsh91zg X-Rspamd-Server: rspam08 X-Rspam-User: X-HE-Tag: 1738348228-457385 X-HE-Meta: U2FsdGVkX1+iH49gjoIBCKaorlxY111vs1oEtI6FpEJjIjO2+NAV7Py6zhtnDEPtdwmXSQiEyriEiEHYkFrD/lEQnVfZTd1tuZuI6b5Ex4yoFQ2rr68Y7bJIn0CFuK7Jp2TZQpaAr/exQLNd6pWczmVWZFWttRbCHul1Imw3krtM2f2/qKfbU/E0+bfqMvhm95N4korJm6yS76J9BS2ZuiZUffu93arC+pG9fMaiTGMcOcpirzcQ9fEfR78ms6sMZlztEu5hYUofgvTpVCb2kqIRuw1ey4eNJQzxUIIoUTFvlNM1gwKxEewrDQHqxK9HnUE1V28vPyVUZgIRikaGNCfIQfq3ISt4X99/dsu06qpWxbdwC6z/CbXogZUc6wd0SJtISkrlbolU7cnolrr8hOp4t9e+fgDkEDSdE3VWgGK9862r59YHJyWbFNEPEAC98dK3wvhNDvQ7QM6TKVpH3FAOgtZqlXsg1IGPw6OwSGdIjeXiudXvTLNJH38onkpYTNxCBXNVo2pnimuhhDWlR/Lq8uiii5NFlQ98AFTZNzceyQDr8tyx6XsXQURnO1GAk9E2ow+YRtZDZAUj8dZGiu+JqmEhCgPgYwdMe1ATWuFMyKSKh0fYwKu6d1i6MyIZRphM1xqmyrNYbe/0X1IFkXHOSOmLZGp0VEe8L8rFhTheTlUX5LFIfwumajbu68z+rUMowZrmrmUqwVoHGdbYNLclcBb7CK952hKE2kmg2ph5kl8kV1VCfMl2s7MdD8Rfdk/OH1r5pIPlaapv590qZRQStNlG5UiOz4Dcw5mAcoPvY36g5RH4Xk0KuQAk5hiZr16jDZ7KQe/HIjIjPXnPksWWsfR11H8Mact8NtbVdeqTOBeLZwfv07O92GEVp7FuZZzORQb5K3BVYpjlF9A+vAmj79zslbn6K425EL3ciEEAEJrao6NAM8UzqHYBZN1AUykLe1hjVutkg5iXrkn 1NITQpJl mqGWuKKoe9dYUJtYATeHT2fLwzzGqfu/WgUm7Aj2nBHMenPiaXJbaT6vamylNdpgU/eCCl6bs8V6xjY6PC0b2mQfK0cF9Afvy3otgS+bk1KSuZMfMAMiNQXyQ7vk0EWBeTV9fdWMRdmUgCvAXo+JWPphjBfm7z77KOcszUbCq3Z3CjTvHsnBC4UDIQ5PMWFijm4YFSBZvaRbUjMs9Zxj/geRbXJWY6jBy6CGuv8rAhn3kJ6dt8Q09ULNVvGC0rUlh3NnefAX2/9Bam9Bmvx+dyCe37hwFMAPKcKDi0dkXlA3aPAj2vkHSB7jPMA7VQY0CAt1V19lkRYpkP8W9AKEYi/86mntAYuMw1Cmoco3B1df1whD2klhZPCeiiL5YX3N3XKUgmI9ZC7zwoRvhUYCaXVyrFddQCxmsTJIWjstIm+rvZ7c/mDovuob58X4ack1PAXhD5y0Pf5lJmn3EB+JBOekTW255hU2NMyml51Meq7HXXa/H0qXW87nfy80TWNVKAInM1vtLYyjIoQm90uLbvENVRxn9f/0QQBehAIEdlxqUq72x0OB10TrXZVlk0NYQpZO0mohMVvpmIm6wafd6+AZGpH6JjRtu/9wcbKN5dq7N7l+/NtoJ6oQK9xfaLDdO3+EtLvrgF/D5VVpF1a3s+tMojTlOWhXfEg8P+YQfPOTYiHz0zJH+GSyvfIHy/FK+GZ2kKxEiryorv3zTDv9bTSnosROlULP7quj7LglJhWEja6AlknFPRcV0FQ== 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: With the introduction of mapping_wrprotect_page() there is no need to use folio_mkclean() in order to write-protect mappings of frame buffer pages, and therefore no need to inappropriately set kernel-allocated page->index, mapping fields to permit this operation. Instead, store the pointer to the page cache object for the mapped driver in the fb_deferred_io object, and use the already stored page offset from the pageref object to look up mappings in order to write-protect them. This is justified, as for the page objects to store a mapping pointer at the point of assignment of pages, they must all reference the same underlying address_space object. Since the life time of the pagerefs is also the lifetime of the fb_deferred_io object, storing the pointer here makes snese. This eliminates the need for all of the logic around setting and maintaining page->index,mapping which we remove. This eliminates the use of folio_mkclean() entirely but otherwise should have no functional change. Signed-off-by: Lorenzo Stoakes Tested-by: Kajtar Zsolt Signed-off-by: Lorenzo Stoakes Reported-by: kernel test robot Acked-by: Thomas Zimmermann --- drivers/video/fbdev/core/fb_defio.c | 38 +++++++++-------------------- include/linux/fb.h | 1 + 2 files changed, 12 insertions(+), 27 deletions(-) diff --git a/drivers/video/fbdev/core/fb_defio.c b/drivers/video/fbdev/core/fb_defio.c index 65363df8e81b..b9bab27a8c0f 100644 --- a/drivers/video/fbdev/core/fb_defio.c +++ b/drivers/video/fbdev/core/fb_defio.c @@ -69,14 +69,6 @@ static struct fb_deferred_io_pageref *fb_deferred_io_pageref_lookup(struct fb_in return pageref; } -static void fb_deferred_io_pageref_clear(struct fb_deferred_io_pageref *pageref) -{ - struct page *page = pageref->page; - - if (page) - page->mapping = NULL; -} - static struct fb_deferred_io_pageref *fb_deferred_io_pageref_get(struct fb_info *info, unsigned long offset, struct page *page) @@ -140,13 +132,10 @@ static vm_fault_t fb_deferred_io_fault(struct vm_fault *vmf) if (!page) return VM_FAULT_SIGBUS; - if (vmf->vma->vm_file) - page->mapping = vmf->vma->vm_file->f_mapping; - else + if (!vmf->vma->vm_file) printk(KERN_ERR "no mapping available\n"); - BUG_ON(!page->mapping); - page->index = vmf->pgoff; /* for folio_mkclean() */ + BUG_ON(!info->fbdefio->mapping); vmf->page = page; return 0; @@ -194,9 +183,9 @@ static vm_fault_t fb_deferred_io_track_page(struct fb_info *info, unsigned long /* * We want the page to remain locked from ->page_mkwrite until - * the PTE is marked dirty to avoid folio_mkclean() being called - * before the PTE is updated, which would leave the page ignored - * by defio. + * the PTE is marked dirty to avoid mapping_wrprotect_page() + * being called before the PTE is updated, which would leave + * the page ignored by defio. * Do this by locking the page here and informing the caller * about it with VM_FAULT_LOCKED. */ @@ -274,14 +263,13 @@ static void fb_deferred_io_work(struct work_struct *work) struct fb_deferred_io_pageref *pageref, *next; struct fb_deferred_io *fbdefio = info->fbdefio; - /* here we mkclean the pages, then do all deferred IO */ + /* here we wrprotect the page's mappings, then do all deferred IO. */ mutex_lock(&fbdefio->lock); list_for_each_entry(pageref, &fbdefio->pagereflist, list) { - struct folio *folio = page_folio(pageref->page); + struct page *page = pageref->page; + pgoff_t pgoff = pageref->offset >> PAGE_SHIFT; - folio_lock(folio); - folio_mkclean(folio); - folio_unlock(folio); + mapping_wrprotect_page(fbdefio->mapping, pgoff, 1, page); } /* driver's callback with pagereflist */ @@ -337,6 +325,7 @@ void fb_deferred_io_open(struct fb_info *info, { struct fb_deferred_io *fbdefio = info->fbdefio; + fbdefio->mapping = file->f_mapping; file->f_mapping->a_ops = &fb_deferred_io_aops; fbdefio->open_count++; } @@ -344,13 +333,7 @@ EXPORT_SYMBOL_GPL(fb_deferred_io_open); static void fb_deferred_io_lastclose(struct fb_info *info) { - unsigned long i; - flush_delayed_work(&info->deferred_work); - - /* clear out the mapping that we setup */ - for (i = 0; i < info->npagerefs; ++i) - fb_deferred_io_pageref_clear(&info->pagerefs[i]); } void fb_deferred_io_release(struct fb_info *info) @@ -370,5 +353,6 @@ void fb_deferred_io_cleanup(struct fb_info *info) kvfree(info->pagerefs); mutex_destroy(&fbdefio->lock); + fbdefio->mapping = NULL; } EXPORT_SYMBOL_GPL(fb_deferred_io_cleanup); diff --git a/include/linux/fb.h b/include/linux/fb.h index 5ba187e08cf7..cd653862ab99 100644 --- a/include/linux/fb.h +++ b/include/linux/fb.h @@ -225,6 +225,7 @@ struct fb_deferred_io { int open_count; /* number of opened files; protected by fb_info lock */ struct mutex lock; /* mutex that protects the pageref list */ struct list_head pagereflist; /* list of pagerefs for touched pages */ + struct address_space *mapping; /* page cache object for fb device */ /* callback */ struct page *(*get_page)(struct fb_info *info, unsigned long offset); void (*deferred_io)(struct fb_info *info, struct list_head *pagelist);