From nobody Mon Feb 9 00:42:13 2026 Received: from mx0a-00069f02.pphosted.com (mx0a-00069f02.pphosted.com [205.220.165.32]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7E182284663 for ; Wed, 7 Jan 2026 07:21:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=205.220.165.32 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767770468; cv=fail; b=ocKC84FkQu6yApZpGiVxbUXndQ7Z3KgPvoFTNK14m9Ds7jcUlcw4+cNgt8GK+nusD93sIWmo6L3K+nk99lC/IzA2bziThn2yTacPDh8JskzM4uBcmjDsHHd18/j1glmuK65pqajeR8h9mm451CaxaNTUFZK97kzSmMgYL0lRnug= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767770468; c=relaxed/simple; bh=60DzNbt4Y2tVTetnPtmG3I0izOfvUSBnaRkLEIcC3NE=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=HhtYwZH29KRZgGqm705pxqrh+BrT6L6CUalaezIsA6YqXifsSZnE+65MSjdaPqxovRjTw85NG9TvwcLMZYSDmTepqW9ikAnG6nCyi8z/gjoRiRduLhnSObNMwNjRQa82tKopwHfctkC7cekNm8dQVqODI3KPfYKcjqVJk8oGrwQ= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oracle.com; spf=pass smtp.mailfrom=oracle.com; dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b=DU0Uw3kJ; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=fIx/RM50; arc=fail smtp.client-ip=205.220.165.32 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oracle.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oracle.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b="DU0Uw3kJ"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="fIx/RM50" Received: from pps.filterd (m0246617.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 6075ab3F1026291; Wed, 7 Jan 2026 07:20:21 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-2025-04-25; bh=eqe5MOrniyrPpur4jyjBxMt7L5rFpfL9tZVcfYXPjVo=; b= DU0Uw3kJGZShjWDZCaVaGwEf8F/jSvYeayBUFkSm7tYOYrQkZ6ZVye7UVzck6Lzx LC5+sVUe7cthITLCsLgeLsYqNxMjrxtHmS3m17FPC/lw+MYz3KBPEU71ytg5b9cu P2iJk6coKjvWitIY1uSiRKTybnraKnnk2P0M6VYLSHrIEAeioYXdI0/6hTdL/m6X KKx/NBkUgERIIHRX8eU0Qmy24SAD9mIdZ2/8GlvXP0KtXj8drFQc6KcJNTJWGLmy z81OTjwTE74WkFMdnFNrLvR0C1Hus3sa72RfBCckck80tf+5iQZ9ocVgKG1irdMj 8jVVgx244yDsngpZObRGAA== Received: from phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta02.appoci.oracle.com [147.154.114.232]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4bhhg7r2nj-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 07 Jan 2026 07:20:20 +0000 (GMT) Received: from pps.filterd (phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 607517PA027437; Wed, 7 Jan 2026 07:20:20 GMT Received: from bn1pr04cu002.outbound.protection.outlook.com (mail-eastus2azon11010005.outbound.protection.outlook.com [52.101.56.5]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 4besj999kc-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 07 Jan 2026 07:20:19 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=jK3arttxhtZ+q9YAZtYK964UFb3ACSaabmbufD9Dpvoi3kOyCzrKZeJm3sTwIm02Ry1rMa90So2EnA+hJA7JM7o01QxdTG7hCE4zirKxheOYg/l5aqTkvoMOPhZ7+qJ9Sl3zqTAWEs5MiU8RQdn5NiAcAVJv09/fsQjtaLq7YOq+oFtJsvXJgwWzJZEKPEMGmlt9bygTKnp9ocY794o3vkKVkbqOvYyzO6VkxXmek5dcklS5cCT3rO3JM3O9C/YIRsES+aIZLcy6Jyyzfhdm4OJnTmiNFtxW0sy2ibd7KN3I2Ib3bkmtL7K45tvxeUEdZCUhCZTs109BbVXdb7geqA== 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=eqe5MOrniyrPpur4jyjBxMt7L5rFpfL9tZVcfYXPjVo=; b=UrWfTWNjLruo7YV0+E2G/55DMNEtBNg+SFeiksDdUgydac7PMEXmG7OkUU4ANLJbZDKwK0QAWsY4RF7LXQLuLkeh3qM/1OMrXomC4XeDGKL3c6YYgOI1fiJAkuRmPv6++Xy7vPzFR1W2MIF35NhDynqdRfPwPoiXOaq9gCZivmKeOhklSdQDGqY8SeGG92p9jUKBa/I3FM5yyoxdbxDOhrGZliiVT4VsvHI0pvMAHfR/P4NKkToKMEudeckpy31Bc5G7cjFvkjdjvRFup39A37bjEH6702YXervY7Ky19aqIChQpXUQC39PkKHtAOU7bAgtAG2POAfa1V4vTgJmhRQ== 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=eqe5MOrniyrPpur4jyjBxMt7L5rFpfL9tZVcfYXPjVo=; b=fIx/RM50kNeFvWrDlku88ZRlPBUmblKEJusucPQO/TgkO1frVfxZeZMtLTlgU/rS+Nl4MQZwCNTBc2JM9lnRfK4HgAJccYbdHrK95Ab/jah1UNoGPeAl/S7sROQ46ZaF5XtQX1n8lAewkv4quOsR0Z+W6uBBEJTJzweEqqBq6nY= Received: from CO6PR10MB5409.namprd10.prod.outlook.com (2603:10b6:5:357::14) by LV8PR10MB7750.namprd10.prod.outlook.com (2603:10b6:408:1ed::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9499.2; Wed, 7 Jan 2026 07:20:13 +0000 Received: from CO6PR10MB5409.namprd10.prod.outlook.com ([fe80::3c92:21f3:96a:b574]) by CO6PR10MB5409.namprd10.prod.outlook.com ([fe80::3c92:21f3:96a:b574%4]) with mapi id 15.20.9478.004; Wed, 7 Jan 2026 07:20:13 +0000 From: Ankur Arora To: linux-kernel@vger.kernel.org, linux-mm@kvack.org, x86@kernel.org Cc: akpm@linux-foundation.org, david@kernel.org, bp@alien8.de, dave.hansen@linux.intel.com, hpa@zytor.com, mingo@redhat.com, mjguzik@gmail.com, luto@kernel.org, peterz@infradead.org, tglx@linutronix.de, willy@infradead.org, raghavendra.kt@amd.com, chleroy@kernel.org, ioworker0@gmail.com, lizhe.67@bytedance.com, boris.ostrovsky@oracle.com, konrad.wilk@oracle.com, ankur.a.arora@oracle.com, David Hildenbrand Subject: [PATCH v11 1/8] treewide: provide a generic clear_user_page() variant Date: Tue, 6 Jan 2026 23:20:02 -0800 Message-Id: <20260107072009.1615991-2-ankur.a.arora@oracle.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20260107072009.1615991-1-ankur.a.arora@oracle.com> References: <20260107072009.1615991-1-ankur.a.arora@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: MW4PR03CA0157.namprd03.prod.outlook.com (2603:10b6:303:8d::12) To CO6PR10MB5409.namprd10.prod.outlook.com (2603:10b6:5:357::14) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CO6PR10MB5409:EE_|LV8PR10MB7750:EE_ X-MS-Office365-Filtering-Correlation-Id: d7a2a4bd-d34e-4562-2d99-08de4dbd32e8 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|1800799024|366016; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?+9fcItcyI944Qy+7PBeYO37kwoXWUiiHc6hmfmMkQ2jgrkG0IytLcZb5RMli?= =?us-ascii?Q?Ns6M8Hm5eUsYofSzMVaEA5NTOgAdxs3D7Igz8p0/98y1wMOpKfYME8Os1O1v?= =?us-ascii?Q?8Y47h4UvIq6WrPvSp5DwE4wMfQsUoRE8CoGsP8z+Y3+RPjtaWge+Sl0bszlz?= =?us-ascii?Q?u+GElYlQv/z3lMOTnOHW6khjpsxqNaIHx56P/yv51OnxoVWLnWjYXsCeR0uC?= =?us-ascii?Q?y2ze/vr0D4uA8IMjoV7OL9x7+rb93YVBcfmp7VGqVD8IvKN+45zVSOewVi8q?= =?us-ascii?Q?KPzpgYTJ9yIlS8nC+SIoxj+e0x15bm9Q6cqt5/bt0p38fhmDfNnVAsh/V7fq?= =?us-ascii?Q?m5WW4nIVYZkOKCu+dovmbv/XtxhbccW9AL+2YJYTgkSN93l4WuH5US8aBjBz?= =?us-ascii?Q?XSdnoakjtx4HK4cYd5BV/RUQ2v+tQ2dPSP0zD4WNOXcQjBEGs1lVVDLCVZkJ?= =?us-ascii?Q?MI7YTEcTkgKQMj1OqpKcXxluQ7f30MSIrboK3omRuEY9kRn598+Owsv36wad?= =?us-ascii?Q?Vj0n2x9VilPHysvzmT4HF6WgDW96Rl+cdkiAFPZL2zc/zlfoGxr0IB7ZYgqj?= =?us-ascii?Q?BIoPR4A9XRyz/oiYSBL+YiGr3g6GHHtA8Dncja0QaIJLL3VQQxEPe+cNl45F?= =?us-ascii?Q?s5vRl/UWAV13vO02oyRLy8Feps5LYfm/ErpIJY2upGiRxnVFG9EJ8ghKExS5?= =?us-ascii?Q?hYSRtl/VS/LoCBkEAHp7rfHrg9V0xL7ouypCsCkXz8C65WZBF7Az4gRPMKEi?= =?us-ascii?Q?0oQzA3x6cTdbkQv/1nk7nfNxKDOfTLFzHA9rGq6cvRHB2Y7PyTRSz9X593Jv?= =?us-ascii?Q?u6xAUR8HbL9e3R7QdEFcI3ooOtICE4pri0l/bxovrwHBtPLWv00Ged9vQRrp?= =?us-ascii?Q?/0sLJTUFHU5pZwRPpUIrBZ7FqXOHzMfH6JWdIeC/5PSF6QrMmSlfpU4etWFs?= =?us-ascii?Q?wx6UUGHqerxB2Nbv/iqFYjttgdjuKTk9ryQi0ME7M5oxLsDHs22iGUS6+SFQ?= =?us-ascii?Q?qGkuynC83BuzSQqmwR5XBvCS1W8A48GV4vECW4hHdp52dmmyVSNKKW5DBUAb?= =?us-ascii?Q?aOJGays5294j15sDN6DZpvT6Tk6XPTxKw//zPMmetF3poKW7qISy1p1671uu?= =?us-ascii?Q?Br1DblOCKhhZDo9x1OfZL/MCFLnbzU1n9qi+DiiO0S3BxQKZbH/UPpXSToS5?= =?us-ascii?Q?IIioT0YRBJrQHOSUyGqS7vXGb30obWl54zymXoGDkQCwvxrQOYvlCkbk2qS4?= =?us-ascii?Q?fZITeI7TO+J08zF56d+qDMkBqSLTFzdJAtspNOBvh/Th8OjH/ipKLBLAdJOt?= =?us-ascii?Q?QHQmZeLDAyJZipb1qbhpLAnLCx1KlvC6TokdP1/5f/PnkOgMcsxTLdXFoHmd?= =?us-ascii?Q?7YyVpJm6Vf480mt1nBD4+Y6kckXd3jPcQ2wiXsGNYfx5pJgLNjNSwPrH5Rt/?= =?us-ascii?Q?6Yu2HioR5tW0NwY/ZP5mwJMNKCLt/YUb?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CO6PR10MB5409.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(7416014)(1800799024)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?cVgNofyfGTVE8Uz33FHwLjOIB7Hetwn6UETp1M/lcrQ9TpmM9srBUB/xlG4R?= =?us-ascii?Q?62zgGNSrjPSDVRQ+oxPl+mk7ruSZr0q/Xt1ovTm6LXib0yKOhoXjNWcTYnpo?= =?us-ascii?Q?TMXFpO2pAxSab6IjBjxGl2SoDx9JZeLrgJp2bKrQq2zuVNVwEnWjM0H1dV2W?= =?us-ascii?Q?+g364UOvcQ4Pj6wc73n/fnwu1PksUr8i+mmSQEOXNt5H3phPwVCapH9eMX8W?= =?us-ascii?Q?273N6sSVCkWaYDxaqTvLj2TQ7m3eoS4YLn678dxfwoyyHc8KzXZpQVzMeymI?= =?us-ascii?Q?rqYgnnvQ76tvX25EH66Na2oiKB2Ql5ot2I1FICr4ZTk3pSmhd7/V0QwIqKAo?= =?us-ascii?Q?5YhWC83uUDWmGNB+tBdN4xeTb/2TLELXYhR3OWj6vunv+T5Cet/HuHvJ0uEG?= =?us-ascii?Q?EIO3SX81kA9ctcTzyFzoYOuwDG9o3UdJGuJoexrB3QZbOe3ZTmVBMIVQ2znY?= =?us-ascii?Q?IkMKdQ0qHuPUqpFTB6Bz9jCy2DPAeyBm1rBE/aoo81Mo/6HiKoZFoaFVVHsY?= =?us-ascii?Q?NADFUVg4XykdpMxNCnucjXG9YQNj3cNKIY5THbWSGynqCP515aEgB+1U5l+1?= =?us-ascii?Q?i0cnjQbO/FMCa6URuvoR1SGn7iic7RKZL0VuagJK0XQGZgQdv1bK5Kf/123E?= =?us-ascii?Q?x8r06v+A0X+hRVJwfNLi25hWy02JN7A7qGFZfUGWgKJmjLqXBZmmFY3lqADk?= =?us-ascii?Q?yUZW66BncEZd3fL1nwFVlEMBjUZTymGXrbLh2QGYNXQAMZ+kVzzxK7j/nip8?= =?us-ascii?Q?RVifNfcZbVO+KakWDrQmfC5IaCVo83JxfBadafQvKhDgW/ss3e3RKA1o+fB/?= =?us-ascii?Q?G0HfbnMec0y0gt6LZAYPd92ma2HXJcfyKe/SoT/1BIrG+fg2EQ52AopIA8z+?= =?us-ascii?Q?2Tr3SnrXZDEHu8bubr8wky7b5I4vNrx3w3i4t57t+DroP6xqyvYtPzYfj4GO?= =?us-ascii?Q?fEqc+Ul+Oy46YRstmU8vxokk1raGjJ+u8Fm5gd+uTzgzOBcHQrFCh3dcmcmi?= =?us-ascii?Q?y9ePTF06nv7jabZuM7nIeWyLPCrzl0II9qZX3v1V47bo1Oz4dgzZFVUt3wed?= =?us-ascii?Q?/8jDYUAt0LJavGEh8NSuZ2HzYyVSu26UJhBawVwo8FDYwMsaXOHdXqtkCxXU?= =?us-ascii?Q?9opLoU6vSBtVYLcuOYkncdcHgTqd09LgU+ZwgmSDzLln9P9qsPT2flfH7yGy?= =?us-ascii?Q?AaVV7vQI6pXZGG+QumQhYZAKKbTDMYT57M9PC868oI2EmJQuleAzRvLafJIi?= =?us-ascii?Q?hzpV9VYw7s2F0YLgT1d0H6lHX/KANOnEdNxFSAB87yqWEPsouCuhhpfTbym3?= =?us-ascii?Q?iZaNJR6rW/KOtB44n2njksMv+gJAtpRWFQPT/+yIgMyvluHgLnbvAiXg7zNf?= =?us-ascii?Q?dN69nV/2WiklXAyf1UX5filmVvz2kk7+kbti/mZj32gaktmlcz3sJfbmg84k?= =?us-ascii?Q?4NC9ntuRiKqyarIVrqYFeNpUaiBM946QfiJBneU3SXagZw1FWM3jdLaZlXsM?= =?us-ascii?Q?N37vNHp14viM4Uv/GNeetYPciJcdou1uk1ru8J5K65ybh7e5MxbgHkhPbrtR?= =?us-ascii?Q?EzJHsO+i3fc0PfsOfo7pbViJuX5xt6/GC4U7A5EyQsTGYi7Vz9294Awe17Ck?= =?us-ascii?Q?4fHsr9cvrzUl3l/O90MEO41ZQPSChy37CS4Piy/R3dQZmIqOZIw+37fkPWRw?= =?us-ascii?Q?hYfiHu/0vVEQzNAWk/xDgu0CK01W9KOleTeJDhpLUcT4ccXc9Xsx3a+oANsl?= =?us-ascii?Q?TFdjju4sdnjF4FhafoiVLibX91S8iMU=3D?= X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: rTJE2hO4sUmVI/C8wzULDPYONoW1BCNNFPvfMDM9Wkk6vfDvaE+qxrYyO+5pG5m1yBpeupNe3XfoRc6kcBB+6w38/9C5gHgphclWNkoVStH2FpVQcIGZaHOg30dSRCEKeBoYveOZRrjDctKb4E05s+7g+jwmqJ+J2CYMOrhgV4I7j7j8sMjfzb2qHu0g+GGlxiHO6m+k6uDTFDw97P+oPFeG3VqcQ2mvSWp9fHwz0dLNPYtCGApWPHHay0AdaBTTplDL9jrj/U/+pZZ4nj1fGFOVC6yTlewCn0dIieI4y6g0LOCFBE6UFwdDkdiSuVvIrBye1Qbwoy4Zk4VE3FowCa4IO/mH702VYHuj8kOxWERWN6wPKM4XNc8SMPB8m9+BcZyw8jsLssU1R1D2KQWQmhbmVnwvBKYbsVcjL6fJ1m9ZOBK6qyVrENn9G1qgdpXE8Ld8xtuu8TZ5igwA+GueXRd3+HjxVbFGB3V4Z/bY0fkkXeyWKAFiTQtMS3pPThucH858RX8X5K6JnqcDYGs/7nSQcW3+BOewFVXNdDIVu/ORxxNn7zZoHmHD9pFRWao6NKNYmFdaBWJ2/Uwi76oZsBZNtJBSHpf7mKbbAKIOaSc= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: d7a2a4bd-d34e-4562-2d99-08de4dbd32e8 X-MS-Exchange-CrossTenant-AuthSource: CO6PR10MB5409.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Jan 2026 07:20:13.2788 (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: OOLwB230KczpHz/olHiB4UFDZIbe/PYapNMJr09Npr0iO1PpcT7HXwqkmQbdHPV4zL2GmMQBDoIw75v8H9OmrctOUJaf/TRPYsySgTfL694= X-MS-Exchange-Transport-CrossTenantHeadersStamped: LV8PR10MB7750 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2026-01-06_03,2026-01-06_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 phishscore=0 bulkscore=0 suspectscore=0 mlxscore=0 spamscore=0 mlxlogscore=999 adultscore=0 malwarescore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2512120000 definitions=main-2601070058 X-Proofpoint-GUID: wxFtSgSWLtgnY5i2m5JPAkt3xggezUCE X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTA3MDA1OCBTYWx0ZWRfX1xlvm+CTL0f3 AAwL3HpnDZi2jVyvF3QEO6iH6kAwvYwhZMUQoyDCfiEYoS98UpSNkwiGlTXF8xJ8yR+s3tOZRkS fGjf2u3wDbvAiEcBflHBDq8AsKlRhnUye6/TmQlLlcDoxWbj7sD3ujbu0fW0b710/zxTciydiBW RVGoNnBwh9hRa351zUQfUHx9khx7kl3kHR+TytwblSXmrei+DdgiAAO8eHBqvdPWA7dnc51iiT1 4CbMk0u1Ss4229s+Obk/N0PEBKmfGcNYUgKlWTJiyR3bob/ivzqPyN8I/qz8XaXk3Yvls+NdvJQ nUAezigbANrtF66fqqI3liAtnlGWsgeihyjee+YZUdqGUT9e7mREQRCFbWVqSGvNSU/n7BIea+c fIITH0lcydvHOQTGQrBKhDxiM8Ihk2OuK3JINpVK1TzjXuL5ue9gwxAU9LEnn+kP4nWQ0MzwK+7 wXLEc3p8y6wj5p7H+9g== X-Proofpoint-ORIG-GUID: wxFtSgSWLtgnY5i2m5JPAkt3xggezUCE X-Authority-Analysis: v=2.4 cv=HOzO14tv c=1 sm=1 tr=0 ts=695e0934 cx=c_pps a=OOZaFjgC48PWsiFpTAqLcw==:117 a=OOZaFjgC48PWsiFpTAqLcw==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=vUbySO9Y5rIA:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=20KFwNOVAAAA:8 a=yPCof4ZbAAAA:8 a=XISvpzbayW8Gg-unTeYA:9 Content-Type: text/plain; charset="utf-8" From: David Hildenbrand Let's drop all variants that effectively map to clear_page() and provide it in a generic variant instead. We'll use the macro clear_user_page to indicate whether an architecture provides it's own variant. Also, clear_user_page() is only called from the generic variant of clear_user_highpage(), so define it only if the architecture does not provide a clear_user_highpage(). And, for simplicity define it in linux/highmem.h. Note that for parisc, clear_page() and clear_user_page() map to clear_page_asm(), so we can just get rid of the custom clear_user_page() implementation. There is a clear_user_page_asm() function on parisc, that seems to be unused. Not sure what's up with that. Signed-off-by: David Hildenbrand Co-developed-by: Ankur Arora Signed-off-by: Ankur Arora --- arch/alpha/include/asm/page.h | 1 - arch/arc/include/asm/page.h | 2 ++ arch/arm/include/asm/page-nommu.h | 1 - arch/arm64/include/asm/page.h | 1 - arch/csky/abiv1/inc/abi/page.h | 1 + arch/csky/abiv2/inc/abi/page.h | 7 ------- arch/hexagon/include/asm/page.h | 1 - arch/loongarch/include/asm/page.h | 1 - arch/m68k/include/asm/page_no.h | 1 - arch/microblaze/include/asm/page.h | 1 - arch/mips/include/asm/page.h | 1 + arch/nios2/include/asm/page.h | 1 + arch/openrisc/include/asm/page.h | 1 - arch/parisc/include/asm/page.h | 1 - arch/powerpc/include/asm/page.h | 1 + arch/riscv/include/asm/page.h | 1 - arch/s390/include/asm/page.h | 1 - arch/sparc/include/asm/page_64.h | 1 + arch/um/include/asm/page.h | 1 - arch/x86/include/asm/page.h | 6 ------ arch/xtensa/include/asm/page.h | 1 - include/linux/highmem.h | 24 ++++++++++++++++++++++-- 22 files changed, 29 insertions(+), 28 deletions(-) diff --git a/arch/alpha/include/asm/page.h b/arch/alpha/include/asm/page.h index d2c6667d73e9..59d01f9b77f6 100644 --- a/arch/alpha/include/asm/page.h +++ b/arch/alpha/include/asm/page.h @@ -11,7 +11,6 @@ #define STRICT_MM_TYPECHECKS =20 extern void clear_page(void *page); -#define clear_user_page(page, vaddr, pg) clear_page(page) =20 #define vma_alloc_zeroed_movable_folio(vma, vaddr) \ vma_alloc_folio(GFP_HIGHUSER_MOVABLE | __GFP_ZERO, 0, vma, vaddr) diff --git a/arch/arc/include/asm/page.h b/arch/arc/include/asm/page.h index 9720fe6b2c24..38214e126c6d 100644 --- a/arch/arc/include/asm/page.h +++ b/arch/arc/include/asm/page.h @@ -32,6 +32,8 @@ struct page; =20 void copy_user_highpage(struct page *to, struct page *from, unsigned long u_vaddr, struct vm_area_struct *vma); + +#define clear_user_page clear_user_page void clear_user_page(void *to, unsigned long u_vaddr, struct page *page); =20 typedef struct { diff --git a/arch/arm/include/asm/page-nommu.h b/arch/arm/include/asm/page-= nommu.h index 7c2c72323d17..e74415c959be 100644 --- a/arch/arm/include/asm/page-nommu.h +++ b/arch/arm/include/asm/page-nommu.h @@ -11,7 +11,6 @@ #define clear_page(page) memset((page), 0, PAGE_SIZE) #define copy_page(to,from) memcpy((to), (from), PAGE_SIZE) =20 -#define clear_user_page(page, vaddr, pg) clear_page(page) #define copy_user_page(to, from, vaddr, pg) copy_page(to, from) =20 /* diff --git a/arch/arm64/include/asm/page.h b/arch/arm64/include/asm/page.h index 00f117ff4f7a..b39cc1127e1f 100644 --- a/arch/arm64/include/asm/page.h +++ b/arch/arm64/include/asm/page.h @@ -36,7 +36,6 @@ struct folio *vma_alloc_zeroed_movable_folio(struct vm_ar= ea_struct *vma, bool tag_clear_highpages(struct page *to, int numpages); #define __HAVE_ARCH_TAG_CLEAR_HIGHPAGES =20 -#define clear_user_page(page, vaddr, pg) clear_page(page) #define copy_user_page(to, from, vaddr, pg) copy_page(to, from) =20 typedef struct page *pgtable_t; diff --git a/arch/csky/abiv1/inc/abi/page.h b/arch/csky/abiv1/inc/abi/page.h index 2d2159933b76..58307254e7e5 100644 --- a/arch/csky/abiv1/inc/abi/page.h +++ b/arch/csky/abiv1/inc/abi/page.h @@ -10,6 +10,7 @@ static inline unsigned long pages_do_alias(unsigned long = addr1, return (addr1 ^ addr2) & (SHMLBA-1); } =20 +#define clear_user_page clear_user_page static inline void clear_user_page(void *addr, unsigned long vaddr, struct page *page) { diff --git a/arch/csky/abiv2/inc/abi/page.h b/arch/csky/abiv2/inc/abi/page.h index cf005f13cd15..a5a255013308 100644 --- a/arch/csky/abiv2/inc/abi/page.h +++ b/arch/csky/abiv2/inc/abi/page.h @@ -1,11 +1,4 @@ /* SPDX-License-Identifier: GPL-2.0 */ - -static inline void clear_user_page(void *addr, unsigned long vaddr, - struct page *page) -{ - clear_page(addr); -} - static inline void copy_user_page(void *to, void *from, unsigned long vadd= r, struct page *page) { diff --git a/arch/hexagon/include/asm/page.h b/arch/hexagon/include/asm/pag= e.h index 137ba7c5de48..f0aed3ed812b 100644 --- a/arch/hexagon/include/asm/page.h +++ b/arch/hexagon/include/asm/page.h @@ -113,7 +113,6 @@ static inline void clear_page(void *page) /* * Under assumption that kernel always "sees" user map... */ -#define clear_user_page(page, vaddr, pg) clear_page(page) #define copy_user_page(to, from, vaddr, pg) copy_page(to, from) =20 static inline unsigned long virt_to_pfn(const void *kaddr) diff --git a/arch/loongarch/include/asm/page.h b/arch/loongarch/include/asm= /page.h index 256d1ff7a1e3..327bf0bc92bf 100644 --- a/arch/loongarch/include/asm/page.h +++ b/arch/loongarch/include/asm/page.h @@ -30,7 +30,6 @@ extern void clear_page(void *page); extern void copy_page(void *to, void *from); =20 -#define clear_user_page(page, vaddr, pg) clear_page(page) #define copy_user_page(to, from, vaddr, pg) copy_page(to, from) =20 extern unsigned long shm_align_mask; diff --git a/arch/m68k/include/asm/page_no.h b/arch/m68k/include/asm/page_n= o.h index 39db2026a4b4..d2532bc407ef 100644 --- a/arch/m68k/include/asm/page_no.h +++ b/arch/m68k/include/asm/page_no.h @@ -10,7 +10,6 @@ extern unsigned long memory_end; #define clear_page(page) memset((page), 0, PAGE_SIZE) #define copy_page(to,from) memcpy((to), (from), PAGE_SIZE) =20 -#define clear_user_page(page, vaddr, pg) clear_page(page) #define copy_user_page(to, from, vaddr, pg) copy_page(to, from) =20 #define vma_alloc_zeroed_movable_folio(vma, vaddr) \ diff --git a/arch/microblaze/include/asm/page.h b/arch/microblaze/include/a= sm/page.h index 90ac9f34b4b4..e1e396367ba7 100644 --- a/arch/microblaze/include/asm/page.h +++ b/arch/microblaze/include/asm/page.h @@ -45,7 +45,6 @@ typedef unsigned long pte_basic_t; # define copy_page(to, from) memcpy((to), (from), PAGE_SIZE) # define clear_page(pgaddr) memset((pgaddr), 0, PAGE_SIZE) =20 -# define clear_user_page(pgaddr, vaddr, page) memset((pgaddr), 0, PAGE_SIZ= E) # define copy_user_page(vto, vfrom, vaddr, topg) \ memcpy((vto), (vfrom), PAGE_SIZE) =20 diff --git a/arch/mips/include/asm/page.h b/arch/mips/include/asm/page.h index bc3e3484c1bf..5ec428fcc887 100644 --- a/arch/mips/include/asm/page.h +++ b/arch/mips/include/asm/page.h @@ -90,6 +90,7 @@ static inline void clear_user_page(void *addr, unsigned l= ong vaddr, if (pages_do_alias((unsigned long) addr, vaddr & PAGE_MASK)) flush_data_cache_page((unsigned long)addr); } +#define clear_user_page clear_user_page =20 struct vm_area_struct; extern void copy_user_highpage(struct page *to, struct page *from, diff --git a/arch/nios2/include/asm/page.h b/arch/nios2/include/asm/page.h index 00a51623d38a..722956ac0bf8 100644 --- a/arch/nios2/include/asm/page.h +++ b/arch/nios2/include/asm/page.h @@ -45,6 +45,7 @@ =20 struct page; =20 +#define clear_user_page clear_user_page extern void clear_user_page(void *addr, unsigned long vaddr, struct page *= page); extern void copy_user_page(void *vto, void *vfrom, unsigned long vaddr, struct page *to); diff --git a/arch/openrisc/include/asm/page.h b/arch/openrisc/include/asm/p= age.h index 85797f94d1d7..d2cdbf3579bb 100644 --- a/arch/openrisc/include/asm/page.h +++ b/arch/openrisc/include/asm/page.h @@ -30,7 +30,6 @@ #define clear_page(page) memset((page), 0, PAGE_SIZE) #define copy_page(to, from) memcpy((to), (from), PAGE_SIZE) =20 -#define clear_user_page(page, vaddr, pg) clear_page(page) #define copy_user_page(to, from, vaddr, pg) copy_page(to, from) =20 /* diff --git a/arch/parisc/include/asm/page.h b/arch/parisc/include/asm/page.h index 8f4e51071ea1..3630b36d07da 100644 --- a/arch/parisc/include/asm/page.h +++ b/arch/parisc/include/asm/page.h @@ -21,7 +21,6 @@ struct vm_area_struct; =20 void clear_page_asm(void *page); void copy_page_asm(void *to, void *from); -#define clear_user_page(vto, vaddr, page) clear_page_asm(vto) void copy_user_highpage(struct page *to, struct page *from, unsigned long = vaddr, struct vm_area_struct *vma); #define __HAVE_ARCH_COPY_USER_HIGHPAGE diff --git a/arch/powerpc/include/asm/page.h b/arch/powerpc/include/asm/pag= e.h index b28fbb1d57eb..f2bb1f98eebe 100644 --- a/arch/powerpc/include/asm/page.h +++ b/arch/powerpc/include/asm/page.h @@ -271,6 +271,7 @@ static inline const void *pfn_to_kaddr(unsigned long pf= n) =20 struct page; extern void clear_user_page(void *page, unsigned long vaddr, struct page *= pg); +#define clear_user_page clear_user_page extern void copy_user_page(void *to, void *from, unsigned long vaddr, struct page *p); extern int devmem_is_allowed(unsigned long pfn); diff --git a/arch/riscv/include/asm/page.h b/arch/riscv/include/asm/page.h index ffe213ad65a4..061b60b954ec 100644 --- a/arch/riscv/include/asm/page.h +++ b/arch/riscv/include/asm/page.h @@ -50,7 +50,6 @@ void clear_page(void *page); #endif #define copy_page(to, from) memcpy((to), (from), PAGE_SIZE) =20 -#define clear_user_page(pgaddr, vaddr, page) clear_page(pgaddr) #define copy_user_page(vto, vfrom, vaddr, topg) \ memcpy((vto), (vfrom), PAGE_SIZE) =20 diff --git a/arch/s390/include/asm/page.h b/arch/s390/include/asm/page.h index c1d63b613bf9..9c8c5283258e 100644 --- a/arch/s390/include/asm/page.h +++ b/arch/s390/include/asm/page.h @@ -65,7 +65,6 @@ static inline void copy_page(void *to, void *from) : : "memory", "cc"); } =20 -#define clear_user_page(page, vaddr, pg) clear_page(page) #define copy_user_page(to, from, vaddr, pg) copy_page(to, from) =20 #define vma_alloc_zeroed_movable_folio(vma, vaddr) \ diff --git a/arch/sparc/include/asm/page_64.h b/arch/sparc/include/asm/page= _64.h index d764d8a8586b..fd4dc85fb38b 100644 --- a/arch/sparc/include/asm/page_64.h +++ b/arch/sparc/include/asm/page_64.h @@ -43,6 +43,7 @@ void _clear_page(void *page); #define clear_page(X) _clear_page((void *)(X)) struct page; void clear_user_page(void *addr, unsigned long vaddr, struct page *page); +#define clear_user_page clear_user_page #define copy_page(X,Y) memcpy((void *)(X), (void *)(Y), PAGE_SIZE) void copy_user_page(void *to, void *from, unsigned long vaddr, struct page= *topage); #define __HAVE_ARCH_COPY_USER_HIGHPAGE diff --git a/arch/um/include/asm/page.h b/arch/um/include/asm/page.h index 2d363460d896..e348ff489b89 100644 --- a/arch/um/include/asm/page.h +++ b/arch/um/include/asm/page.h @@ -26,7 +26,6 @@ struct page; #define clear_page(page) memset((void *)(page), 0, PAGE_SIZE) #define copy_page(to,from) memcpy((void *)(to), (void *)(from), PAGE_SIZE) =20 -#define clear_user_page(page, vaddr, pg) clear_page(page) #define copy_user_page(to, from, vaddr, pg) copy_page(to, from) =20 typedef struct { unsigned long pte; } pte_t; diff --git a/arch/x86/include/asm/page.h b/arch/x86/include/asm/page.h index 9265f2fca99a..416dc88e35c1 100644 --- a/arch/x86/include/asm/page.h +++ b/arch/x86/include/asm/page.h @@ -22,12 +22,6 @@ struct page; extern struct range pfn_mapped[]; extern int nr_pfn_mapped; =20 -static inline void clear_user_page(void *page, unsigned long vaddr, - struct page *pg) -{ - clear_page(page); -} - static inline void copy_user_page(void *to, void *from, unsigned long vadd= r, struct page *topage) { diff --git a/arch/xtensa/include/asm/page.h b/arch/xtensa/include/asm/page.h index 20655174b111..059493256765 100644 --- a/arch/xtensa/include/asm/page.h +++ b/arch/xtensa/include/asm/page.h @@ -126,7 +126,6 @@ void clear_user_highpage(struct page *page, unsigned lo= ng vaddr); void copy_user_highpage(struct page *to, struct page *from, unsigned long vaddr, struct vm_area_struct *vma); #else -# define clear_user_page(page, vaddr, pg) clear_page(page) # define copy_user_page(to, from, vaddr, pg) copy_page(to, from) #endif =20 diff --git a/include/linux/highmem.h b/include/linux/highmem.h index abc20f9810fd..393bd51e5a1f 100644 --- a/include/linux/highmem.h +++ b/include/linux/highmem.h @@ -197,15 +197,35 @@ static inline void invalidate_kernel_vmap_range(void = *vaddr, int size) } #endif =20 -/* when CONFIG_HIGHMEM is not set these will be plain clear/copy_page */ #ifndef clear_user_highpage +#ifndef clear_user_page +/** + * clear_user_page() - clear a page to be mapped to user space + * @addr: the address of the page + * @vaddr: the address of the user mapping + * @page: the page + * + * We condition the definition of clear_user_page() on the architecture + * not having a custom clear_user_highpage(). That's because if there + * is some special flushing needed for clear_user_highpage() then it + * is likely that clear_user_page() also needs some magic. And, since + * our only caller is the generic clear_user_highpage(), not defining + * is not much of a loss. + */ +static inline void clear_user_page(void *addr, unsigned long vaddr, struct= page *page) +{ + clear_page(addr); +} +#endif + +/* when CONFIG_HIGHMEM is not set these will be plain clear/copy_page */ static inline void clear_user_highpage(struct page *page, unsigned long va= ddr) { void *addr =3D kmap_local_page(page); clear_user_page(addr, vaddr, page); kunmap_local(addr); } -#endif +#endif /* clear_user_highpage */ =20 #ifndef vma_alloc_zeroed_movable_folio /** --=20 2.31.1 From nobody Mon Feb 9 00:42:13 2026 Received: from mx0b-00069f02.pphosted.com (mx0b-00069f02.pphosted.com [205.220.177.32]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 08A502737F8 for ; Wed, 7 Jan 2026 07:20:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=205.220.177.32 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767770460; cv=fail; b=ZTbjEwB0GYrF1RN3HhGEychLMnGTqQrNOXKRgqq2X2ynrefpbjIn2AMKl8Xny6X91j5nES4lh6tXwWw7SuTLuxioq44JF8MW0w+ywPCJcFAkLPXptcA6qIOkRuA4ltDMbrlcr8pxLsV8wi5zKOBSZ+kopC8wFwq0rdJpfPXZ4GY= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767770460; c=relaxed/simple; bh=IEi2AESvQ3/zNhe9zHDeKwMtyvEOJT7nTUMAlAnOzGY=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=A4NvJyYmECIvf2bY31rKsyJbg/kfDDOUvU4k1s8uHmOpMEfvyL2QngeWdK7iaC9N6GOYoGqecvKyVn+PW/iv8LEVempG4axxj4ie99zRSYgFbZ/hdCBJXa1FZy7l0cMuvyRxKDLkEAsHeWVuOE6UB7wlYSWooWk+dIjv3CvSKQw= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oracle.com; spf=pass smtp.mailfrom=oracle.com; dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b=pNwldVXq; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=zoraxUI5; arc=fail smtp.client-ip=205.220.177.32 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oracle.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oracle.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b="pNwldVXq"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="zoraxUI5" Received: from pps.filterd (m0246631.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 6077AN4J1392572; Wed, 7 Jan 2026 07:20:21 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-2025-04-25; bh=aTECbSgidN4ybcP0pKoxlI/lQimYMRbohG8r48YcHTI=; b= pNwldVXqP5WcINKBWDDvLJi/jBQD//4pgiMn2vOzDkmAvASG10Me7siTHRweQRXu 6wGJwRO+dAz+q9HfDiq2jgRjSIaKW/buaiAin4bdTrJMGGVzoeeH+y+6hGTkEyFn JIhdYgfLDzmhcU2AOB7T7HTL7bJdvVc3Xof4x5AFV5MX6l+aEdWRVp4Og+mtbHBl xWnKnTbcfVyvzv9XUdjIsQQbK+JZzQequNcGlLDqH0OB4TUPlLAneeZeVcdtP8ZY pdx7mb3eL89lhbNiJzYYwrFBDEcUVyUTfPXbPkqGCP4Okevf4yAe0DEtegZbQD1C 77juBjfRAwyx0Nf+g5Er5w== Received: from phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta02.appoci.oracle.com [147.154.114.232]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4bhjv78084-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 07 Jan 2026 07:20:21 +0000 (GMT) Received: from pps.filterd (phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 607517PB027437; Wed, 7 Jan 2026 07:20:20 GMT Received: from bn1pr04cu002.outbound.protection.outlook.com (mail-eastus2azon11010005.outbound.protection.outlook.com [52.101.56.5]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 4besj999kc-2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 07 Jan 2026 07:20:20 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=CCaNKLjERuv898OEikxTHC7NsE5B8+bPMH0w1ck6uUlK1Jd2ABkidNOVfMghb02+PQss1+KO6ln8jyiDLFcE58A98pen6ovlnt7yC3qabHGKa94wiwI01EBJbUBNxDAn69/ABHq0kmtrJETEjZ6HhAjjxBVt9nutcNwLch0jEP4vV/Zrf+lh3OxveNoU7PeP9qGy2h89v/Ob+qZoMG096A4F18m13HaZUWSoLQU9LPLwWuoAMEBZcwWhWcf99xA0cek4ITf0ezyKiPJGmYK2gZhDJJsav4h3RneYVBrHvbtvP+DczK1Hyds4PNN5vVrDH4hVPpceWDVYZVURyuZCzA== 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=aTECbSgidN4ybcP0pKoxlI/lQimYMRbohG8r48YcHTI=; b=zVWTXxwGHXp9kakUCvu5eJ6T+nVL3VKOgsel9QPR43rsENNgDMNqkYSIvm5cDcc0LUCDNx/SSdcxp5KqJbdNsk9ZFj5seUuMowUmG+9wxdxoiM31NCavOEJOAtIXlmhQM98qGFoXBnzuzj7z2TXz40taF/iegerTqQCaEHE/YBYWXV3xfmhzV/4ice1XZ4ojsGU/XYVkTZJYCrwvTUXHdPvx57jB4tHs2rKDFBgSitT0yRKYeTIL0ckx7Vc46NJ0rgPzYx7xl+LcjGBf263XBf3j2r+rd8TlLVGCfXglTNtnyDWcBmDsD+OKd78gvgqidkt1TlMIhVxa6RuecUKxeQ== 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=aTECbSgidN4ybcP0pKoxlI/lQimYMRbohG8r48YcHTI=; b=zoraxUI5KRjPv1uiv9nZf8BrzTRSIIZH6xgmPM+veQ9gDMO/4syaeT36yder4Uc6cMqvF062mtTE45KaoYWdmmybLsrnpvXOkU+wHOACks3o7QodVOpwV/d5K5E2vXXIPu8zw4mg49B/U9RqrjAX2I6aZJOP+ksDT1v9Sc1TPRw= Received: from CO6PR10MB5409.namprd10.prod.outlook.com (2603:10b6:5:357::14) by LV8PR10MB7750.namprd10.prod.outlook.com (2603:10b6:408:1ed::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9499.2; Wed, 7 Jan 2026 07:20:15 +0000 Received: from CO6PR10MB5409.namprd10.prod.outlook.com ([fe80::3c92:21f3:96a:b574]) by CO6PR10MB5409.namprd10.prod.outlook.com ([fe80::3c92:21f3:96a:b574%4]) with mapi id 15.20.9478.004; Wed, 7 Jan 2026 07:20:15 +0000 From: Ankur Arora To: linux-kernel@vger.kernel.org, linux-mm@kvack.org, x86@kernel.org Cc: akpm@linux-foundation.org, david@kernel.org, bp@alien8.de, dave.hansen@linux.intel.com, hpa@zytor.com, mingo@redhat.com, mjguzik@gmail.com, luto@kernel.org, peterz@infradead.org, tglx@linutronix.de, willy@infradead.org, raghavendra.kt@amd.com, chleroy@kernel.org, ioworker0@gmail.com, lizhe.67@bytedance.com, boris.ostrovsky@oracle.com, konrad.wilk@oracle.com, ankur.a.arora@oracle.com Subject: [PATCH v11 2/8] mm: introduce clear_pages() and clear_user_pages() Date: Tue, 6 Jan 2026 23:20:03 -0800 Message-Id: <20260107072009.1615991-3-ankur.a.arora@oracle.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20260107072009.1615991-1-ankur.a.arora@oracle.com> References: <20260107072009.1615991-1-ankur.a.arora@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: MW4P223CA0014.NAMP223.PROD.OUTLOOK.COM (2603:10b6:303:80::19) To CO6PR10MB5409.namprd10.prod.outlook.com (2603:10b6:5:357::14) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CO6PR10MB5409:EE_|LV8PR10MB7750:EE_ X-MS-Office365-Filtering-Correlation-Id: 2d561d42-af28-42a3-5e2b-08de4dbd3420 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|1800799024|366016; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?ApvSLdrl48qibH7pIcZwCHO0pFaogrQaa6ivSC+6dM+S9zt9rwjafN4TTc+v?= =?us-ascii?Q?/w6x1fd5HcP3uaLtmEUUKznMvK6r4jmdZW3UVegFMwv2uXS/IVPD4XtRalZd?= =?us-ascii?Q?AmMQ0EmXAonTL5LQHOqY1hqe8UtsNsIFYa6JBXkyoIJnnMrcb/z/8AkBtpad?= =?us-ascii?Q?A/i1ZeE9gBgLLfDGakaR02Y+JZLDXyDAqEsFYXBK44OdkgCdVEhVjbDKjGtf?= =?us-ascii?Q?jZ1FQPs4TtcKvZsKlq2RuFZvy073cInMMHhV/1gWJrsrVJgCy26p8IGkswF1?= =?us-ascii?Q?J8uq44UrN+hyCuVOLiyF0lzmzfUCsEXDXJDIpuqpEuecJMqVif0zoNAI/AJ1?= =?us-ascii?Q?dF//lcqdfEU1hs8tPwM55XizzS1ZBWiSwD3Ie8HQr1qFaozRxn5GYIx1AVVn?= =?us-ascii?Q?TwuWw86W3d3gRtEwL0HbTSXPP0+Iw4HBrgjmqvT2tbetM47BIlHQdFuqx29W?= =?us-ascii?Q?xwIDcGf9CTP5ETOiYxAKet+ubJo04hyRUWRCcrRFvLiPNDiIneN9JHkw683Z?= =?us-ascii?Q?6YerKcG/Udi/j8Lv4YdLWcskSnoKmZZ09gCoxVkHEMk44RXeE7vbsBKER7hi?= =?us-ascii?Q?BhxH2CRK1Ir9MFx0mjL8MwhLWWg7EFUQPPO7bxkAqb7zDvvO5J/oalbtdoKl?= =?us-ascii?Q?Ib2B1gWT8nsZLjK2vN9rXhukcFO0IIk3EhKnNZoLVsolPrV4ap0cavvD4Aji?= =?us-ascii?Q?Dl2KKYrEVBR4RHrOCqLLjjCOdflFY50ragSETLZqqG6ipTmv7NdHxSB3Bm9I?= =?us-ascii?Q?e2goPlpdCE4CdUfmBePDcBF14kFv66SiYlbnJue12K4zrz7mw0Z9+Otux8Uq?= =?us-ascii?Q?hS2AVbr1cQQw+B3mUJrBvio3FpBGXUxfib1jo29MwGD0h/aNmDS31aWLt4Ls?= =?us-ascii?Q?pS2by3hSh9S0L/jWtY6t9nnXSvsV63paxDzghm5HOftOvNSrrunUM2QiPvd1?= =?us-ascii?Q?9q83lYlXLf2n0vZTYsBdbrBjXFd5BdYmN14wi5xoH+JjBxk2tpCAkXs5/rD2?= =?us-ascii?Q?qXE22lOozkde9AdWhem9Hq+y1UaHV2IdHNGbOXNhiiRxpbyn1v6hcvPoXRoj?= =?us-ascii?Q?h6sCX3ktyAZJuOLtgw5Ulx/Wjnv8BDlheDLRmOGr1xjuSRjUT8TiHJU482Ra?= =?us-ascii?Q?4QIBsalmVhcjTHbaedqbKMFczETMUPhcKcngpC72Wd3kbN/H3iOdNiVqMVBK?= =?us-ascii?Q?Hsmjl17sE1NORPevTVkwRTLLQSpC5iqBpZ7HofBDUpzXProaFTmaexpYNRKy?= =?us-ascii?Q?VOcig0hPORi7rjapUYtcJIYC3pLHukOOzclLFmm0xS3dtsGsZcHzSXCAPc9h?= =?us-ascii?Q?+2d3PiJLGot7PrNtDm7D/uajD03NunaxWFoJNJwOPGy8HghW7ioOJQOuVim4?= =?us-ascii?Q?P4cRf5Zdm+44U//RHoya2I5UucyrpnTqmGNLp93cdVXbU/8EcmSExBTjZ+WV?= =?us-ascii?Q?LCLX2nEBIJih4TqEdTBD91lLWYIgb2nK?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CO6PR10MB5409.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(7416014)(1800799024)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?t9j6TOPwDlep3mly7bDOGgRsg/GVtcN1BZrwNkPfwFEvkbkZyiI3q75XbsZ3?= =?us-ascii?Q?DEaad8pZvI1enwOFzzpJOanfxIoMVlsHyGDMogFc40hfqWmki1avw3hGKLMa?= =?us-ascii?Q?i4K8WZ8WreHrAfou6Jp8WWWl+EeDc8v94ev2RocykDfQbMUSd+L/kMtxx1bV?= =?us-ascii?Q?GWImO6ksgM5XldA9ryOV4NLtx/6zCKkPMByjjl5cECJiRq5Fzt9OFCAj2Gqi?= =?us-ascii?Q?O0twnf+rKzF41NxU3+joAv2NpfH6o8vka8Po1I5gPiKdgG99mSGQ7hyEBcON?= =?us-ascii?Q?6mlKmiAfjsFr14qrB2CsMkOPR43pUTt9iRrPlIg5cxILD6o9TCn2kgcVRDlj?= =?us-ascii?Q?ZsHoRsjER5ClayxBNMycbMUmJSHH2MMDVR1d4YV/DLSR5IwKKn4IDGFeHLX7?= =?us-ascii?Q?gsrQTUDCHXuVjm+PzgA2GN1h3/lCIVpyzTmQrWBlNiUJdu/ceCljRwi3OV1t?= =?us-ascii?Q?6XsWyuzUL3fKJIDKdEHSpCnBC8yN7MG2tiDmtJdVpbgLVczn9uSx8jyeF2+U?= =?us-ascii?Q?BTDra0qc2u1DYBMp5v2b+qXJcCG4OLRpO2rVWhxes0EWop33FG7s4KEIpIOH?= =?us-ascii?Q?JnA0UXQ+BppQgTIk17XlnpB3DQf2yHMUfgAa6FdBmd4sAs6+KdQv7m3e9F1+?= =?us-ascii?Q?Ra0gdrnSyn0Z5G96tyWN14SP9SwjqQhCfnb84teHk7td1++QuKzPcyiApzf0?= =?us-ascii?Q?0rwGmw0GBNNmr74EceITv6c97aJoVhDU7HC+g5ICJ3pq3k/n3w49DEvAHBm2?= =?us-ascii?Q?J/m31wpcwwQcfoQG/e+ISSCNAhuZnuWlQ718pptoKRyyZzvVLGl2eJmN3S2L?= =?us-ascii?Q?GY786Rq3KbwMAoelAeoXaorLR6Nie9y2jLa/BmgJjrdQ6c6cirpCmBn+ud33?= =?us-ascii?Q?2cpsFZkifXSTJYXZNMsIHVkDqb+o6sS5opWG/jgS1IwuzXcN3BfM9S7gH0Uo?= =?us-ascii?Q?CQot81eZXAAFNKwQRRVualpEkjVbzWyPmIVmU55FU+CWP81c3j8wehtiFNin?= =?us-ascii?Q?AXdv+xJKbFGulp7qqnSB4/xGy/q6cGbGmADpEc6S64MA105Zk1Q9RojAS+Kb?= =?us-ascii?Q?ujf0q6ybgonVfjF2uCeczu1FmBTOk4hwgqJBD2adDaspAeiA2Mwr43aTvZNv?= =?us-ascii?Q?bO8KsLGFjqyLkk4mTQBM6Q+5P57lYdysIlIDMolaaUkNQahWBKlBEmlE/rPj?= =?us-ascii?Q?A+pMJJqHaPRT+uHbR+Rvk5tWD8LKrAqq3ceibrF2H1duic6NuJ2VtTEfXNom?= =?us-ascii?Q?4hSwfYiKgtQb9BGhUs6GJ74DdJ+l8umjF4Ftg8NSS+XVK1QpangBrb+imyeM?= =?us-ascii?Q?oFXAxwNZDFgaHvTmglGmridYskwxoNGXCrKGf7kGdUMJyGJWTPEZb8DcfibN?= =?us-ascii?Q?L0pCvAq13wF+nbAicJGWsIIcC+RpiMKkAgQ0U7HmffTfNu7wUSXbYKKVfx7y?= =?us-ascii?Q?8DGVG4NqIzhMQWAv1K5zTK7hyByVZjvOIlk2j6RdIOAa2IPs6VWaUpibC/5p?= =?us-ascii?Q?jJEH8UnUj8UtqDgZ3fPGUSnilAgxgafH+v1vKoi3ILeEiPHH0v47Sv/GqJcX?= =?us-ascii?Q?MrEKui2mSce0YTflwxNIvxB84En944lUyjcrXGFVMLQR+UBGDip0uT7SAvkL?= =?us-ascii?Q?O/pfTZ+LSV+ZNgvLJ3Vsuny9IEjJ0Qf7qRqa/oWEct49MoRKqDhn81aFslni?= =?us-ascii?Q?Wil6614H3fQsj50443EyIoJs7a/+pba04xn6vnHAo0Sjjh4jL3/L/+DXn3oK?= =?us-ascii?Q?OqZnOPjFfD8Y92DwrAFAw2QFPJDT8OA=3D?= X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: OYohaRilUdZXHf7TroXpJF0UkW52l91c++K73QwpGTw5GEBG3VmCPNYbqjlQXFQhsTqqQF7trrj+gahqt7H0AdOsBQ9J7zn5B11VWYrt1AROjcYdDDv7L3WBYsOGofickf/+PjJowr1voCh2vPWEjVwj21CpxEKlOXyxdnTlJ80ckj5DlcXD2mX41SKZX7hR+5f2phpyX2xMzbdntbbWnW0IFvnaPZ7D2c7FnhQR/WT1rSM8iVGYVowfD9GS6y450s32IZ8FQm6dlhKwgzpiI7Iu/sCVLTDuczNIC+n4CzrvE01o51oaBYYEBCK6F1CO1OR4QtUb7hOrYiHbg80HWnkHLRDdXxqnROjUaccEomOcQKJeFiaGIDpUhwReM1SoGgz+WfRKEynejoA5vws+T2IhWnLwV+2bZesz2ETbhJZSN9hDya/7qkCm2CSkb70G8pekgUxZwQjt2I/h/gdHc3J1I4nCUpDf0sj0AmL+JdYFXFkZ9CfumKgoO56wV0YPlaBJSIKr149eu09G4S5eoNrjUFJAmZfttoypqoZdgw0Z4yEnQYec3jQel20YLQm29Q1oGr22aFypxHhtvVWk7yGmUYmbnIVnx/oD9uVGOxo= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 2d561d42-af28-42a3-5e2b-08de4dbd3420 X-MS-Exchange-CrossTenant-AuthSource: CO6PR10MB5409.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Jan 2026 07:20:15.3060 (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: iDf1j3VrPU2n6aJp+LRcP/WpWkQL1mPhL/Oaboz9E3J5M9gnXseDRvX/kLZmRnR3zI/2HpBZZlPnNcynCdPidKt8RAJmcXCQZkwItM9QAak= X-MS-Exchange-Transport-CrossTenantHeadersStamped: LV8PR10MB7750 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2026-01-06_03,2026-01-06_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 phishscore=0 bulkscore=0 suspectscore=0 mlxscore=0 spamscore=0 mlxlogscore=958 adultscore=0 malwarescore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2512120000 definitions=main-2601070058 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTA3MDA1NyBTYWx0ZWRfXywq7Wju8gm8u 7we8kHEtxYH89GM68BCm9NxVBlynNR3rv4qarUIS7XpQc5WbdVP//xL0V3wriJ1KCDw3QjLUQb7 6+baFCbL/wtXP8moDwpvdYENYsqpq9Q62oZ2cT9NAJF4AdiM0M0QKElaAuoh3Royn3LDvTCZlfx JEl9tXqmZutreJxq4gqQ9JIMzDu2iiYcjpBmczQFtl7MJpKR94b4u8vEUBJRNf8K1t1UWEBWoT2 ZeHiYo2kOcdyofL3nQwrqVt5R7o40Odo6brtPWHlC2XSwOOpqkTbZow8LuU5S6BDoeIq4BUbEw2 nQsj1oIPjKqH/K1uO3Q7dP5dK6vBN4gFc+KX3r01decwBFIBzAGWjfB7Ruh5en7sN5nwFggHhK/ yUVpQY6SMYb4/0LtKLPx9aFGybTZmbaBreVBElb17WS5g3XUpJNDIG4/OG7I1C6pUu62fNmP+LA ZV8cQPk7otQ392RLvBA== X-Proofpoint-GUID: 5UBSzj0ne32KF0_pJx9Fetl7qmynhJoo X-Authority-Analysis: v=2.4 cv=aLj9aL9m c=1 sm=1 tr=0 ts=695e0935 cx=c_pps a=OOZaFjgC48PWsiFpTAqLcw==:117 a=OOZaFjgC48PWsiFpTAqLcw==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=vUbySO9Y5rIA:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=yPCof4ZbAAAA:8 a=YbsGKDt_2YbWZ6r6MXMA:9 X-Proofpoint-ORIG-GUID: 5UBSzj0ne32KF0_pJx9Fetl7qmynhJoo Content-Type: text/plain; charset="utf-8" Introduce clear_pages(), to be overridden by architectures that support more efficient clearing of consecutive pages. Also introduce clear_user_pages(), however, we will not expect this function to be overridden anytime soon. As we do for clear_user_page(), define clear_user_pages() only if the architecture does not define clear_user_highpage(). That is because if the architecture does define clear_user_highpage(), then it likely needs some flushing magic when clearing user pages or highpages. This means we can get away without defining clear_user_pages(), since, much like its single page sibling, its only potential user is the generic clear_user_highpages() which should instead be using clear_user_highpage(). Signed-off-by: Ankur Arora Acked-by: David Hildenbrand (Red Hat) --- include/linux/highmem.h | 33 +++++++++++++++++++++++++++++++++ include/linux/mm.h | 20 ++++++++++++++++++++ 2 files changed, 53 insertions(+) diff --git a/include/linux/highmem.h b/include/linux/highmem.h index 393bd51e5a1f..019ab7d8c841 100644 --- a/include/linux/highmem.h +++ b/include/linux/highmem.h @@ -218,6 +218,39 @@ static inline void clear_user_page(void *addr, unsigne= d long vaddr, struct page } #endif =20 +/** + * clear_user_pages() - clear a page range to be mapped to user space + * @addr: start address + * @vaddr: start address of the user mapping + * @page: start page + * @npages: number of pages + * + * Assumes that the region (@addr, +@npages) has been validated + * already so this does no exception handling. + * + * If the architecture provides a clear_user_page(), use that; + * otherwise, we can safely use clear_pages(). + */ +static inline void clear_user_pages(void *addr, unsigned long vaddr, + struct page *page, unsigned int npages) +{ + +#ifdef clear_user_page + do { + clear_user_page(addr, vaddr, page); + addr +=3D PAGE_SIZE; + vaddr +=3D PAGE_SIZE; + page++; + } while (--npages); +#else + /* + * Prefer clear_pages() to allow for architectural optimizations + * when operating on contiguous page ranges. + */ + clear_pages(addr, npages); +#endif +} + /* when CONFIG_HIGHMEM is not set these will be plain clear/copy_page */ static inline void clear_user_highpage(struct page *page, unsigned long va= ddr) { diff --git a/include/linux/mm.h b/include/linux/mm.h index 6f959d8ca4b4..a4a9a8d1ffec 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h @@ -4194,6 +4194,26 @@ static inline void clear_page_guard(struct zone *zon= e, struct page *page, unsigned int order) {} #endif /* CONFIG_DEBUG_PAGEALLOC */ =20 +#ifndef clear_pages +/** + * clear_pages() - clear a page range for kernel-internal use. + * @addr: start address + * @npages: number of pages + * + * Use clear_user_pages() instead when clearing a page range to be + * mapped to user space. + * + * Does absolutely no exception handling. + */ +static inline void clear_pages(void *addr, unsigned int npages) +{ + do { + clear_page(addr); + addr +=3D PAGE_SIZE; + } while (--npages); +} +#endif + #ifdef __HAVE_ARCH_GATE_AREA extern struct vm_area_struct *get_gate_vma(struct mm_struct *mm); extern int in_gate_area_no_mm(unsigned long addr); --=20 2.31.1 From nobody Mon Feb 9 00:42:13 2026 Received: from mx0b-00069f02.pphosted.com (mx0b-00069f02.pphosted.com [205.220.177.32]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8CA9513AA2F for ; Wed, 7 Jan 2026 07:28:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=205.220.177.32 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767770883; cv=fail; b=WLux7kbaCK6PvpvADs6SJ+aa0E6Pz8CbCmjwn/FD19Hnpgt0k7+uqJJ0jS0bNZPdwwSRD9sX8S+jVXUTnLGdaJ6JA5Hw8M0haFOGBH4a5FdabUk826XgfxJKIeV+jPm8UJu6X2bj7bfNNG/Q3Px4ukgKwRrBYbrFDl8seeYx37I= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767770883; c=relaxed/simple; bh=OOKEenmS8UEV6kqwm9Pukuy/E8jxwCfaH5pxSn/KEro=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=Fdpc967MfCrFEeah0k5arHvlU35qVYJQLa2IaSM8kE2yaTxEQQnf36Ic+HAzbN0x8mVyZXF/K6MnLFpUYFN8eov4jruAQYqgexkH2ZQVIi/nQzWTadktEfUnktJUyg5xTPXUCygkNkJlT/1muKcB7h76RUXg5/qXsOdI6dJk+oA= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oracle.com; spf=pass smtp.mailfrom=oracle.com; dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b=IO93mUND; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=sXKukkTd; arc=fail smtp.client-ip=205.220.177.32 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oracle.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oracle.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b="IO93mUND"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="sXKukkTd" Received: from pps.filterd (m0246631.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 6077ARtK1392634; Wed, 7 Jan 2026 07:27:24 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-2025-04-25; bh=/ELCC6Q63pKmVdkFyExftbzFcFFpPI4eTJB9Po95odE=; b= IO93mUNDiAErGoABEUYNFzuKe82+gxvGGqQLXJ9jESvz1kRxa25b2OyRcENo+bZu cHR4B282NqQegPQpNAZdKCQY9TGeoa9BkDOY2RuPHkQYtF2lMo+oBZp/dmb9E+Ab Yz4TMGKK6YUCqEbvo+Kq6WRFQlQG/VyJL08ljX8As+nHxJtbXcIL6egPh+PTpN7g wFTtzi2bB7TJhS9jPJGE6y1927PBqcXl8QmJRnmj+X/g7FP9ZXeRhezD4ZrlYtep 1opYFgf2HrV7pW2/fWQGPqy/bPTi96RZD47sfXEZltkJ/b/zjyk2Jr/pJsftSlJI KoGqreFiaioSHQf1QNIEDA== Received: from iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta03.appoci.oracle.com [130.35.103.27]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4bhjv780cw-3 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 07 Jan 2026 07:27:24 +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 60765tMU026351; Wed, 7 Jan 2026 07:20:23 GMT Received: from bn1pr04cu002.outbound.protection.outlook.com (mail-eastus2azon11010052.outbound.protection.outlook.com [52.101.56.52]) by iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 4besjkt18d-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 07 Jan 2026 07:20:22 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Yenjyorie2wqTSXEvjHfxxXMe/7ZT0EnLy9WoLJA0JlNELXgbH8IBfYVixCStaMPYSSJLd5ApiMyXvfYh21Hhjqwc9AbQSDT1KmvN0GLch15HDk8yOPN5kZymF3AEFRR9yh8WeGdSvZ7XWzdTy4hm0bZywtdO/Tr/ydMWI4PRL3xPsmFlmJReW3NOBpCZj4rK7bmfkWqRJhDE8pVTtn1696iZrwZuJuO7dzDxu6fXLS6ym7NkON+b3ycQZVfl4Bwf500ymycPPCvqxb+Qn2UKE/nh1dm66gxwtNDgLzmTqe+phDxM0nGtH5u9ao+xz7kkTjJMb8WBOsMM4OHCZJ+XQ== 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=/ELCC6Q63pKmVdkFyExftbzFcFFpPI4eTJB9Po95odE=; b=K9qJlTK+Ikg7a2k6x53DWqmtiXYtG0OUY9dEgxX2xQu6CUnhCkW8oMVDuVKbRpWAYJ2m0wRe3Rf5D7w4kSdvC98VOSeSq2yWd1TOXmz7M8IrdWkla5QHBAIi7GnwlOIfBZRYNGZ+/c7F/psa+LIF+CnyhE2UvG6f8wXEkDx8frwVrUYv5+OMnLphl/oMeS/bEcyZmXTZGHyRY8iYk+EL1OgLIawTP+F4ZoMNV6qE2cb1i4K7w6Go/jGZx9L+KaY9tq1EvhP5gdKDTYnoDt5+6RGWfMfyJW+PeCbdqgb9iPqVUBNoTAYXX3ASI3gHTUALcOzlB8pvLXoZ7YqAbVgXMw== 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=/ELCC6Q63pKmVdkFyExftbzFcFFpPI4eTJB9Po95odE=; b=sXKukkTdLCCv+XYN+N8SMm0iXXXYEqVBHPj+QEdJY8hHCTwZuEOjVlB6apZOs0WqSnqP3PCEOkbNaFRV1Rh1gDhkDHt9GWTJ8ieUp3a1fCZek1e3I2nHIGBXLi9u+E7msFm81I1vFp1D7idgO7n8M75JwG20RZPnnAI3497HVs4= Received: from CO6PR10MB5409.namprd10.prod.outlook.com (2603:10b6:5:357::14) by LV8PR10MB7750.namprd10.prod.outlook.com (2603:10b6:408:1ed::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9499.2; Wed, 7 Jan 2026 07:20:20 +0000 Received: from CO6PR10MB5409.namprd10.prod.outlook.com ([fe80::3c92:21f3:96a:b574]) by CO6PR10MB5409.namprd10.prod.outlook.com ([fe80::3c92:21f3:96a:b574%4]) with mapi id 15.20.9478.004; Wed, 7 Jan 2026 07:20:19 +0000 From: Ankur Arora To: linux-kernel@vger.kernel.org, linux-mm@kvack.org, x86@kernel.org Cc: akpm@linux-foundation.org, david@kernel.org, bp@alien8.de, dave.hansen@linux.intel.com, hpa@zytor.com, mingo@redhat.com, mjguzik@gmail.com, luto@kernel.org, peterz@infradead.org, tglx@linutronix.de, willy@infradead.org, raghavendra.kt@amd.com, chleroy@kernel.org, ioworker0@gmail.com, lizhe.67@bytedance.com, boris.ostrovsky@oracle.com, konrad.wilk@oracle.com, ankur.a.arora@oracle.com Subject: [PATCH v11 3/8] highmem: introduce clear_user_highpages() Date: Tue, 6 Jan 2026 23:20:04 -0800 Message-Id: <20260107072009.1615991-4-ankur.a.arora@oracle.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20260107072009.1615991-1-ankur.a.arora@oracle.com> References: <20260107072009.1615991-1-ankur.a.arora@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: MW4P223CA0013.NAMP223.PROD.OUTLOOK.COM (2603:10b6:303:80::18) To CO6PR10MB5409.namprd10.prod.outlook.com (2603:10b6:5:357::14) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CO6PR10MB5409:EE_|LV8PR10MB7750:EE_ X-MS-Office365-Filtering-Correlation-Id: de92d0b3-961e-4f23-9c1f-08de4dbd36cf X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|1800799024|366016; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?ohjkz+JgvJcqmthQhxPx0QWsKXr2KbxIzhjvkkO1rJeoP5EFkmWUXJyA9sB3?= =?us-ascii?Q?7th5qY0Z/C/+T0v3R7igeDgijFvuSN4gngYkFq9chFN4dJBsKbwVPb+Bveso?= =?us-ascii?Q?Jc9vPT2cWaioX1iWRdyxRK1dWrOelIE0StzvO4gaShrBni3ffA6pLqoG4Hxl?= =?us-ascii?Q?yMy9dki5UU80WWmHv30+Vx0/GFM3xFg3R9KwoY2XbpxPv/nzG4lStahEuO6P?= =?us-ascii?Q?5wi3qWMvEVsR2SWfAqdwKiI9KVdDeU4NvN68PObxQ/x7MCu3geAka9QPFfYy?= =?us-ascii?Q?sOMT83Wc3O5D7pSzx/xjimOXVuZ3/q9MrQv0MVzj98hG30oEdcjNv1wRgTLi?= =?us-ascii?Q?ZvNhQ0pbwdb9p1ZeR55ri++zmQmQNlZfhPYI4HD3hnITUfeYR5D0/zAElDjg?= =?us-ascii?Q?/0cEO2XrWLVwpWWIUk4BO8ySUYjfeFTgwukyc7CKJfZhixMNp9fSh4bY4Z6d?= =?us-ascii?Q?gSUcUFoCdm5zV5V+3bcYhYrD6siUkLhf5Jo/FPrawo3DJ/4Q6oLSL9XWhPoN?= =?us-ascii?Q?YLNl10sW30h7VSOmiL1RisnydH+kwkOTCsChaE4aWtfEd/7rM3XMsTnCg6qr?= =?us-ascii?Q?E039j4em7p+RFx7Ch2yNVViVxEbCYnAyJQIWE+0nODp+BWPrM5s811LOKhVM?= =?us-ascii?Q?iFMZH7AM3FFCbmQEnWb9/GWF48355OtawwbsAcImwX9IewySxd3Qm7kmFIlK?= =?us-ascii?Q?/QiZO+zHo9rozQhWPlOgR9qAnxDSPq3NmPjGP4/qVc+igfW6cqzaMr/vlWUw?= =?us-ascii?Q?uKVALl5VW8PsuiePjRDAY/1i9ALExqNn8JGwgy45FPNyl5ujNcCTwFQfDKsB?= =?us-ascii?Q?uU6LayJiFgy7Jv/NQJXcAjUShRjBC874ElMppCpp+y79wZcjzBQ/BUFB1+xr?= =?us-ascii?Q?bHWuh4jF9QS6/zgBua1t+sSExaRUD8ryA4zcUYEIk4Ih8MpOgmm7YXIeSTAC?= =?us-ascii?Q?zkHyFZdcU/41dovNKC6BU38l4QPWXPk045Ue3xpE/KjlfiEi0qVmv2F3qBB6?= =?us-ascii?Q?QlSk7vb16JpfqGAVQwQT/0naA7XqqKZ9pvg4U5NlSspGr2QYLbdwkKqtsv0e?= =?us-ascii?Q?7qBkSYgwzxW0GsczwkaB1CPdwKFkmNZ9IxgseuzJmlM5CSmGi3uXt4tVV7if?= =?us-ascii?Q?2Wa6EIHyboHWOyoYNFd7Opcn0dltSSVkzsLXoYhGV7lpNhqus3bmJ+1UITuK?= =?us-ascii?Q?TDpmBHG2PcsGuYu+VIo7lBc21oaWG68sQdhhnn433dXZA2nGCL356y4Syd+i?= =?us-ascii?Q?1Ma7QadWfxcq6j+Kz6hJZ3PbCC7e1YwteG9HBkqv7nDWp2PKgMzeYlCsah5c?= =?us-ascii?Q?4zYZAxVCeZbEQpkgbW77Hn4fBu+C3xiwuxMWn3tw5pKYpfoBB4jtV1HCCz53?= =?us-ascii?Q?kCUWtyy5agua0MRs/CFiAjtGzWc/Md7TbBPnV86O7QU+uj0Ax3lkQqwImUj6?= =?us-ascii?Q?iSKK9Aom/v7SkXP/wky7fVXhabELEeXP?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CO6PR10MB5409.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(7416014)(1800799024)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?280GgMVNqSCMEaMhdKzjj9Dx7rn643EG4cDNTRg8xLqav9TqtBIb9x5jjufj?= =?us-ascii?Q?cHqL6lVV8904VgR0BvF0Mxp9rdzD8EOulRGwURFnFzkDIIplThMNbw2hMT2Q?= =?us-ascii?Q?0IJWv3jI7N1zqpkKEBw2qYGkErAT3ykjUfL8SV/DoKUZ/a5hK96doJnvxZE1?= =?us-ascii?Q?37unyKtIntjvUjidZFekDZE8rYii4SjlYpHXsVwnfXxASirP5WbbULpG21rl?= =?us-ascii?Q?PUNDA9XiUGg5cyXgJxRJ2egbkSKHwo0hpY1WzUqbscbI3bhFESma1gn+1RdX?= =?us-ascii?Q?j5KTl+/4aZ3/djDkOQAZTgbVZTIpScSdAgs6NJalful8EPzTRUA4LTy95x20?= =?us-ascii?Q?rlsxce9tFUujzfQpTMqGLsA51oqNNAkopipF9EIlF79d3PJryAZZCH7b5V6S?= =?us-ascii?Q?8Z7Vvb7gUEu2hRKBz5nmb1sNFdHQja//hzcaFbcdWwHnV3iSDz+Q+RAiHdQf?= =?us-ascii?Q?wQ3uRtg5qub/ssD63HXHb38lTHupL9AeVlR5KJ0nIXySi9+lQUADmJoz2pgS?= =?us-ascii?Q?PnPswSHQovRfYpd0XUW6FVADlMdl4IDTBxKMaWR+pMlQm0XPD3uJwSSn0fJL?= =?us-ascii?Q?30QOmfqFRCPiUL27se65ftVaiYT6AEweTIP7gdDeb+JLpvib/7pEOCIEXQQ0?= =?us-ascii?Q?3OsrVPeW0ksVSjWQfjt5/l0BXIcp6Sf1ZcFDvYZuCDCsX0/i0yvZTeGT9C3p?= =?us-ascii?Q?+by8XeUt9VI2YzWFQEYqZGdJuM3dzNSlXafI0FA7A7R9ko6gnMA4k3dkbDHY?= =?us-ascii?Q?2aPfXFS7RPp47N3Y2nrX5oq4KTwltUobSFCYHoo7nGkeYTJv+3YIHTS+Avv6?= =?us-ascii?Q?mm6U3bQ7ud1bF7aLLBAMWET8YQgxaEeBJ75C8zYgM3sSIPEXFPxzhbjiF1h2?= =?us-ascii?Q?LNt6Fvw6e5WrX86mrScnneDRypkWEqH1syUpXuNcHlbvJ4ZJqQdDl3ooZFTj?= =?us-ascii?Q?e7u6YVYiq/Jy8t85WUmO7tzaDhOm/BYFesY546YsIn1XbTfYBx2q8QXAy0W6?= =?us-ascii?Q?GN2Nu/kYX7GB44R5Fc5miEIV66Dobrqe1NDYSyd3qVX6Z3pRpjwJ5OTWiWEY?= =?us-ascii?Q?X1A5Lt+LUKOPTjkTYdoaYnZtHsCk2zzE/Nv+O6Q3CZFziiaH0s5HZAYsW0gD?= =?us-ascii?Q?Qa4YvlToNL6FM8g0JRxTem/jxj5O4gba0fsvGik+N0NccOwlL0gGzSpCSz/V?= =?us-ascii?Q?c7G/37wetBo8TzO2565Ina+gcXapZemp6PAhj2z+jNwVRR87vAZZj5K+eNc9?= =?us-ascii?Q?QClnz27NwoCZ7q8AmsgJVgZa86KsU6hV09FbAgOlBaN5mbD5d75cS5AnXWcs?= =?us-ascii?Q?6/heK2MZ+H/GblJ476cTlYHakWQdI3L6BTnDIPJwHWIo8+tT2vB0BkjmztM2?= =?us-ascii?Q?n+2IJT1nkl+e11T5Gn7yhd86IS2gM6WBcFd2O9LqqPvtKzp0gaRhUbeNrt28?= =?us-ascii?Q?aJ/IukQJPQF8kkAHMh1EK8rsppcIQWIbzl6WxEPWeN8XUvhfBbkWGLFt75dp?= =?us-ascii?Q?b8iNfHnZ7/XwalQao2k8Bwj19K+2CEkLONqoALE7uzEbZvb0Nu7Aj0mOnamJ?= =?us-ascii?Q?9IV0i6anaTaf8vvqw2H4uaEpyiyxvJUFbNf9sTmyHnRMEFzf1nqzmaFAWihu?= =?us-ascii?Q?7G/pYBq9+7w7/gdGJApVhxmDPCTf3r2LdjmjKHFVOntGnpgt205Ar43MZIdD?= =?us-ascii?Q?zEGH49D0qlBR3muru2Npc0MkLhQ9YuttlQIBC2L0yf1c52WnuPyc9akv7lWv?= =?us-ascii?Q?pISs160wOLPT4ts+k7G/CPkL4WerPlM=3D?= X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: Ze0i6iqsXgnEbbEZA6SyY6LY1lzEa2ndd3yQ54D7eOhSaq3ETJCSB/Q11YahNwBQ/0qfd3rp7YQWbhl+8bmpi7ccntRmCrwGBexBuyoxkLjEaJwI7rDeboI+L9eqU1VVHLM9ZA6YLdJZNrzSJWVkcsGMlzoPOhOfpguOVKmAXFNJ/Yht2tgac9GdT/h6n87yUTS7nr1WykNzYbBaH2Gc9G42OogZiuZSbbPF6IMjGVJVYMz0ME9OaUczBSMZ+vRRyi3F4vQm6MVsoF1kzWvL4NXnvf1GTeFqZrL83aJ6XAQCgseJaSxRcCwLOpOly3igjOwmjarWjrkMTTbVxuIAvk4t7qb0MyVeVn7oh+Cj2kat7SXC66+aa23tw6eEzIzMxGb31s1WNFPf2ScXHn8ImxEDQYavaSBFyx7Kbc5MQ/EYDgGWoGui4uNbPENnsSYdizQDo1hGH+LPWH4wsjl+HRLH5eRKL+sH6U90DX1dELff4t8a+uhkCsqyz7gffVoRCL2ctJN6hpFvWjbbmDN16CS/1SvlCLhqlcg9IRx5ap87WoooTXwyt0dlnRdVtHbYmAW0UNYYMgWdlKw22S01ueDZziIkxQIfbOUqBKHqP2k= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: de92d0b3-961e-4f23-9c1f-08de4dbd36cf X-MS-Exchange-CrossTenant-AuthSource: CO6PR10MB5409.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Jan 2026 07:20:19.7984 (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: y1PwrDu6WMQ5b1RU2V0v6DlleVi5a3QgGVImfoe1TqM6tSIDP/Qv8lxFO6bPC/t23UbE1Jt0isjKqpC05ORdq2tmAcZKtRgpuGt/5RYuytE= X-MS-Exchange-Transport-CrossTenantHeadersStamped: LV8PR10MB7750 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2026-01-06_03,2026-01-06_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 adultscore=0 bulkscore=0 malwarescore=0 spamscore=0 suspectscore=0 mlxscore=0 mlxlogscore=999 phishscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2512120000 definitions=main-2601070058 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTA3MDA1OSBTYWx0ZWRfX7vS2VIOHCkCF isvmWWnCa2RGmCo4qWjSyVxjLplw+u5eSOKD+47Cufi0KuHwiQi9gS45fkH+50wSuLJJ5BnR0VM mgi5Txu7Tnp2e6su/b76rdcASnok5x6xBqGlyB7MPU7QBzorwi5juu+e7Xy7jrvirWR5WLIWqt+ g//kf4j6o/VTFVEJIZoyec7zGjEwkBZ9z/eQCnCnFBFwjSFOPyV6n/vF1Cvwv89EAmpeICf3bke rYT3wIhi4H/e8G030gcZONW02WQTWS9zwPHueqCby2fiVtUkHxRiPX9eX2fXIU1MPvymM40jMsI 1CxUV/2nY/h2D4G7qoj4FfDMqR6H66h5DHAi0wAjdoTFZnP6FHlVzFcI2vmlxoRRL12hF+ai/ys RFLaq8HltZRVbh1pBp9tKyc7X72KU4JH09hxjmbE+uHeYUmJGo/KvL1gCAt027jIC2haIilPmtE jcNTetiMfHJCv2Tft9C9OY7gVmI5LtEUTbrRz4/s= X-Proofpoint-GUID: tdRMOpxuKxkzcsI2AgCRSJ19Me9mFfSC X-Authority-Analysis: v=2.4 cv=aLj9aL9m c=1 sm=1 tr=0 ts=695e0adc b=1 cx=c_pps a=qoll8+KPOyaMroiJ2sR5sw==:117 a=qoll8+KPOyaMroiJ2sR5sw==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=vUbySO9Y5rIA:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=yPCof4ZbAAAA:8 a=bUlQXxcD_ynEEFdnt4UA:9 cc=ntf awl=host:12110 X-Proofpoint-ORIG-GUID: tdRMOpxuKxkzcsI2AgCRSJ19Me9mFfSC Content-Type: text/plain; charset="utf-8" Define clear_user_highpages() which uses the range clearing primitive, clear_user_pages(). We can safely use this when CONFIG_HIGHMEM is disabled and if the architecture does not have clear_user_highpage. The first is needed to ensure that contiguous page ranges stay contiguous which precludes intermediate maps via HIGMEM. The second, because if the architecture has clear_user_highpage(), it likely needs flushing magic when clearing the page, magic that we aren't privy to. For both of those cases, just fallback to a loop around clear_user_highpage(). Signed-off-by: Ankur Arora Acked-by: David Hildenbrand (Red Hat) --- include/linux/highmem.h | 45 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 44 insertions(+), 1 deletion(-) diff --git a/include/linux/highmem.h b/include/linux/highmem.h index 019ab7d8c841..af03db851a1d 100644 --- a/include/linux/highmem.h +++ b/include/linux/highmem.h @@ -251,7 +251,14 @@ static inline void clear_user_pages(void *addr, unsign= ed long vaddr, #endif } =20 -/* when CONFIG_HIGHMEM is not set these will be plain clear/copy_page */ +/** + * clear_user_highpage() - clear a page to be mapped to user space + * @page: start page + * @vaddr: start address of the user mapping + * + * With !CONFIG_HIGHMEM this (and the copy_user_highpage() below) will + * be plain clear_user_page() (and copy_user_page()). + */ static inline void clear_user_highpage(struct page *page, unsigned long va= ddr) { void *addr =3D kmap_local_page(page); @@ -260,6 +267,42 @@ static inline void clear_user_highpage(struct page *pa= ge, unsigned long vaddr) } #endif /* clear_user_highpage */ =20 +/** + * clear_user_highpages() - clear a page range to be mapped to user space + * @page: start page + * @vaddr: start address of the user mapping + * @npages: number of pages + * + * Assumes that all the pages in the region (@page, +@npages) are valid + * so this does no exception handling. + */ +static inline void clear_user_highpages(struct page *page, unsigned long v= addr, + unsigned int npages) +{ + +#if defined(clear_user_highpage) || defined(CONFIG_HIGHMEM) + /* + * An architecture defined clear_user_highpage() implies special + * handling is needed. + * + * So we use that or, the generic variant if CONFIG_HIGHMEM is + * enabled. + */ + do { + clear_user_highpage(page, vaddr); + vaddr +=3D PAGE_SIZE; + page++; + } while (--npages); +#else + + /* + * Prefer clear_user_pages() to allow for architectural optimizations + * when operating on contiguous page ranges. + */ + clear_user_pages(page_address(page), vaddr, page, npages); +#endif +} + #ifndef vma_alloc_zeroed_movable_folio /** * vma_alloc_zeroed_movable_folio - Allocate a zeroed page for a VMA. --=20 2.31.1 From nobody Mon Feb 9 00:42:13 2026 Received: from mx0a-00069f02.pphosted.com (mx0a-00069f02.pphosted.com [205.220.165.32]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 52DD4155757 for ; Wed, 7 Jan 2026 07:38:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=205.220.165.32 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767771485; cv=fail; b=TTngg4mkWhpvMcjAOWYPhshanStrF6i7Z4IJA8hAFZvCKh3S6QZzfiVnO7ZzPLxQDvw4sXxpcpBYzvSnyeh1oHibKFbn2etYzH3LNwq08S4jTw+Cvgr2QI1Bfq31qKYz8I1fZ0C9LfkSHTVts47ZbBbYp0CKzxk+smGvkicV8UE= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767771485; c=relaxed/simple; bh=tWgLkRS9VoF3Q/GX3/JbuTS8GaRfRJ3pKtwtBoU5EUU=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=d1XCWqOZxr5MyDu2BE85ujyCMvF7D+gh42jhPy6XvBYOpMCnhjUZ5fXYKa+T8c5+FhZ/q6ckDCAsbP56Y8tWF7O4qt23HFaNiqkHxQoRjbypca6zeNf4qSb4S8+/D4x+rWHgCKHaH3YSci4s/dM+42SbHGWr0yWfjOxXdlDCsng= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oracle.com; spf=pass smtp.mailfrom=oracle.com; dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b=nagjkpGW; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=qfdG769w; arc=fail smtp.client-ip=205.220.165.32 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oracle.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oracle.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b="nagjkpGW"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="qfdG769w" Received: from pps.filterd (m0246629.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 6076Kuo51431714; Wed, 7 Jan 2026 07:37:26 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-2025-04-25; bh=CcI7O2ifmp8h+hzDaZkOiO220BBOBv7DEpClU/C09cw=; b= nagjkpGWGpXuoTu0kwYM8xblp+CGkMllGJj8piI+OAv7wcQz0ZaeD1srL6Nl9K6i QPDLuJQ1Dfxhqn/fWqmYv/QPZ55ehBYZQRNdupTGAG3jZyBgIvhJii9+CVfKXxN0 tjc0DYXxkQjMGJg+voZcW5QQalR1+55FLOq4O2TC2Q0y4+r/oLtG7H/3gBTnZvZB LXdmcV1D4mmGw6K2rYPQOM/w2x16hPtaZOvSqIFiGBup2k0y9lRDtL+8YEV3+6dF e0emMleokejOuSNw4L1Me0o9UxRHRKmvwE8Z4lwPRIBJtGKG0BkNqrBoJhrdkf/y GoF2ZImn69Nnk2au6RV2Lw== Received: from iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta01.appoci.oracle.com [130.35.100.223]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4bhj4ug1wd-5 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 07 Jan 2026 07:37:25 +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 6076txVG020387; Wed, 7 Jan 2026 07:20:29 GMT Received: from bn1pr04cu002.outbound.protection.outlook.com (mail-eastus2azon11010032.outbound.protection.outlook.com [52.101.56.32]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 4besjkhwjh-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 07 Jan 2026 07:20:29 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=k3lX1cdVmrQ1FSEiy0yPqS9JHne949AnJ0i+kpgKpV1KI+VtEXa+2e3M91zGBDo6DC+PeBzLMKubbWCBnf2tO/fEpVe/hCVb1mSMYXMHhL1yzoqf6mEhNE8YRRv+kUuLt+6DPTqemdwybwL0HjRrlAcTu2WdpXtmNepQGrcgfIbjSefBlblNA5T7d0RsYBXR+Z7SbtKpqKTZEZBWKSQ79ktV6y0FUuMCRHU0FKbvYAUHz2++0Og0I7QdwBUxYGJ7GgdM6F1ED7tDRTepSmm2kamW5gotu/5Hy2FJBsCQAA6HpkJKUghiyhyW477AmuTpxakcJPntxh7xw+AROszqxQ== 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=CcI7O2ifmp8h+hzDaZkOiO220BBOBv7DEpClU/C09cw=; b=NxCeGvMuxfGGJG6ZZNH0EpsFqmLApupTKRzAM/X1TS+gO64F7QYdozaar2/ftPZHbTtcw1YK1MYkfgkGtw0FukO1sY7V76JNHPhLLraDguA0qXv9PQLlcQElv7U+pyuTigKCVcWaMThynRJCe2oY5do63nDXqnjarrsS/scxEZhlFU1nXer5Mn7i4hc6ctKT7Y6E6CXkqEbWeB1xV4ZmK2Pnz8mx56UmRhC6i2KQNsd4O6WbMVRjX+n+TKk9oX+Nn1VRn4sE9Y7pVBko5xqBak0kaW7OIeJginMWUe9+dOdElYCQZuwwni7/xI2++64bRKXv8OdVgJ4hdgTfJySHcA== 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=CcI7O2ifmp8h+hzDaZkOiO220BBOBv7DEpClU/C09cw=; b=qfdG769wi/B+HDt6Y8mZvOaCGAs3p4bu4pU0c8/vP+7qXJ9uN8H0DRokG5dHGGMmUaJeX0Z04F5dcmfwvTHwGf5T/H44LyH7Je9h/x3Q+0mjBEnWdj7zGUD0szydCqlSA/x5HDXDyvKmNbAo0e1z3+B/j6oxsDnBQHGTiY0113Q= Received: from CO6PR10MB5409.namprd10.prod.outlook.com (2603:10b6:5:357::14) by LV8PR10MB7750.namprd10.prod.outlook.com (2603:10b6:408:1ed::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9499.2; Wed, 7 Jan 2026 07:20:21 +0000 Received: from CO6PR10MB5409.namprd10.prod.outlook.com ([fe80::3c92:21f3:96a:b574]) by CO6PR10MB5409.namprd10.prod.outlook.com ([fe80::3c92:21f3:96a:b574%4]) with mapi id 15.20.9478.004; Wed, 7 Jan 2026 07:20:21 +0000 From: Ankur Arora To: linux-kernel@vger.kernel.org, linux-mm@kvack.org, x86@kernel.org Cc: akpm@linux-foundation.org, david@kernel.org, bp@alien8.de, dave.hansen@linux.intel.com, hpa@zytor.com, mingo@redhat.com, mjguzik@gmail.com, luto@kernel.org, peterz@infradead.org, tglx@linutronix.de, willy@infradead.org, raghavendra.kt@amd.com, chleroy@kernel.org, ioworker0@gmail.com, lizhe.67@bytedance.com, boris.ostrovsky@oracle.com, konrad.wilk@oracle.com, ankur.a.arora@oracle.com Subject: [PATCH v11 4/8] x86/mm: Simplify clear_page_* Date: Tue, 6 Jan 2026 23:20:05 -0800 Message-Id: <20260107072009.1615991-5-ankur.a.arora@oracle.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20260107072009.1615991-1-ankur.a.arora@oracle.com> References: <20260107072009.1615991-1-ankur.a.arora@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: MW4P223CA0023.NAMP223.PROD.OUTLOOK.COM (2603:10b6:303:80::28) To CO6PR10MB5409.namprd10.prod.outlook.com (2603:10b6:5:357::14) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CO6PR10MB5409:EE_|LV8PR10MB7750:EE_ X-MS-Office365-Filtering-Correlation-Id: e66d36c1-6ec0-4ed0-07fe-08de4dbd37aa X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|1800799024|366016; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?w59zlx0ZlEQAnCG4qY9FMU/Phig+Ojw/Hgi1KV5VeFWNFludkkTJvc858LN8?= =?us-ascii?Q?FggqrNDNpMxGYDyKvq0cRUOMMx6AP0lBrUlRHeZSQ8la7YA/bdbCmYD/9Fcs?= =?us-ascii?Q?DhMiMSEEUQ5a5tg8z398KVLD9/upxttPypt+kKvGRJg+CrsIL3bckCy9Zw57?= =?us-ascii?Q?MTq4pBA6Lx7a2umM4WS1ZNNxkszYswLhBDB7TeT7cjqb0IKeKq8n8Rj0PnxM?= =?us-ascii?Q?KfcbzIRljIktkBc4VapLOYUNSNmVmeMAh4nvik6Lnrd6M9U3ZnSsv/Fq3I06?= =?us-ascii?Q?f9XXG6tl/adPXi3zDpDlCn24YmQkjEMsX9ARuRTFaUtgRJS6z740i/ZPM36w?= =?us-ascii?Q?IMKsDIr75UBrKpmj2GmUa5QRyt85RAr0i83SN/6IhTpJbVCbvrNLAveAucNd?= =?us-ascii?Q?X8vVfD/4gjvDIW2XpWovn1ZndpNEBaICcEqDthG5WqwtHT54/pGOTSyOWw66?= =?us-ascii?Q?+E+vb7X8UbviziJZyocdcyaXCLFbNMZ0trRF67YZTzPPyYrFZshTyqq9w5Zs?= =?us-ascii?Q?oKrltClqP2gq6j/+tnOkhnxCsiyjJxL1WB7Kkr2I+8NsPrvjFjGnDNqWIDZk?= =?us-ascii?Q?QlBIkCzKCojH11nsrTFWEI1Pq47lWmT/rIUAnfbD7wn6TA6Niwzulm17svf0?= =?us-ascii?Q?wHc/9O4YpjhOlvJsLq5dfXu8gBs/abM//CRtksypJiRoDhgIoh4pidkJ6Teo?= =?us-ascii?Q?0iiOk2zd+4I6x4g1K/LgibooO3yPIicX33IgPkteL+0swfvCdjnybjLzOaik?= =?us-ascii?Q?sqGOFMLftrNm6dn0kl4WD+YPlPLYOfjq0Jye61WmJjHLhvQFhKzR8Lr+eVwl?= =?us-ascii?Q?cSC51ia7RPC3Po13gvHErgUY6jdNPb7BbqE56vMG4b8Yg/k4cvseVdDoQoTx?= =?us-ascii?Q?+Zk7J5apLGF9OaAwG9qna3mj5WvqufPnIrKuyAPIZ/CZk/R0g1OMQRSA5+in?= =?us-ascii?Q?oWwdY672ljoQ5WR0nBZIrEl5RLhlZBEzbL158nGyXOGJxBR/0HnnrX/hu8ic?= =?us-ascii?Q?STX+4iY8m11GnxO8Dsezvi/JRmj674OTDSBV67FHl027H7jxD5oU55Fhyd4e?= =?us-ascii?Q?94HKcTqfZUxPKFeuiyvMw3K8DDpEOkzZQdFJiRmxAaTWA9AfVjhlQ1EH/Sy/?= =?us-ascii?Q?QrjPvJJ5/tulDVoh4+4go3RnrcoBfYK1ttN5RVq1Hy+IK6gUNzls4SXc6AnJ?= =?us-ascii?Q?4uzHE/BlZLBkEahCrRukq7wDW0r4Z1e/H3TL3QHyOV7sRwI1R+WrfIcRVrsv?= =?us-ascii?Q?pir3hmKdULFOXsjFD59V843BR5uRj16NNLYu+kou7xX26DE1Qcq5/uev0ArJ?= =?us-ascii?Q?l2kjzg/SB7IeHhv6O0+fqVeltfDzhQx61cKUUih4TzYcf5X1hsiQ55CKo+O9?= =?us-ascii?Q?a2YQNEhZyG93QnURHbGIE3vtcCpC3wi5EWuAnPLAjGNo661QW4S9KaIzrfHK?= =?us-ascii?Q?HTLfndfCPkK894rMWLdaXeMZD1qv5MVE?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CO6PR10MB5409.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(7416014)(1800799024)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?OcUEo/umY4d8uhFH4oo5q2I0OEAC/24kg34M1mfoABz6W9Ngz72Asd43dWXZ?= =?us-ascii?Q?KpEm2tMaTkJ1XslM9NXh1B8yrsMJFGQAMBHr2VXtlSHx2OS1ehBTBuTMMRka?= =?us-ascii?Q?WUSbZhLtNmcO8RWEXSKqdg1s63hIgAnsLe6/JkDtB9+1GF0sgxiIFEy17iem?= =?us-ascii?Q?yflJfI4bvaUWHwDNv89y/Ygmr1mZZrSJMO9MfkUAom8Rf9MdAwV8e/KixV2e?= =?us-ascii?Q?gh4YHtCrsyP65FoWS/YJfSdO2awxo21V9ItRwN0HvnRUyycbspyP1SQNh1RG?= =?us-ascii?Q?51z/QBlb7o7D9d+cnHMlLwQMkAbvKBF4BHCO8Y/4SfJnNrBMJRNABxynGDVc?= =?us-ascii?Q?BioR5ybjhysfZcPcAtxgXZKT4DpLs+Rohha41Shx9t0Ib9B+0u7WvJpL+AfD?= =?us-ascii?Q?7SLn0lNRi8ZXEGzwZWjgsts6gk7WhVt0+g02LWXFvRhv8lB/1aY8eoXFmfEL?= =?us-ascii?Q?hR6FXesQKV5SqTeFabIXYiGzCu9q38UZZPwZ6+ubgtm5yjgjIEAfmVFGxy9/?= =?us-ascii?Q?I3FFssH5RWyJv2tyF8POHwA2wfU+MfTb5xGTM55ljUD4eQ6ffK03KqOhqyaf?= =?us-ascii?Q?IrEtzA1qv6IKxNwXJvaZfRtfTeeRA2ldupflycyMDquCFhNVkUxv9B8R8Ym4?= =?us-ascii?Q?9hkaUDb0B4ICz0OwAPz2YNUDGxetxIc9RBPDW06Yr8G9bST7vOHsULS1DrZ+?= =?us-ascii?Q?PgcHtqrNkv7zCz2GNClZg+avHbNCftZtwF3n8E89GrR3LjPRckHfNPXrEh4z?= =?us-ascii?Q?STWlM+rFGf1NVbT1As+gTYvhIvr2ERyyKyBm4pk6TzvMk0LJbUEuIYoPp55K?= =?us-ascii?Q?cUW3AKZuvvm9tPJcfFw0hADvdkZQnusEzNFyYJlkusszxC4ybvjJ5jMCHM15?= =?us-ascii?Q?8OpzPvMa8jbTezIbyp2oHjMCvRWNseiD0b95lilTzm1EcaKQxzccRacX1RVL?= =?us-ascii?Q?o1rt4HfkNvsiJmc2rgBhIn6Ebw1Z1w+BvgZn3GiIjbKxfZ9hzMSapDMqDI/P?= =?us-ascii?Q?Ha0vHvOdQfWYDk0ATalFGBui1xS1yGOMu2VQrcRVrnwJgmnvqYeaFcPJ/LRh?= =?us-ascii?Q?5UM0AR5zhZ9JKDrGr7/6DWqdO4yndCGq8jIAd3qK7F1geWnf9zkNzHdn6nh7?= =?us-ascii?Q?aBMLTpONVAIV+90TFmz5d5Cp3xLtBnLMzC91q4hE3ebKzSe2tmF7/TPlIszE?= =?us-ascii?Q?fQeosmh9AanC62l1jL0qcqA+KCL98KHPJRz17R7VsXyMIaoYjTtaYjOIcAGX?= =?us-ascii?Q?2T4OIIFz7/HPIhFkd0OoQrDtQqoqeMD7+N0dwPLtzZjhWp7eptzKHp6+gQjz?= =?us-ascii?Q?/9o5RBafMBoVIVoCggwsWM52lOCpgWndwybYhgLVvBzjxVUpdc54sgl/vGue?= =?us-ascii?Q?cT9KBaNtGu3+98MEaRNqQ7jNiW1+nqvypNZtb/q5d0anTMw5HRqfkrXXoSaT?= =?us-ascii?Q?N0XffZykvTP7TkBIC46tHtxyof8IBQHQ/Sn9rP+nzj7+OzcoLNQm+LIOM/dm?= =?us-ascii?Q?8TRaw8JiByqWP6rrfOIw3XwSzWLIQZhZ4baDRbl45wvrfFc7TyuodaBEzdNp?= =?us-ascii?Q?E4KDl0BXhhE8S1IWV2KpqyNfdld801TMUSbM/Jl56EQPdI28LRTH7UixdPb8?= =?us-ascii?Q?ij5fq7jjWIr25H3InYxiaXVoCrySJnoSmpHSiXZZPZ5fKhpqzVRKF/+Kz1hV?= =?us-ascii?Q?+kDbg8OskTlv4xXsnuvCWM+jysUiZwZU0pn9VkbrTSuGashX+G1tAYEoWcu0?= =?us-ascii?Q?bGFabwUSXHs+gggovDHZ7FTunZQ0W5A=3D?= X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: YYdsFmaXm2zbTfXpvhvoWSLFBhOLLmyYuBUP+kYFQawg2ZIDKiCJmrxzb8lmrE8dUiGELy5C59BkCOjlL1HWxR/9i/uNGmqvnjj7PE/WboqiMRt0HGhkNt0DoD/1rlf1NfdI8ti+56i9cKaihO9SUGyimst8IWQC66yIEz4tNipPgQDJV0xNdPaG2R7o1mUsxXEIl/lw+D4Lw5njparJaLz1d4QATPmC6uhhWa+irN3m2Hkn7FExXoVkeXGBqF/yG01dgRuFhm+hCx311VzEvQzicUkQHJ93xBHijeodKNAINepXtg7v7tQyz0qpAurEMLUVevgpVzbN7fJPKfIWUQaMy+mzB4ESKZNNOriTofcltjYRObqc7o7fyayBp7avgAWKMwFkxEHUq+EyZb4cXkdtIxIZOYg2zveGk2o/cyQWpDLiRU+w0qx9e58fBiJJuOjKcLx7+IUNK6OBAc3cIOZ3Y/Pdn+QVsUYP8X8u5S2G5mO2nyqFJw9emJ+a4yy2NaO0pQ8BOY/ahkwavXjdd0PTmrnEbcFFTeCkmQ6W1cyN+Qj4xfA8V899BKAaJ9bhWfUnJBV1ImgfqVTby5F9piJCIzG6f7b4dB5VUKDAoK4= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: e66d36c1-6ec0-4ed0-07fe-08de4dbd37aa X-MS-Exchange-CrossTenant-AuthSource: CO6PR10MB5409.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Jan 2026 07:20:21.2581 (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: rB/D8q8mhT6w5QjSBhdJPVl21kOzkFNr1rOeh2U13CM6gQ2sRQVoeqZyLk8A9Te9ahP1yNvTU3fnMzN99nQylotVaV5S5mKRoCyP2hrrnlo= X-MS-Exchange-Transport-CrossTenantHeadersStamped: LV8PR10MB7750 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2026-01-06_03,2026-01-06_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 bulkscore=0 suspectscore=0 malwarescore=0 adultscore=0 mlxscore=0 phishscore=0 spamscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2512120000 definitions=main-2601070058 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTA3MDA2MCBTYWx0ZWRfX4YVGRT0Vnwi2 xreJwQkjuPuytkkaWQo8gUnkYJWtqjk1Oiyd2PAWRyXK5AMzkAE27+moeoJ9hFEsu/ZLVYlAAZB 3oy+Rv/SAap3/M35MznZGWQrtDPvn6AJ8oztoWY9L/83xlaLp56qQqw5kksFLwM0cUeAdLBuK22 Ri2h6q9cZGGFXKW5xi4I0aw0rPK9ZystyjZHIbonA63OTscC/BgoLPJLf1WdUrR7WDwC0v2k41w YLCnf1fYwUNam5AgiRaBVJSifM7pRCKrruwzNJrHbd63mAtDhEG/5QhhORc5n/oN0Au8llUgVXS +7vwhzvGYZ1O9MCFHxJwDnT3qHBkqGT4jfV165Tdxztszu9OyQ2fczqRK94+7ua3kev5rMGqNkf vy4OfGFI6JqmeqQVK25FS6jNLIFNThOdeQVJ/66MKMOlzUbHZjqGZBb/FcnSaQeDYniG79MNaUu dyimrbpKe4K/BlHoL8NcFCe8dcnwcHhjIxrLALbk= X-Proofpoint-GUID: rrttDukFFkrp2ZlFQLWc448SZK2wlb2j X-Proofpoint-ORIG-GUID: rrttDukFFkrp2ZlFQLWc448SZK2wlb2j X-Authority-Analysis: v=2.4 cv=WP5yn3sR c=1 sm=1 tr=0 ts=695e0d35 b=1 cx=c_pps a=zPCbziy225d3KhSqZt3L1A==:117 a=zPCbziy225d3KhSqZt3L1A==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=vUbySO9Y5rIA:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=yPCof4ZbAAAA:8 a=zd2uoN0lAAAA:8 a=CZTfYOs-HqEX1FBfxHsA:9 cc=ntf awl=host:12109 Content-Type: text/plain; charset="utf-8" clear_page_rep() and clear_page_erms() are wrappers around "REP; STOS" variations. Inlining gets rid of an unnecessary CALL/RET (which isn't free when using RETHUNK speculative execution mitigations.) Fixup and rename clear_page_orig() to adapt to the changed calling convention. Also add a comment from Dave Hansen detailing various clearing mechanisms used in clear_page(). Signed-off-by: Ankur Arora Tested-by: Raghavendra K T Reviewed-by: Borislav Petkov (AMD) --- arch/x86/include/asm/page_32.h | 6 +++ arch/x86/include/asm/page_64.h | 67 ++++++++++++++++++++++++++-------- arch/x86/lib/clear_page_64.S | 39 ++++---------------- 3 files changed, 66 insertions(+), 46 deletions(-) diff --git a/arch/x86/include/asm/page_32.h b/arch/x86/include/asm/page_32.h index 0c623706cb7e..19fddb002cc9 100644 --- a/arch/x86/include/asm/page_32.h +++ b/arch/x86/include/asm/page_32.h @@ -17,6 +17,12 @@ extern unsigned long __phys_addr(unsigned long); =20 #include =20 +/** + * clear_page() - clear a page using a kernel virtual address. + * @page: address of kernel page + * + * Does absolutely no exception handling. + */ static inline void clear_page(void *page) { memset(page, 0, PAGE_SIZE); diff --git a/arch/x86/include/asm/page_64.h b/arch/x86/include/asm/page_64.h index 2f0e47be79a4..ec3307234a17 100644 --- a/arch/x86/include/asm/page_64.h +++ b/arch/x86/include/asm/page_64.h @@ -48,26 +48,63 @@ static inline unsigned long __phys_addr_symbol(unsigned= long x) =20 #define __phys_reloc_hide(x) (x) =20 -void clear_page_orig(void *page); -void clear_page_rep(void *page); -void clear_page_erms(void *page); -KCFI_REFERENCE(clear_page_orig); -KCFI_REFERENCE(clear_page_rep); -KCFI_REFERENCE(clear_page_erms); +void __clear_pages_unrolled(void *page); +KCFI_REFERENCE(__clear_pages_unrolled); =20 -static inline void clear_page(void *page) +/** + * clear_page() - clear a page using a kernel virtual address. + * @addr: address of kernel page + * + * Switch between three implementations of page clearing based on CPU + * capabilities: + * + * - __clear_pages_unrolled(): the oldest, slowest and universally + * supported method. Zeroes via 8-byte MOV instructions unrolled 8x + * to write a 64-byte cacheline in each loop iteration. + * + * - "REP; STOSQ": really old CPUs had crummy REP implementations. + * Vendor CPU setup code sets 'REP_GOOD' on CPUs where REP can be + * trusted. The instruction writes 8-byte per REP iteration but + * CPUs can internally batch these together and do larger writes. + * + * - "REP; STOSB": used on CPUs with "enhanced REP MOVSB/STOSB", + * which enumerate 'ERMS' and provide an implementation which + * unlike "REP; STOSQ" above wasn't overly picky about alignment. + * The instruction writes 1-byte per REP iteration with CPUs + * internally batching these together into larger writes and is + * generally fastest of the three. + * + * Note that when running as a guest, features exposed by the CPU + * might be mediated by the hypervisor. So, the STOSQ variant might + * be in active use on some systems even when the hardware enumerates + * ERMS. + * + * Does absolutely no exception handling. + */ +static inline void clear_page(void *addr) { + u64 len =3D PAGE_SIZE; /* * Clean up KMSAN metadata for the page being cleared. The assembly call - * below clobbers @page, so we perform unpoisoning before it. + * below clobbers @addr, so perform unpoisoning before it. */ - kmsan_unpoison_memory(page, PAGE_SIZE); - alternative_call_2(clear_page_orig, - clear_page_rep, X86_FEATURE_REP_GOOD, - clear_page_erms, X86_FEATURE_ERMS, - "=3DD" (page), - "D" (page), - "cc", "memory", "rax", "rcx"); + kmsan_unpoison_memory(addr, len); + + /* + * The inline asm embeds a CALL instruction and usually that is a no-no + * due to the compiler not knowing that and thus being unable to track + * callee-clobbered registers. + * + * In this case that is fine because the registers clobbered by + * __clear_pages_unrolled() are part of the inline asm register + * specification. + */ + asm volatile(ALTERNATIVE_2("call __clear_pages_unrolled", + "shrq $3, %%rcx; rep stosq", X86_FEATURE_REP_GOOD, + "rep stosb", X86_FEATURE_ERMS) + : "+c" (len), "+D" (addr), ASM_CALL_CONSTRAINT + : "a" (0) + : "cc", "memory"); } =20 void copy_page(void *to, void *from); diff --git a/arch/x86/lib/clear_page_64.S b/arch/x86/lib/clear_page_64.S index a508e4a8c66a..f7f356e7218b 100644 --- a/arch/x86/lib/clear_page_64.S +++ b/arch/x86/lib/clear_page_64.S @@ -6,30 +6,15 @@ #include =20 /* - * Most CPUs support enhanced REP MOVSB/STOSB instructions. It is - * recommended to use this when possible and we do use them by default. - * If enhanced REP MOVSB/STOSB is not available, try to use fast string. - * Otherwise, use original. + * Zero page aligned region. + * %rdi - dest + * %rcx - length */ - -/* - * Zero a page. - * %rdi - page - */ -SYM_TYPED_FUNC_START(clear_page_rep) - movl $4096/8,%ecx - xorl %eax,%eax - rep stosq - RET -SYM_FUNC_END(clear_page_rep) -EXPORT_SYMBOL_GPL(clear_page_rep) - -SYM_TYPED_FUNC_START(clear_page_orig) - xorl %eax,%eax - movl $4096/64,%ecx +SYM_TYPED_FUNC_START(__clear_pages_unrolled) + shrq $6, %rcx .p2align 4 .Lloop: - decl %ecx + decq %rcx #define PUT(x) movq %rax,x*8(%rdi) movq %rax,(%rdi) PUT(1) @@ -43,16 +28,8 @@ SYM_TYPED_FUNC_START(clear_page_orig) jnz .Lloop nop RET -SYM_FUNC_END(clear_page_orig) -EXPORT_SYMBOL_GPL(clear_page_orig) - -SYM_TYPED_FUNC_START(clear_page_erms) - movl $4096,%ecx - xorl %eax,%eax - rep stosb - RET -SYM_FUNC_END(clear_page_erms) -EXPORT_SYMBOL_GPL(clear_page_erms) +SYM_FUNC_END(__clear_pages_unrolled) +EXPORT_SYMBOL_GPL(__clear_pages_unrolled) =20 /* * Default clear user-space. --=20 2.31.1 From nobody Mon Feb 9 00:42:13 2026 Received: from mx0a-00069f02.pphosted.com (mx0a-00069f02.pphosted.com [205.220.165.32]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 01A3E27A461 for ; Wed, 7 Jan 2026 07:37:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=205.220.165.32 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767771478; cv=fail; b=gUyLdzbCHkDP5jjNuI7ObbgZGZG1lAUB+0uNnzu8qzse/m5gSQeZHa86Rs0TmLxrbCDBxVoPAu0578HhCIKp20NWb1IZCg6tUlQ7j4I7G4ps4MnpejldWZpfGjE6k//1HKvc8cwIr/IJ2ctlWf24f9uPXQX6g2KN7VffFNgqkoQ= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767771478; c=relaxed/simple; bh=DZ8g57gfnLcRE2mzasxSJpS7cqkDbkbGZ+SUGrX+Xa0=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=AdfrgAJp+lielHvi3xDaNhIOG9Ri1eKhb9jxeM6MhiM5w9hugOyf8cuRN6PZXtTsGmkNxjp/GZnXySfAYwavacpuDwlkz0yBT/rGtNN+ErkJvJu/TMjZv7ji9PIhxbQQ6mciCyxbh0fgsJFlToKk6OgIq0dFI0uZwUe2pU2pqNA= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oracle.com; spf=pass smtp.mailfrom=oracle.com; dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b=Cw51PIZQ; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=IQolc/3X; arc=fail smtp.client-ip=205.220.165.32 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oracle.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oracle.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b="Cw51PIZQ"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="IQolc/3X" Received: from pps.filterd (m0246617.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 6075akhI1026439; Wed, 7 Jan 2026 07:37:23 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-2025-04-25; bh=b/AGiAq/cL0qvd7JUixr+WiVck8T1/TYx58zaZ8azYg=; b= Cw51PIZQGrYeu2b9X2sbTt7T9eublTz9gpygL94ameegXhb7DFxY466aPubncfVb TwAlKLptm6SFsY11swJafW8tx8ECgR27zkdoNmFBQxBnVUviqG78/ts4HjMH8JGF +3jXrQu698KVxnQIPqlaWL9kCE2+7dZX+Umgj2+o/AOnEs/ZvbbY0MaAMqYVfDZR jHSpHU6mqeiNvzWA4/cgLFmXajk3yPOfUhkqucwYNTR/TfqxSPvx8AycLsaG89LD tc6opT7Cu29kKFODIqiyacrlrBpY0GMasT+laSxoF7IM4xSSDRhR9FchnN8PUwsy imaFClHIJFaELvOuOlFybg== Received: from iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta01.appoci.oracle.com [130.35.100.223]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4bhhg7r35v-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 07 Jan 2026 07:37:23 +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 6076txVH020387; Wed, 7 Jan 2026 07:20:30 GMT Received: from bn1pr04cu002.outbound.protection.outlook.com (mail-eastus2azon11010032.outbound.protection.outlook.com [52.101.56.32]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 4besjkhwjh-2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 07 Jan 2026 07:20:29 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=ycG992tTwPDPa+V0c6DBsRHp9excotp9DsDuRcw5AWZ7rGMFViOMrxRIHDMK8hMq+9Y6DJhWJwUFx5CIurm10M/CTJz/WzqGgyFi0qW2CtXS/q5JxbtHRclB98ctEJ+ApGhBe9F+FzH+W0RthmNWqWyvj04cbitPZs30qcSRNwMsusz7rRoTYrOFXx+JyrsNGpyUvkGQpEfREbtFmO24VTyA8v5t19QeYX/TWNGKxBdFp3i5cdtoqaF9l931eMsWuzwLIL9Vh9C4XJHx/Kt+9sKi02NMCfOW+nOsPLb2UgJ10gXXPyyQJuGZ9G47RbXYfCsNSJ8JJ8YCBJZCHi/atA== 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=b/AGiAq/cL0qvd7JUixr+WiVck8T1/TYx58zaZ8azYg=; b=Fgu07L1nEVEEs6B9PYMYdhaCthejJMNXIWlLmhpqoF85Z329YRxRrfnp18oTW94J2EAZIhlQYFtBuYx2gNYhwyeYbHET9c/XXmX/2yWYmuIZ2G39anrMfB0G4M5tYW/NJYUS19C0time/mhwFjHSiK4ena4sqqkPW9r4hKRLMKVdKV6aJMHC92/wuLAXo/yCo/6h+zv1uTHR+FZXYMg1NkIApeSLJCZCjFNpSmo4KpQyKWXxCTlcrFuiEIstKNz76aVWgoVfT6Ii3w/Jz0IASJKlfAfA8Y1KOkDh5ziyVRnlreL0KtOADw9jiZNZ09atQgyrs1WVPAUO/WRZS/VN3Q== 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=b/AGiAq/cL0qvd7JUixr+WiVck8T1/TYx58zaZ8azYg=; b=IQolc/3XeBOZbwSNPBnVeGly5pt6dcQmFOi2pWE7atBU5//E46fO1h55F8mchHfL/6bqCWbovyMQvnK3vihNf0yZQqdrvTn9kgPYsT/b2Ku2OIADECKAdjBGEv0otGxLzMB080vg1rcKXkCKQizqB9OaxFg9HXE9jpTkDaeOQ2U= Received: from CO6PR10MB5409.namprd10.prod.outlook.com (2603:10b6:5:357::14) by LV8PR10MB7750.namprd10.prod.outlook.com (2603:10b6:408:1ed::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9499.2; Wed, 7 Jan 2026 07:20:23 +0000 Received: from CO6PR10MB5409.namprd10.prod.outlook.com ([fe80::3c92:21f3:96a:b574]) by CO6PR10MB5409.namprd10.prod.outlook.com ([fe80::3c92:21f3:96a:b574%4]) with mapi id 15.20.9478.004; Wed, 7 Jan 2026 07:20:23 +0000 From: Ankur Arora To: linux-kernel@vger.kernel.org, linux-mm@kvack.org, x86@kernel.org Cc: akpm@linux-foundation.org, david@kernel.org, bp@alien8.de, dave.hansen@linux.intel.com, hpa@zytor.com, mingo@redhat.com, mjguzik@gmail.com, luto@kernel.org, peterz@infradead.org, tglx@linutronix.de, willy@infradead.org, raghavendra.kt@amd.com, chleroy@kernel.org, ioworker0@gmail.com, lizhe.67@bytedance.com, boris.ostrovsky@oracle.com, konrad.wilk@oracle.com, ankur.a.arora@oracle.com Subject: [PATCH v11 5/8] x86/clear_page: Introduce clear_pages() Date: Tue, 6 Jan 2026 23:20:06 -0800 Message-Id: <20260107072009.1615991-6-ankur.a.arora@oracle.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20260107072009.1615991-1-ankur.a.arora@oracle.com> References: <20260107072009.1615991-1-ankur.a.arora@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: MW4PR03CA0180.namprd03.prod.outlook.com (2603:10b6:303:8d::35) To CO6PR10MB5409.namprd10.prod.outlook.com (2603:10b6:5:357::14) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CO6PR10MB5409:EE_|LV8PR10MB7750:EE_ X-MS-Office365-Filtering-Correlation-Id: 4bc70a7f-edcf-438d-6f11-08de4dbd3896 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|1800799024|366016; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?FqZvYgwP1UJ5WfVFqYH+yzvD3QXwyo8V9lEfN/dv5AKcgiGm614wSIpwS4Pf?= =?us-ascii?Q?v/Mpy9CXFfazlhzcsX6dwGQuPXC+xFx6K5oI14uIMGOynCfZYGc/9ftqbzGP?= =?us-ascii?Q?BP0yvqtQt1H5Q5mQ0FQdFQ6iAOhFuLfIaUoZMPt4aPW/2p4AKcZ8LolN8e9w?= =?us-ascii?Q?E3p0IF+TKe0wYJUn8uYkBk09LmYM+5j3+iV+tCiDyAsoI3cpvXNTTnMGNc/S?= =?us-ascii?Q?4Bu0hI2v8nZmp4PDK0bVa41OStif+w0RVDaMVnfNZibr/vp49UIGxsd4oHSD?= =?us-ascii?Q?EREJMAXzaJ5rBnulANB5QCY7eTjqXjsMllvoGPCRK/swnlxC6gQ6bDYfoqWb?= =?us-ascii?Q?3JcdyJ+jybav9Ggx6xHn9i4Erq1BuuqO34thqxM/Qw4oehRVCfkWQ23gzDGW?= =?us-ascii?Q?8Ntio64FfJnR4NZKRFCbZZk5oB3QerU45bB44M46FmW8jAVk7y9676R+LSia?= =?us-ascii?Q?zZEI/TPM8akz90aedmE6ggOyG+Z829emsSBuTw3jXRnuBcHarp8g9fQCMz+R?= =?us-ascii?Q?RuJt3DsEYdkCDsV54Uj2Pj5yalTl/RsnE2xPPH9yfSFnqPzgmDlCFhOwTcLb?= =?us-ascii?Q?O4VaJ6BKyXodvMoQ0OZSwaI07AZwSd69/LDfp6KxOuIQlIrFref2W53RHWS/?= =?us-ascii?Q?HyH+NUWVopl+Rg9YxFfccTzjFXy7qInXasuSoMwpBAe1kEgrKVt4WUejQ3az?= =?us-ascii?Q?+R7x8UWsyRnA9Es8gDtCHAtBC6lbgVURhm0cvuyZevDPC4cHAGDo/O+OtWpl?= =?us-ascii?Q?BaTLFXCRyPVGRDgfibLIoEhDoJCk4pE/JWu8cTQFdypkECuZbTIsTx57kPdK?= =?us-ascii?Q?FwLbWTU+iHf/SgmCwbzrwoar/jByu7yi4vgWtMYzp7jeRp31ci5QrooZ3Myn?= =?us-ascii?Q?hb1f89RvNb+aac3eVvpKq/pmlxOrzSyUZitV6iQoZzehyGxGbXGXNm2NQBWf?= =?us-ascii?Q?KJk8OzichWbCcvOB+EXo6OZ8ZIcmswBDOuiSbBEJPBtzAyMMYOOk62aIr2ns?= =?us-ascii?Q?mh0u9Nwk5jsidxQB3ASfkOdNKEvKzxEMpAoKhG9WUfJb0TTm3u9aIqSyBEyT?= =?us-ascii?Q?Xp690bznIHMbZUWMhQVZmw81UX8ncFleZPfMEnRJVD8vK3WaJsdXA2QLdQ5t?= =?us-ascii?Q?amXAm/7GwbgOgjnq+dvFH3jPXjoOFx+/qWlBll4vwE+GDuVNFXyYSE2SUALQ?= =?us-ascii?Q?vpGfF1cqkAko2hNpp8NLmNADRinSdKo2qC6fhf13j+BJOvhGSln48/kK52R0?= =?us-ascii?Q?pQtMLSrcb08dSAKUqh81WQrkvbCB80LDfS2wYFymPA5vbJhKyGOCnpl7JPMt?= =?us-ascii?Q?1ACe37zOaLQJVyRX9R/BQZ/DSC2pu9wclPj92eAwuLZi6wFqK1xLRqxzz0HR?= =?us-ascii?Q?sVLlE9QGR29dTiFdpZvuTvDFxe1kWPKVU5QcqdlmCAZgnPOz6mVZQqVRw3Dz?= =?us-ascii?Q?JFHx/sj7QHEVAmax77pampQBHSZswQLi?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CO6PR10MB5409.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(7416014)(1800799024)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?IvLLbiqfjl4R5JYlHP3F4CZMATuy+fim0n4VPcLTOfqbI2zQP8pc8C0Fri9G?= =?us-ascii?Q?gL77rBALGYYF1xrUjvVS/ZOVL5841ooqJcOD6oVlOxgnofBZU0rOLrcoK3B2?= =?us-ascii?Q?2ulI+hFmADV7t0HDvQ9myn6Zt2SUeK3ALo16VYHYZwjGHGvZQWsa7n++Ccw2?= =?us-ascii?Q?bPkNF0n+6VG3HPVJEHiVtkeQXpkxHeL+s0Kj+5XCuaGIX1aH9xB+IBg+Lkvq?= =?us-ascii?Q?MXQ4udaEg7SAYJGMu2v5/Z8hGJjQqxfGaDY3ZNLa4ZzGjJRUGkSUtTKiAuvP?= =?us-ascii?Q?+v7cj95f8wx3STnFP9v6+1phfHdXG+eKh0Fpbu6HQxnJd8oxpggxZRStLjTn?= =?us-ascii?Q?TnOc+qwlf4bxqPgYVSMgPMEESQWerly0tE64eD8UgtQ+s7f+Hj2SDZPfbgTM?= =?us-ascii?Q?3dLhOO9hd5r6Ur6nPxBbxUMaYzLM2fvO4rU4tNpZ1+WLiim/VwaKjzUxTW/Z?= =?us-ascii?Q?8wGKpfWdjZQ6TppT83GnninULcNnBPsQbyTjuk0ajk27GbluT++9DAVG9WT0?= =?us-ascii?Q?UFST5983vZQzVNBltsaUoEYfYwzglNRHDla7F+dppqdrH7bRCAunNv7dtBcj?= =?us-ascii?Q?9pnPqrT8P5+AF0NpLyG38cHXGpTJFs+58sgx53WUA55a0YZcpPzjbgeS0+Zl?= =?us-ascii?Q?hVqwJL5C3+7gtxzJRBYKa4BTI0s+t1KvWiY50aeID6GsNXQunTeAmLRcFJsY?= =?us-ascii?Q?PtlCAX3lTsqD8fQFRxhKwNm+3+0PMWt/jomKZwIM5DRi97l0lbErpvmro5zQ?= =?us-ascii?Q?zWl1YqD4Z2im2VKrPAS10Qjw5nEh89ViE7MseEoluGhhqGGBrBGrQ4weHpAv?= =?us-ascii?Q?3ALDd7dvqcNeSPsTHfsgjOk5klJgIX3sFQVkm0BJG5IX1fzn1LtHOFO60Ibx?= =?us-ascii?Q?jAF/XNZWbyxPZvEXHI6ff830CdD9QRAYTniEAm7JPj82XTcHDcx+bautuUCh?= =?us-ascii?Q?E8KDcbV0TD4XfIRH7hoYmvj5eMGungi9MJ20klbFxZExGY/JTKPRtyFsft/l?= =?us-ascii?Q?V5pBPpmZbgq7Efqyv+ZhP+cRhKa/ZUW93oVNINQkac3Eqne9tFiDP4BdDPHe?= =?us-ascii?Q?zySbF/KBFMxsa8fJwBlFpf89W8P1tYp3YJ/wkThkTG1z+j2/lr/BgArB0vRn?= =?us-ascii?Q?F6EReiodUH4lfbTVs6VUBmQFweuyqHEwg4enPZoOOIfZgaUsAxmXK6v9LD4K?= =?us-ascii?Q?jV8IFeJ3os7wl3iHzaqa5UBYS89bIm9B8tw+Qt+4qSBao/GJbQwS2v/Fd3Ia?= =?us-ascii?Q?TmQgRjTdXzAX32K87PAyDdiB10hWOLRZSnX/ZI3FtdJwF/tlqMGTGwpBn+RI?= =?us-ascii?Q?9WEazXOMOOE3NBnLyhz1TOJvpa+fyDJ70CXPREjCktzCT3XO7Xg8Ks1GukXv?= =?us-ascii?Q?f0TgFhHa+Uwjv49+8PBC7/D7wUx23ctpJnJCzgaf7+H/iKpn1TRf4SZr1f8f?= =?us-ascii?Q?bF22wBNTUXZ/XW8YecPaTyFYx189gYpS2IO8fNHslEelXnN25Uaqzal6JGuF?= =?us-ascii?Q?CUKSq/dionozDFSXlzDgoRtuifigjWvwvKwsC5NblNffCfwSlObDEcMYSeA9?= =?us-ascii?Q?EKjDKI9eh0PNFVcbK/kFx46i7XTD9rRRcNUPc8AKsvg3bDn19bCjLE57cm2B?= =?us-ascii?Q?kqW7ZyxAEHN9BzOZUjLrEKALg1t2mO5yvtYFbAGLsOPSqglzy3pKnkkAkbsV?= =?us-ascii?Q?97cTpYxc4X2FI4doFxuyjLPo820d1RkacgPMeYidrk+0tL53j6MutkJD+Fvu?= =?us-ascii?Q?rYCkzYWqaxFxIRMrGpigh9jZlZwGOYA=3D?= X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: BNDhB0uK5cB0WLMB9ao6FJUdQxZZcMwUCdqEKX/g6bOpMDqJ96nQKTDLXWunuprtelG67JpB/bztY28DqcUMqbAoqV2CtfiZGIwQrA4MRYYsnKa1ri//IGvuvd/pmK6KlNbuCRF+dycUxBWJNhq7Eu7Uz4ctzG5W21NAbknFuX/HNurP7CMtycjvaeCye33+8oW12NA4P0S6Lu9XmIMCtWh9zX3ff/vdNihwPcSuI33a5TisZHaeVyQdBlIi4BhbOIQ9qf1KgybiIn2h1SqCeN8mpgtiEzw1JzMQIBQli8irerzt2ETcyY6BXD9gozf0c4d2Tr2VHV0DHx8/j4tQbKz+UoGAdGI6h9jgVfbrSwMuFuiMWskSgS8NUf6hJLlHrDxk2qQO0v+ndTyp9z971wEkYEJ61y5ATH/hrQsObmaZGGYRmtIH8/JCewKtUAbvl5OMqBEkhXbe2IsBtmYe8SkTdCoYwEO57Q69so8qLBh8TaHsShAZDA8U0ZMICct0TA+DpKcX+QUCfKKTuBapsUTurcOyKCEW7XkpJp8Uz7r5a4iwlWL9xdV0tK72NJ16AXqt63rzI8rU7rbmEBxcCAOlZkTxBwLueaAJQQdEuvo= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 4bc70a7f-edcf-438d-6f11-08de4dbd3896 X-MS-Exchange-CrossTenant-AuthSource: CO6PR10MB5409.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Jan 2026 07:20:22.8395 (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: nKsJrNUIzWIpXQd7ulYJK7QTsm/L5fA7YpXElh3dVQ0rU9In+3N4srwHoDn/aKBqKvS+AMlTgp2xqaqh5IXtz+be4hJjqlsHSA6CQ5TXkmw= X-MS-Exchange-Transport-CrossTenantHeadersStamped: LV8PR10MB7750 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2026-01-06_03,2026-01-06_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 bulkscore=0 suspectscore=0 malwarescore=0 adultscore=0 mlxscore=0 phishscore=0 spamscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2512120000 definitions=main-2601070058 X-Proofpoint-GUID: RLzEqhBD88rosj_zJDWHeUZJeQ2HgEf9 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTA3MDA2MCBTYWx0ZWRfXw+kdoowr85iK W7LoHRtGAlbL68cXH7ACEY2W25185uwn8iKFUHv0tfm0vQgn/Y9V1EHaMW0I0nxmCFTz4y34+ym 9x737rNDyr2Xf85KfYVTYvauLHBYCw+TUnySgIe5gt/FaxtJ2zU7Qwh5YawMtT/3LF9ul75Sq2Q A40QCtU11PplYEfnJm8Jr1s75ghh0Q06eosIN+gIJYCWxHquyunP40F85mWYuPz4cbYSCnj4n7U GMRn20ptXmJx7MN44srx495pSUx9EKR7HdY45UhPBul1ooNHmK0i/hTleyOFssXkTZsHVAlyLk3 RVKM9mrwpktl6yQrwZTfVTzqcN0u9kxSdxBtiB4jyCjon+Ps3pjwG1chGqnKmdMxfgdHBudBmE8 QVCWMcxTMFZz1P0h99DG+UDjnGS0WV3CLxXhKaiZkb4L0IwMneHKv0gno4nQ4A3yo4xqR2WpDUi UPX2SK7oieB/MGOsFDyDGZwcN/Im8q6xjvSyMyY8= X-Proofpoint-ORIG-GUID: RLzEqhBD88rosj_zJDWHeUZJeQ2HgEf9 X-Authority-Analysis: v=2.4 cv=HOzO14tv c=1 sm=1 tr=0 ts=695e0d33 b=1 cx=c_pps a=zPCbziy225d3KhSqZt3L1A==:117 a=zPCbziy225d3KhSqZt3L1A==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=vUbySO9Y5rIA:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=yPCof4ZbAAAA:8 a=zd2uoN0lAAAA:8 a=VwQbUJbxAAAA:8 a=Sq42x_x8DAdjSyyaoPcA:9 cc=ntf awl=host:12109 Content-Type: text/plain; charset="utf-8" Performance when clearing with string instructions (x86-64-stosq and similar) can vary significantly based on the chunk-size used. $ perf bench mem memset -k 4KB -s 4GB -f x86-64-stosq # Running 'mem/memset' benchmark: # function 'x86-64-stosq' (movsq-based memset() in arch/x86/lib/memset_64= .S) # Copying 4GB bytes ... 13.748208 GB/sec $ perf bench mem memset -k 2MB -s 4GB -f x86-64-stosq # Running 'mem/memset' benchmark: # function 'x86-64-stosq' (movsq-based memset() in # arch/x86/lib/memset_64.S) # Copying 4GB bytes ... 15.067900 GB/sec $ perf bench mem memset -k 1GB -s 4GB -f x86-64-stosq # Running 'mem/memset' benchmark: # function 'x86-64-stosq' (movsq-based memset() in arch/x86/lib/memset_64= .S) # Copying 4GB bytes ... 38.104311 GB/sec (Both on AMD Milan.) With a change in chunk-size from 4KB to 1GB, we see the performance go from 13.7 GB/sec to 38.1 GB/sec. For the chunk-size of 2MB the change isn't quite as drastic but it is worth adding a clear_page() variant that can handle contiguous page-extents. Signed-off-by: Ankur Arora Tested-by: Raghavendra K T Reviewed-by: David Hildenbrand (Red Hat) --- arch/x86/include/asm/page_64.h | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/arch/x86/include/asm/page_64.h b/arch/x86/include/asm/page_64.h index ec3307234a17..1895c207f629 100644 --- a/arch/x86/include/asm/page_64.h +++ b/arch/x86/include/asm/page_64.h @@ -52,8 +52,9 @@ void __clear_pages_unrolled(void *page); KCFI_REFERENCE(__clear_pages_unrolled); =20 /** - * clear_page() - clear a page using a kernel virtual address. - * @addr: address of kernel page + * clear_pages() - clear a page range using a kernel virtual address. + * @addr: start address of kernel page range + * @npages: number of pages * * Switch between three implementations of page clearing based on CPU * capabilities: @@ -81,11 +82,11 @@ KCFI_REFERENCE(__clear_pages_unrolled); * * Does absolutely no exception handling. */ -static inline void clear_page(void *addr) +static inline void clear_pages(void *addr, unsigned int npages) { - u64 len =3D PAGE_SIZE; + u64 len =3D npages * PAGE_SIZE; /* - * Clean up KMSAN metadata for the page being cleared. The assembly call + * Clean up KMSAN metadata for the pages being cleared. The assembly call * below clobbers @addr, so perform unpoisoning before it. */ kmsan_unpoison_memory(addr, len); @@ -106,6 +107,12 @@ static inline void clear_page(void *addr) : "a" (0) : "cc", "memory"); } +#define clear_pages clear_pages + +static inline void clear_page(void *addr) +{ + clear_pages(addr, 1); +} =20 void copy_page(void *to, void *from); KCFI_REFERENCE(copy_page); --=20 2.31.1 From nobody Mon Feb 9 00:42:13 2026 Received: from mx0b-00069f02.pphosted.com (mx0b-00069f02.pphosted.com [205.220.177.32]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 67BC52874E3 for ; Wed, 7 Jan 2026 07:28:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=205.220.177.32 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767770938; cv=fail; b=udvRtX3naQWhDET6B8Gr1DB72RWNWhhIFxcG4nxLQG4VyFZA/JNhlgKX3KUtE5nVEQtLCMNmfqFr0oqn0iM9DG1kQzz1wG5k/OBt9hkT94tUDtZvdB7Humesb4QyHsQNg/PPZ60ZrGZK8xMLB9rfs1/Xq0iM9kzdTwvix1bma4s= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767770938; c=relaxed/simple; bh=EyDVoCsMU8Rt9o0FotUB/Id+zP0F5Q/DXioC0caEShM=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=j1pETNo9tL3AkvwglixCrcZp6OEwWqGYQVScP5K6bw+GHwBel5MldwqMei7qx59plXGOQU43XynvF66beFj7MLk0FOIFlw2RiAh8PN2P0Ad4ymNyNX6M8IPK67oT+mI4HV9sYMHJ3jKt/9jkHA438Fen8yN4HXXLuPBkf3UaISk= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oracle.com; spf=pass smtp.mailfrom=oracle.com; dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b=bJUejl9Q; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=Fcn6et1y; arc=fail smtp.client-ip=205.220.177.32 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oracle.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oracle.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b="bJUejl9Q"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="Fcn6et1y" Received: from pps.filterd (m0246630.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 6070HOVL770591; Wed, 7 Jan 2026 07:28:21 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-2025-04-25; bh=H6qcG0jLXBFxrp9e+/pCcAn/g8VFoJRQPcZ3cx9HSYM=; b= bJUejl9QEy1LaTX4OAbv4G3E0IGkwmWPnJkJfIN4TbU7E5VTOKG19jctk10Yc8M/ cnSVAnEOAu/5bbbjuG2rm5LF1rN7Sjl167PT0j8DAtD5RJ1LD5BYI4VJRoSYH/il bJX0tJrH2u3H9mJqKDR7ZjD+4vXVbXFmnceFsC8Dp6iiQSe5OC6o+6eVLg5Ygn4m 6YuEBLfq6DWO2sXX49tNqXpjChop2tJTuzqGF5xB8k/5cq99x5hh3Gi1EzLmG1Zo dPOOCFFLNJZDLbCnjnzXndNf+la3YPXj+PN5S6EqMkouVgou4pFVhDujrI60o8bK 72/hZ19gXsH6ghNsCQSlMg== Received: from iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta01.appoci.oracle.com [130.35.100.223]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4bhc2fraq9-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 07 Jan 2026 07:28:20 +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 6076txVI020387; Wed, 7 Jan 2026 07:20:30 GMT Received: from bn1pr04cu002.outbound.protection.outlook.com (mail-eastus2azon11010032.outbound.protection.outlook.com [52.101.56.32]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 4besjkhwjh-3 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 07 Jan 2026 07:20:30 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=AMOBS0fvPbSvyNYqgQzeOfyu1cba2Sv210MHD/Dq4KanegrSL0HuZgI/uZyRe1ybIrHSNAOGaxPmjPa2CGHPsSKdGRLTlELEp/zkRR/+BkzszgoTotwUq3glrsk09phN7CT10Vu5jmUlsVbsVWn652qu/0GT2qNEPU5X5l1Ny0mwerQCdpC64WMYvt6PE3Ipty70dDFl1FzsT5wTKps8u6yjzPZpjRRX907OjDSqgSIKZthZs+t1WQRoSKPFQaS5w5Ph0DrKlULehl2Jrr0VDswyq6L+YSY0OsiH+DeOmxERVwm3BGXJbnwF8HNXU75dRvP27mlj81AJglyDek5sLg== 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=H6qcG0jLXBFxrp9e+/pCcAn/g8VFoJRQPcZ3cx9HSYM=; b=BckSVdtbQhkF0Xoww0NbvF/f1diL0BhAnSYiZVwNF9AY5QKFvw9pbm06QCIExAjMCsrvHGyJVRc8D4my+np7cGBwOK+58juzwhLmAcq0s+0Ntou9DruitZFH3hKjLmuDygi4p7GGIoDishWjE16nBe0i/9PD/x963nNN65QgO9anyj+5rtPm7eNRniFHRzhA0Py3/cuHhROaeZROsymbSeJZoZDEuLbTzUQmIEGb6UO4AFIwZCX3wyIpawTb+j+ASeRx/cjY83ml5tqmMiT5AZOa5NRW8vSqNJBN0cflflv6kPkeSrM0Yi3TkbLfikt4h4dMbGbtF2/VXwQl5USXRw== 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=H6qcG0jLXBFxrp9e+/pCcAn/g8VFoJRQPcZ3cx9HSYM=; b=Fcn6et1yzgsQWfeCBA2zBJ1oaWM0Kxi3CYlJt3P2OgSyAlTZDmjQ6dFQ+ApRCzy2bLewKJZFFr1LXnGw6B5WbSz4205zy+gLpCvhmKiOjVTsiJYO/cVUf7kWQIieANYBjKjlvsS5znpBotr28tSiB/rnHbEs3X2r9gzr0r6Wn10= Received: from CO6PR10MB5409.namprd10.prod.outlook.com (2603:10b6:5:357::14) by LV8PR10MB7750.namprd10.prod.outlook.com (2603:10b6:408:1ed::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9499.2; Wed, 7 Jan 2026 07:20:27 +0000 Received: from CO6PR10MB5409.namprd10.prod.outlook.com ([fe80::3c92:21f3:96a:b574]) by CO6PR10MB5409.namprd10.prod.outlook.com ([fe80::3c92:21f3:96a:b574%4]) with mapi id 15.20.9478.004; Wed, 7 Jan 2026 07:20:27 +0000 From: Ankur Arora To: linux-kernel@vger.kernel.org, linux-mm@kvack.org, x86@kernel.org Cc: akpm@linux-foundation.org, david@kernel.org, bp@alien8.de, dave.hansen@linux.intel.com, hpa@zytor.com, mingo@redhat.com, mjguzik@gmail.com, luto@kernel.org, peterz@infradead.org, tglx@linutronix.de, willy@infradead.org, raghavendra.kt@amd.com, chleroy@kernel.org, ioworker0@gmail.com, lizhe.67@bytedance.com, boris.ostrovsky@oracle.com, konrad.wilk@oracle.com, ankur.a.arora@oracle.com Subject: [PATCH v11 6/8] mm: folio_zero_user: clear pages sequentially Date: Tue, 6 Jan 2026 23:20:07 -0800 Message-Id: <20260107072009.1615991-7-ankur.a.arora@oracle.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20260107072009.1615991-1-ankur.a.arora@oracle.com> References: <20260107072009.1615991-1-ankur.a.arora@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: MW4PR04CA0045.namprd04.prod.outlook.com (2603:10b6:303:6a::20) To CO6PR10MB5409.namprd10.prod.outlook.com (2603:10b6:5:357::14) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CO6PR10MB5409:EE_|LV8PR10MB7750:EE_ X-MS-Office365-Filtering-Correlation-Id: 58eed92b-36a0-4589-9787-08de4dbd3b54 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|1800799024|366016; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?ANSq3eGebHLk63Qr5A7Zb/Nn1fk2OJUIYh8g1Y1jyz7e3+2FJpTC/JS/Tyw1?= =?us-ascii?Q?XW7kK0smfmYgraiegEWsZQIuUP6EYkuPGJ6nfEtO2Acnu+oEPMEZ2vzFI78b?= =?us-ascii?Q?cPkD1F63EyJziA4K4KSH605O4if1t2hBv54G9hKIZZLiWv7kxDF6S2pYbjrw?= =?us-ascii?Q?l0asNtlEHGu0yR5z+hW7ieDFPvm4x+4EMsRypJhizhejMaG9A4DyUB9epPtO?= =?us-ascii?Q?dwxlZ+9Ks5czUtuqeQjQRIHYAtEdTGiYsz+3vhxQJVoY01PxI1CkB6GUTT2E?= =?us-ascii?Q?D6rCfK5Gs0eS4SvC08nTHx/DQ3dCMUwb8UucGXM2rZJkxX4x6EXkiOLvBFM6?= =?us-ascii?Q?zm8zhbTfmUEExsN5Vbh3/w3MmUYQed/gBBgCB5D26eYkfDQZOcRYCDDwPohI?= =?us-ascii?Q?J1d+4YZIPIdc6nb3yJQI0b6FNbWLce/UuSJDYPS9vE6dcig40gnExxum67pE?= =?us-ascii?Q?zDFN85IeXUBWVVYJLaC2szy3bMvX/+592TIUNd1VgJmOSwhUZbLFm95j8ldi?= =?us-ascii?Q?uiZewz1CYeb81pu/Bbnmsv4E7Pevh20lbr63Vbq2FZxU303dNLuUGSXHcO3/?= =?us-ascii?Q?ZZlX+5Xy4deq7Nhfm0aHLFcv1Gmyme3/vlIamtbehcuDxT7CpycOwEuFnAgt?= =?us-ascii?Q?JU4Grs0gYEw09torDsIhV2COllm6prVo+zaCelfUXfvl04v9YoUaEKJ2s4qL?= =?us-ascii?Q?tfxXcu5y0OKUQcxxlcATYTtBBbjWVV+7A01C8KRYIl1081jdYzNKXCfwQYq0?= =?us-ascii?Q?WSALKl0PZm0frmTCwDPQKIz1UAG6yRfezr+EcQbZYZIHK3U6JxjcWv7cee9g?= =?us-ascii?Q?+bwsePNvg3ZxJw548uhpyWkcd3YQTYH+od4Nj2GX6GcjmkRgGmqAThheo4Zy?= =?us-ascii?Q?VCjglQory3Y1P5BHLhKHDdJTR9JE1CQ2HJcbb1WFeEdOSzG8H/6HFDfcmhZ1?= =?us-ascii?Q?e4TFFxkzv2XZuHqPTuHbZx3tMVoVSoKCDSlEkmaR7AkS7yE8D3dQRJnrfMXS?= =?us-ascii?Q?xba8tVtBQH5K+ylKyOomXBuVz7IUgi6NJkTd1noQicJsG4uAkQqfSug9Q4Zm?= =?us-ascii?Q?jtIVlv99JBw+8uvimMp82T9MxSUUonI2mjgTyscpCFXhBdj6LPJWQ1Ijjms8?= =?us-ascii?Q?L4DqkMA5XLF7LtQINwSuC9g6KQOxpbk0AbMa+zp9aBzBFSawI39kDoaT5Ezc?= =?us-ascii?Q?DflcUx+cYmFDlXlcMGMKggKQ7Eb8k+mNL9UBYDH112femD/tRoRiQp/UX4bk?= =?us-ascii?Q?lsh9aFz/5+5gP3tO21HG8sMyuKfx482pi/jfs4RhSu0o+UqxoSegwMYfZs7Z?= =?us-ascii?Q?iberrukeF7Z/xG05vrGctGUGNo4oZ5wCG/dZUU08SJz3dvfJnHwNiBT06hcf?= =?us-ascii?Q?riFLM90QaVuwHgtaM0Bf7VTwL1IMq2sMRb3KtvHlYr0I1Ps3Y3uAyu5IOFfz?= =?us-ascii?Q?yeLh+P8ZTYKktGTX4IM4KT63MU2LQv8a?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CO6PR10MB5409.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(7416014)(1800799024)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?PB8Er832zwMNI46aL2Y3tVJLz2RUd2oUAMOzymrKpPBIcupmBZAN91dKIa0z?= =?us-ascii?Q?Eqp8N9I2N3nNqPE4ZBVU2IY4EbDv0q4D1DzAbugRI5HI/ECO0yuyWLysVqwh?= =?us-ascii?Q?xCkNT9dFdaVxzQZBdeX1pw62ven30Ymyp+xQkHqlOFRGdLtm9Kq9DE1HdINm?= =?us-ascii?Q?PlNZhmLys0CRLUt3IVl7uQZC3fF15alLbFPhdPBsk25wQmAv6UGSty64BYAR?= =?us-ascii?Q?poacNTSAJJYLBDKa9TG0Wf4JkBaaX+ItCQ00qbru6TG+NcWHeYWRZXHS17Sj?= =?us-ascii?Q?eIRdJlh3er9F7jDethwlsHEmoM3zHJd6FDKTLvVD5yYM2PdbIRdx9RhDt/Fw?= =?us-ascii?Q?qRtb4AHooQtr/l0yu2vzy8QSoAqCcETbt81dzhoYTK7lIEjBHNChu8Hl8OE6?= =?us-ascii?Q?+mVVwdz+BdTQIU6XhuEluYUTXitgzAuJP5EoUEruE9vbbynUyUz0ODM8SLNX?= =?us-ascii?Q?FnWx2PWvvXSWoszavO0tGACPnItRVu4k1U/0RyaOGEOb5+DWfsDZulFi3ltX?= =?us-ascii?Q?nwreaa3FWWu3GJ2U8Jsq66WIgfgotFj/lbwgd8q7nMQ3nakgLBc4K4AcQ+VL?= =?us-ascii?Q?OHJcQkjDgQgy/Xko7jC1oykVOlwW1s8DBSo7WyB66Y1Lh56JWGM9MS6vnQS0?= =?us-ascii?Q?6hBullTqUdb/n0Cl76szOt+J5xyoGiOrwt/B1YN8dWhDbpP4wtvuOalgvjUy?= =?us-ascii?Q?dSnc7tP8aQmgYhkJbzcZfHe1BuOTJ8qgzyBy79NObJGRzqkXxBpoVQkgVvUS?= =?us-ascii?Q?WoZ366VXOr9bZUMB9773mf/Wd5IH5slRfHIyyoaBNMQQpH89FEDSdIntORYO?= =?us-ascii?Q?S6fCa5NryOQQMZdal7wCVJWGiW+ZSjRAcrwmqZWSJrAHY2bbjAx1CEytkOzr?= =?us-ascii?Q?TpGOl2/kcpdc8uOz9W44FotWafIlz31D1aBoY5NkyYZA5AKRmh6Ydi4yOd7L?= =?us-ascii?Q?/ih81mYrzhAl64KxKbtX+e6AoEIXKq/d7x0GvopM6u0QHPz3Ms/qLdrwcSb0?= =?us-ascii?Q?j3hImAVtQ78981y2yvsPrPMLBYMzrKToFQ8ghtgDXKh5Y6sQt8vPhigme0/T?= =?us-ascii?Q?CLFfw5D4/18Mse4AUamyp7l7BYMlB2GcLPCSOJuyzb8mlf0/K+eaRV1dN53u?= =?us-ascii?Q?TYzumRd0XuzVPn9yZkXDhxWbCyb+vV88wlL559jkFeZVc17TxgEtC8IfRPES?= =?us-ascii?Q?wGNbSJwgtMig9SaT9abl/iAVaDwRbs7PhniwepSOePk3XRxjYPoo2TW+MFof?= =?us-ascii?Q?D/r2E+ETl9O5A9bRm8gtwPJDPQTy5rq6mH2k6IbCBoMBsX5Fzvu+zxo6THkf?= =?us-ascii?Q?eADMgDBJU0naw9vhlBGhCUZDoey70QJGteYPRF5iVz9apS0XHq5VPox2aooi?= =?us-ascii?Q?m4JG+LrHtD+AjU55SzJH5IGpc2k8VC/U4QmTBdNfqMOfWloAj4eIUB5chw4n?= =?us-ascii?Q?QDd0FLthldkzDCOVslRrsSyjGAYr+rcgfS+VqTwwfi51dxtfcXh4ZbEuYrt4?= =?us-ascii?Q?VlDSPAmxeuPAZDvhR9KWAKLWmMDp2nXHuDO8vtUZN7yIqke4bIg4FEzjuCiV?= =?us-ascii?Q?IMhMPqYLg7hT1XItoC0eXJyfBIwQMHGWFIq0bixdGAjIjIA1jFZqIbPmEJRW?= =?us-ascii?Q?Nmh2RDu3J1gnI5qZMo+5s3YtZDSXdCeKfsTiYjMZyIDphpA61Eg4DA0cmmh1?= =?us-ascii?Q?IzhXd3tUUFnSjWsEnEVoU70qAceaYAZb+hSBar1kGz0fCbes2IcrQ9vL4jaB?= =?us-ascii?Q?t3/hXGPPzLXiSjJUmq7IVxmfPwS7Z9o=3D?= X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: jjn6P8DvTfU/xqPGER8wW4JjBvr3GT0ZfwKEmdWui7HSTnSZX7Oc4PGszGLgJ8Xl9pvlO6iDwV4+O10ky4TFwnNwqNZfe44AcNorNcRq65WXq8E7LqlND09dPzzuwX9TDYRXdzXTD1pIQpsoGbQPTWnUuIB8qhMOTh1MNaskj2MgUqzFomAtNyA6KK2pMxZPa/e3f3Cd/smHuLqVGqI1pkspilIm5atEI0oRBRx3i6ynj+giN1zg+OHSjrPSfrnbXX+cEgCzO2OogzmbL57kvf0Q+jJ/TZnE/L83T/Yd4H995WsXVzxM4cLkND2KrjE6GCDiiQyUXhfYh5Vy7CKF2Yq+M6G0K6uE8Mo6FXxH5SOWAvqmgUdH3fvJugFVGZbScXXyGY6Puoy+6gqPMoKoCTJy45IbjgSv8FJAZAoaANQ3eUYwOaorfdNaEGiUD1cQ+c2qXVam1KzJrrhOXABEXBBx4LGSXAVxZa9qhghfHhM6Ttc2GaBz1iJ1sHn2FHVmww2pjnXTYLqfKW7jAn3rl+JWK2qqzGHfooF3qMzEfV/Z94hlnsEV48g4R1Sc+PKGM9I17OKnYgrIYSecf+d/Rlw1cGyq6DlhOB0/72gLqpE= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 58eed92b-36a0-4589-9787-08de4dbd3b54 X-MS-Exchange-CrossTenant-AuthSource: CO6PR10MB5409.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Jan 2026 07:20:27.3957 (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: 79rnX6WDrfaZuQg7XybubVC5RWOxdZsTp/87REvmM1+IL7pdKbev1T5yk6OQrzPTKb4TglXUPWScGmJaa809h0JLoEV9wvk+TflJK7S45mQ= X-MS-Exchange-Transport-CrossTenantHeadersStamped: LV8PR10MB7750 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2026-01-06_03,2026-01-06_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 bulkscore=0 suspectscore=0 malwarescore=0 adultscore=0 mlxscore=0 phishscore=0 spamscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2512120000 definitions=main-2601070058 X-Proofpoint-GUID: WlCXku5ou1FREs9VMHg_oJkbHj_UeLwD X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTA3MDA1OSBTYWx0ZWRfXyQm1xzTjMaab VIMpauXDxYj64V2pZQ/S6xydn1RjOtnHZFGQRnuIVUcfKU/88m2g3tYOPlurkRMzcP5HS3koCIn mwScvIeVAhfhq2Vy56TVhVzjCpSn6d44sTpVNg4MJDkADywkoiJfOEJD6U0TRJf6RUwiGOPIK1y uHl1XMP3KuSvs4stahawnLUs646UUfkaF6KNBDKPspAPWQQqASkkDsI/GVoXWPZAxhy1ccz5Dh2 6qJjys74wJblFI+Z99x1nZmOlaZLqmaz7aZSnIyOkbvV1meZ36rrS19I8xgLhDvN0253adSs8dc 2zxrJM4la8OVpQGfwuLyWwMAjQY+zDrPBKipBhho7OeSmAjzIW8yOT7nbNvTM2wK4jWhRURr143 e5/mjgH1p/tS1lrjfTE7uxHdDTxcGaFKirMUfs04EACb/zTxo0FVQU2lXlTuEuzdhFEYC1iBPc5 PggA4IRdbEF2JdX2/htnnq2eH4oI8a6PeIk2nKNk= X-Authority-Analysis: v=2.4 cv=KtVAGGWN c=1 sm=1 tr=0 ts=695e0b14 b=1 cx=c_pps a=zPCbziy225d3KhSqZt3L1A==:117 a=zPCbziy225d3KhSqZt3L1A==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=vUbySO9Y5rIA:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=yPCof4ZbAAAA:8 a=zd2uoN0lAAAA:8 a=QIWs6u34hG4Mh4SAT7kA:9 cc=ntf awl=host:12109 X-Proofpoint-ORIG-GUID: WlCXku5ou1FREs9VMHg_oJkbHj_UeLwD Content-Type: text/plain; charset="utf-8" process_huge_pages(), used to clear hugepages, is optimized for cache locality. In particular it processes a hugepage in 4KB page units and in a difficult to predict order: clearing pages in the periphery in a backwards or forwards direction, then converging inwards to the faulting page (or page specified via base_addr.) This helps maximize temporal locality at time of access. However, while it keeps stores inside a 4KB page sequential, pages are ordered semi-randomly in a way that is not easy for the processor to predict. This limits the clearing bandwidth to what's available in a 4KB page. Consider the baseline bandwidth: $ perf bench mem mmap -p 2MB -f populate -s 64GB -l 3 # Running 'mem/mmap' benchmark: # function 'populate' (Eagerly populated mmap()) # Copying 64GB bytes ... 11.791097 GB/sec (Unless otherwise noted, all numbers are on AMD Genoa (EPYC 9J13); region-size=3D64GB, local node; 2.56 GHz, boost=3D0.) 11.79 GBps amounts to around 323ns/4KB. With memory access latency of ~100ns, that doesn't leave much time to help from, say, hardware prefetchers. (Note that since this is a purely write workload, it's reasonable to assume that the processor does not need to prefetch any cachelines. However, for a processor to skip the prefetch, it would need to look at the access pattern, and see that full cachelines were being written. This might be easily visible if clear_page() was using, say x86 string instructions; less so if it were using a store loop. In any case, the existence of these kind predictors or appropriately helpful threshold values is implementation specific. Additionally, even when the processor can skip the prefetch, coherence protocols will still need to establish exclusive ownership necessitating communication with remote caches.) With that, the change is quite straight-forward. Instead of clearing pages discontiguously, clear contiguously: switch to a loop around clear_user_highpage(). Performance =3D=3D Testing a demand fault workload shows a decent improvement in bandwidth with pg-sz=3D2MB. Performance of pg-sz=3D1GB does not change because it has always used straight clearing. $ perf bench mem mmap -p $pg-sz -f demand -s 64GB -l 5 discontiguous-pages contiguous-pages (baseline) (GBps +- %stdev) (GBps +- %stdev) pg-sz=3D2MB 11.76 +- 1.10% 23.58 +- 1.95% +100.51% pg-sz=3D1GB 24.85 +- 2.41% 25.40 +- 1.33% - Analysis (pg-sz=3D2MB) =3D=3D At L1 data cache level, nothing changes. The processor continues to access the same number of cachelines, allocating and missing them as it writes to them. discontiguous-pages 7,394,341,051 L1-dcache-loads = # 445.172 M/sec ( +- 0.04% ) (35.73%) 3,292,247,227 L1-dcache-load-misses = # 44.52% of all L1-dcache accesses ( +- 0.01% ) (35.73%) contiguous-pages 7,205,105,282 L1-dcache-loads = # 861.895 M/sec ( +- 0.02% ) (35.75%) 3,241,584,535 L1-dcache-load-misses = # 44.99% of all L1-dcache accesses ( +- 0.00% ) (35.74%) The L2 prefetcher, however, is now able to prefetch ~22% more cachelines (L2 prefetch miss rate also goes up significantly showing that we are backend limited): discontiguous-pages 2,835,860,245 l2_pf_hit_l2.all = # 170.242 M/sec ( +- 0.12% ) (15.65%) contiguous-pages 3,472,055,269 l2_pf_hit_l2.all = # 411.319 M/sec ( +- 0.62% ) (15.67%) That sill leaves a large gap between the ~22% improvement in prefetch and the ~100% improvement in bandwidth but better prefetching seems to streamline the traffic well enough that most of the data starts comes from the L2 leading to substantially fewer cache-misses at the LLC: discontiguous-pages 8,493,499,137 cache-references = # 511.416 M/sec ( +- 0.15% ) (50.01%) 930,501,344 cache-misses = # 10.96% of all cache refs ( +- 0.52% ) (50.01%) contiguous-pages 9,421,926,416 cache-references = # 1.120 G/sec ( +- 0.09% ) (50.02%) 68,787,247 cache-misses = # 0.73% of all cache refs ( +- 0.15% ) (50.03%) In addition, there are a few minor frontend optimizations: clear_pages() on x86 is now fully inlined, so we don't have a CALL/RET pair (which isn't free when using RETHUNK speculative execution mitigation as we do on my test system.) The loop in clear_contig_highpages() is also easier to predict (especially when handling faults) as compared to that in process_huge_pages(). discontiguous-pages 980,014,411 branches = # 59.005 M/sec (31.26%) discontiguous-pages 180,897,177 branch-misses = # 18.46% of all branches (31.26%) contiguous-pages 515,630,550 branches = # 62.654 M/sec (31.27%) contiguous-pages 78,039,496 branch-misses = # 15.13% of all branches (31.28%) Note that although clearing contiguously is easier to optimize for the processor, it does not, sadly, mean that the processor will necessarily take advantage of it. For instance this change does not result in any improvement in my tests on Intel Icelakex (Oracle X9), or on ARM64 Neoverse-N1 (Ampere Altra). Signed-off-by: Ankur Arora Reviewed-by: Raghavendra K T Tested-by: Raghavendra K T Acked-by: David Hildenbrand (Red Hat) --- Interestingly enough, with this change we are pretty much back to commit 79ac6ba40eb8 ("[PATCH] hugepage: Small fixes to hugepage clear/copy path") from circa 2006! Raghu, I've retained your R-by and tested by on this patch (and the next) since both of these commits just break up the original patch. Please let me know if that's not okay. mm/memory.c | 28 +++++++++------------------- 1 file changed, 9 insertions(+), 19 deletions(-) diff --git a/mm/memory.c b/mm/memory.c index 2a55edc48a65..c06e43a8861a 100644 --- a/mm/memory.c +++ b/mm/memory.c @@ -7237,40 +7237,30 @@ static inline int process_huge_page( return 0; } =20 -static void clear_gigantic_page(struct folio *folio, unsigned long addr_hi= nt, - unsigned int nr_pages) +static void clear_contig_highpages(struct page *page, unsigned long addr, + unsigned int nr_pages) { - unsigned long addr =3D ALIGN_DOWN(addr_hint, folio_size(folio)); - int i; + unsigned int i; =20 might_sleep(); for (i =3D 0; i < nr_pages; i++) { cond_resched(); - clear_user_highpage(folio_page(folio, i), addr + i * PAGE_SIZE); + + clear_user_highpage(page + i, addr + i * PAGE_SIZE); } } =20 -static int clear_subpage(unsigned long addr, int idx, void *arg) -{ - struct folio *folio =3D arg; - - clear_user_highpage(folio_page(folio, idx), addr); - return 0; -} - /** * folio_zero_user - Zero a folio which will be mapped to userspace. * @folio: The folio to zero. - * @addr_hint: The address will be accessed or the base address if uncelar. + * @addr_hint: The address accessed by the user or the base address. */ void folio_zero_user(struct folio *folio, unsigned long addr_hint) { - unsigned int nr_pages =3D folio_nr_pages(folio); + unsigned long base_addr =3D ALIGN_DOWN(addr_hint, folio_size(folio)); =20 - if (unlikely(nr_pages > MAX_ORDER_NR_PAGES)) - clear_gigantic_page(folio, addr_hint, nr_pages); - else - process_huge_page(addr_hint, nr_pages, clear_subpage, folio); + clear_contig_highpages(folio_page(folio, 0), + base_addr, folio_nr_pages(folio)); } =20 static int copy_user_gigantic_page(struct folio *dst, struct folio *src, --=20 2.31.1 From nobody Mon Feb 9 00:42:13 2026 Received: from mx0a-00069f02.pphosted.com (mx0a-00069f02.pphosted.com [205.220.165.32]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2F50D283CA3 for ; Wed, 7 Jan 2026 07:37:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=205.220.165.32 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767771432; cv=fail; b=PsWUq9QA1cG5GoG3fjDpjxpnyDW0lVzC89rOJuxLmXuiuWbojqFxrB2xrDE0N4cRV3I+PHamZE9gMXB3k6Fc72XeskV+VSKLRkAMPH7/TwAReMZDr1ej6p/uvySdXciyxVy1Wb4/I+FwVkTWrkqLhmpC0sk72rxt4sT5h6g9MXc= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767771432; c=relaxed/simple; bh=wMHgrWJi6Cr0wS+w/TmU29oBCqk0APSlq34F0PFuZRs=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=H0QIw0jSdc25EQWqNxAFozGRF1IOadE38Uvinm4gXeR3ci1uyh8BCd8yPPwqj40dH5HGqiEONE48UUT0OexsykE8tGFoPchdWynVatqudX2Pt9uBDbGfNmrfDgBw+kAVrff1t0eeLHk9COBDuTKRZeSyi6XVpBLN3k8Wa+h+pg0= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oracle.com; spf=pass smtp.mailfrom=oracle.com; dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b=IrFm9nhk; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=Cra8go0g; arc=fail smtp.client-ip=205.220.165.32 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oracle.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oracle.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b="IrFm9nhk"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="Cra8go0g" Received: from pps.filterd (m0246629.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 6076Kuo11431714; Wed, 7 Jan 2026 07:36:21 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-2025-04-25; bh=3wsP87ikguyBPoMm4fQzIUJZkz0KUggf55vc6adHNjY=; b= IrFm9nhknCS/SI0Rqmh0cdhBF/4oLR7IJMDlhWPyTMDLLcad5b35L7pxq7K4IL1l UyMr6GkLa+HhkMz1hIAPah3l4B6EM8FNUMrHL6h4w7BSdHMifqdeMEymIEa/g32E xuLDIbwIVk4w526DMAWNlA7hkPUKvQA/tYHQ8iyQIJyG92D5ezdzFFRPR/1t+G1K vyltng1H1WJG0/PxHnxfrsy81b+AVV6d++/xazPuslbmWmTuCprrFUx/lvYtrNDf Tr4BSCPjyeBa88+tx9NZADj5KhjBO28zYRGLVEXVsqsg+m9Cz4J+l5xNgLTNs80O IJX/0S/QfJ76iRpRIGaJVA== Received: from iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta01.appoci.oracle.com [130.35.100.223]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4bhj4ug1wd-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 07 Jan 2026 07:36:21 +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 6076txVJ020387; Wed, 7 Jan 2026 07:20:31 GMT Received: from bn1pr04cu002.outbound.protection.outlook.com (mail-eastus2azon11010032.outbound.protection.outlook.com [52.101.56.32]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 4besjkhwjh-4 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 07 Jan 2026 07:20:31 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=mRw9sEXgETErz0Q+E5kp2E+4OUwF8iPevvYI9SQG6CTqpyzGIZsX8sNH25gz5USgTgEJmQbqCnJGyeTcvG+rIL+DBGE+ALYA6Q3bgL4s/SZOcHujXg0xE1k9PLuUe8GaC9KRTuSM5uBpEY9V5TPfjf4ba4alfGG/T7y48la2pvmN2y2ij8FIz98ajv0H041yQC0meIV1NAQ/2JeTHIofRno4cVoPwUfuvz5ejb64tSFsSZNIClzndp3Vn2KRA6HiZuPFg8PRwrd6STp4eFvM3jRkrNvCyw8FpOcnD9Vvr8T7dhxlZKsW8Ohb8dXg5Bp6jCf05VyxUWXGrPSzv5MJ7w== 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=3wsP87ikguyBPoMm4fQzIUJZkz0KUggf55vc6adHNjY=; b=Zlx40O/8A3PRXBqu9qAD7nYLdwph8dk0afraxsAYZgjWWfQNqK/bxC2LvE3JzCxBIJTCL4Ys8sh+PRPJ9x8MKonMAkCnRyUsfbDPeMmQpXsBQmEoqfLnlUO7K4881L1WDiJPPddehT70jV0mYn8lLoVmxSmIRoY+C5xOntEPu/TQIcWEPsw6iRb/88Ms9MKIlDngSuUDNw8jO5DhiNOF3ceHmmNj9ixveh4csHKHilY7HnMfoUxRCbDSly+HtjDCI0q+6QJnFvCRq4VcJDbl9y447jGVjisWmhkOnmqDFcAVg3+vrzR2tM78iHwqVQNrFEF5oobskRc/+XKB8J3nbw== 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=3wsP87ikguyBPoMm4fQzIUJZkz0KUggf55vc6adHNjY=; b=Cra8go0gyUc49ZnSEzUu6KWE1nWNZkxb5QahNvnMNqdUsDKzP/XGP2ce7K+EhxQF2fHxFL6jwyByWTKG5VZ+qYdQgJjhl4Ebk5/+d5if8puA1CA73mLSU/38lQ1229dfUeDvw0NMc42kOpurYAkCQPmR3QGVbPxyjYzpE9tZmuM= Received: from CO6PR10MB5409.namprd10.prod.outlook.com (2603:10b6:5:357::14) by LV8PR10MB7750.namprd10.prod.outlook.com (2603:10b6:408:1ed::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9499.2; Wed, 7 Jan 2026 07:20:29 +0000 Received: from CO6PR10MB5409.namprd10.prod.outlook.com ([fe80::3c92:21f3:96a:b574]) by CO6PR10MB5409.namprd10.prod.outlook.com ([fe80::3c92:21f3:96a:b574%4]) with mapi id 15.20.9478.004; Wed, 7 Jan 2026 07:20:29 +0000 From: Ankur Arora To: linux-kernel@vger.kernel.org, linux-mm@kvack.org, x86@kernel.org Cc: akpm@linux-foundation.org, david@kernel.org, bp@alien8.de, dave.hansen@linux.intel.com, hpa@zytor.com, mingo@redhat.com, mjguzik@gmail.com, luto@kernel.org, peterz@infradead.org, tglx@linutronix.de, willy@infradead.org, raghavendra.kt@amd.com, chleroy@kernel.org, ioworker0@gmail.com, lizhe.67@bytedance.com, boris.ostrovsky@oracle.com, konrad.wilk@oracle.com, ankur.a.arora@oracle.com Subject: [PATCH v11 7/8] mm: folio_zero_user: clear page ranges Date: Tue, 6 Jan 2026 23:20:08 -0800 Message-Id: <20260107072009.1615991-8-ankur.a.arora@oracle.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20260107072009.1615991-1-ankur.a.arora@oracle.com> References: <20260107072009.1615991-1-ankur.a.arora@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: MW4PR04CA0056.namprd04.prod.outlook.com (2603:10b6:303:6a::31) To CO6PR10MB5409.namprd10.prod.outlook.com (2603:10b6:5:357::14) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CO6PR10MB5409:EE_|LV8PR10MB7750:EE_ X-MS-Office365-Filtering-Correlation-Id: 729667d5-bad1-41eb-7b83-08de4dbd3c4e X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|1800799024|366016; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?BFN42qKpS3HpZLbuSiaZ7pQ4i2eJClRdnOGkVoPfv+K1oYpK6DHvNpdymc2r?= =?us-ascii?Q?6E6E5C0qi0YOfQTFjIjIiQFksKRs06Zcs+bwTP7WuBRZFngc4qIQiSa0w4/E?= =?us-ascii?Q?h4u6tL87NWAbw1YX8/XG+ZbJPZFHbt0as78B1xu4O99oGX87mH1rtW2xKTDj?= =?us-ascii?Q?KVWQmxYL8ezWeUQYtDJ6sFHMoEsoSm9QuVCZd4HRwf7fi11EHs/722BwLzgy?= =?us-ascii?Q?6sawkS0nc5SpOXoVific7KF4nc0xTcs+DP4HwTpImQ+zr3uRg75HfPdM2A2G?= =?us-ascii?Q?4HvHcAah/kL1hFVb/o2aLCckhOXxx44Q14qqXYRSRHcBDk6IXDkcUpRVefwN?= =?us-ascii?Q?fmmetO6heuq40ZtnOQhNSvBWtJH29VhUezjmJrPvSThKtDrDoRxYHFM6H4kt?= =?us-ascii?Q?vwhprvreMGFlhb1xcdMxUT3Coh1qjPMi4cTSeeUT7cY4qcXk8PzJD+IAThdu?= =?us-ascii?Q?qqvRnjRqIG4g7YbUb92XqBtyTZQGbeo1au0Yr0OM3S0gvLViyJcMhhinQHyS?= =?us-ascii?Q?t9xXEpPiSX206DI0/jsHpKl0aq4t9s3FPE+o0/YkTDNdMdpHREqlHMahDpna?= =?us-ascii?Q?/bBGIrmKduE8vWNRTZGnwvKSpqR6yQ65XijZkMgP8qhSE/RYpQRRdxgHgxRY?= =?us-ascii?Q?AameFHspdWYgcuM2YYbjPxf2hrVwr1es20yaaO3hDiYUlYPAMr/bAzeJ5WuR?= =?us-ascii?Q?8qJUBS8koIpdg1zodzGChpt4wp3xoaZZRVXBWadHMn0s3dQXPGofIc9oc7Fx?= =?us-ascii?Q?bbk/Fxn623rRTlZueimOY+h0XJeDgkzpQoTG2TQzT8q35U2m07I/lgiNG5fe?= =?us-ascii?Q?oJhiHhb9yA6Wng41DnIpNniDEfo7wSoP7TkDO5Bk9tefZOwXB8Fg8qFkvPbh?= =?us-ascii?Q?Inacw8deM7qo/FGUmZTNvxvfrTHQoX0ciArFFrVDt2ncGgGGd0V/R95GaOiz?= =?us-ascii?Q?mY6i4qJ4gqnAd9krTa+9a2wy0szGAMqPHF7JPdiiemrq4ROg+s74UievgIGd?= =?us-ascii?Q?HfMpeFgOSarsOzuvLi++fLxyDxN9PPib/8m1Jr/CT/Pwo8PxV3rYEJVHP2tr?= =?us-ascii?Q?5UkYR2PFdSfumF5UBN4iJfXI5thr4TQS8SarA3YEVS1VNPE3/8FiqiHJ6Bld?= =?us-ascii?Q?EcpJiGZcs132UG0k/DRWyKvMkssd2M3Ai437mHc7SRKjRwc4+DTfE72RKOZk?= =?us-ascii?Q?KcgsR2TXbqZ6E1AFf2G9u0vYc72f+st/awWJbcZaNCgi37qQ6lRD83PwAKIS?= =?us-ascii?Q?NV7WyLksEWt2H0dRQV35aNEqD9cPEW7oqHN0VFd1Q2FzTAS8l3n5SkR10tuL?= =?us-ascii?Q?Zs2tlv9H9HUYUfEGRsnntalVHEUdHTeLlrA6nn+xmDnZpVK2+YPj2UU2U82s?= =?us-ascii?Q?SjVsPD/wd0m4XXbxQlhQn291B+ypY8cxRLkzyRkNDhslChQvL3z2uVzgQ8EA?= =?us-ascii?Q?Cl6nFe5FkIRWhvECPj1sj/KWJrbn82Y5?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CO6PR10MB5409.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(7416014)(1800799024)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?a6+dSTFkZV/MuFNhv4B5+GAk115NjeuLtNWyr8iXIfDlcOctxhuELfdKmv2e?= =?us-ascii?Q?sn4d7SyxGDM5f7xTYAhchMh+KhUHozPFMQn392758fMIYQMz8g50zDZUWYHS?= =?us-ascii?Q?XbE6ZgsKCu5uwFAnWNyjvKva280ZZkWXgCwEdH6jBjUwpK3KMdp+xg+SZgH5?= =?us-ascii?Q?n8DqEB2z6y8OJ3wLDbJOo7Ys0wxiOc/07E8zun1VnJ1Q79hzNiLylDUaxIta?= =?us-ascii?Q?eR5a3b5sDPSt8wYsb7bjmq2CLAeNn6GzOnz7/MxSzmCHh0SnbkBS/p4ZxF3G?= =?us-ascii?Q?BFy/z2oo3KMKSaQbMqDi8+djdc0Ura1KBhlIbkbvLsMngrzUHBnE5F2xQJVq?= =?us-ascii?Q?H4b0JQPmNlUFXv4opiLUlYldF/ll43vw7/k5QUlZFpr0AF0YcZuoqQTweNJW?= =?us-ascii?Q?NYnB59rXF4gYtyHbldf5QHE+kHVGxMHM/TI+Ykn5KSiBH3sAYi2WnHSVRNJf?= =?us-ascii?Q?tuK7GUcGndCrz0Zw81NsohZVB02ak15c6qVbcLmTbGHS9BXJJ60rO1Q04ICY?= =?us-ascii?Q?F45URcSQ8vKDMHQCoKDV2uDis8HNTj1kFItoRC6i99tmGELkmHXM74BIthR4?= =?us-ascii?Q?KIP46KscG06neEylJTpJaxttZtVnZ52gNwpsLExJAYmqwSGeJlUf/UniQjP7?= =?us-ascii?Q?oIsaFNOjjOnbc/f0TgWYrZlBOTMqMFKPEsxFM94T07D6FZN9lP/r9ge//Mp1?= =?us-ascii?Q?ddGr4lLmoiYYpRkV5EaG4+TRmsIvD70jSoiLHcxR9xXkfhylW7PKUx3lQ1MS?= =?us-ascii?Q?19IkCJ4bUs7k8bj6c5X7gkp/oeJ6K/tdBgZ60MEp4NAA2Ijf1z2/Ay2wo6c8?= =?us-ascii?Q?auj/RUFyKAEFke9APErejB44SMRmGzPnaCVkUQ4smd63oURl6uYYjZ0HY4fv?= =?us-ascii?Q?x3DaBujMWJDBx5td3QeTHgHk2dFlsFHa2wKu+KX1wiV7dygznkfJkWLWnbAq?= =?us-ascii?Q?hWgHwUXioR/hLvty3U38wFnbufnx4RX/jtqfkTBJeMOUadGWSqZ94MHbGvg7?= =?us-ascii?Q?mwEQczlpxG4Yh3p/HSkmkPMU/orws6CKHwjhgMRbhfSS0nz0/SoagKvpwFRV?= =?us-ascii?Q?ExTwhdZ4mA63kRJQ+bzkqLW6bDFE+k2F4KNKDSt8tZHYjNpT+Gr3393itsm/?= =?us-ascii?Q?uXwcXeyiCWIkIdOqK6pN7kocr9iX5AMdi2Ahj/05DTXAxnrPgu2Y4ZbLcKHX?= =?us-ascii?Q?BbbGTbIigvDJVmvMlW2zh2dcbTwhQHTkJpnr3bymy6/NHkjHacvK3qjAgpzY?= =?us-ascii?Q?WFap80tHxnNYpHkrFOCxIX6MUhxmsiGtVXxnclfJl4BnWxAs9newRhAJLcJq?= =?us-ascii?Q?LjAPDT36eCyhCdPoHmj/pOpTgSccoXVddxPoVyVykcEtbEDaIAlfYuT1xRmD?= =?us-ascii?Q?IGhgBfqZ6fGB4UBwfqkg/AeFYfmAlj2Kr4rUDtTvpGhpoOjsbRRGHm+5ZZBd?= =?us-ascii?Q?3vJKSvxn+JTujiARFD/R9KOzW9QzwBithce2t5L0snXOIbv/BlJAb6q+1Fgv?= =?us-ascii?Q?arMhevloyicLpyhXmfDy3MFBlf2YNEHazp4TOw5KNOg+K5ajF0adnZZTRt5p?= =?us-ascii?Q?XC5GREw1W1ykZzNfv6il14rJIW5zQaOv2xtAZ3dkVDUosIAdOem6JeHofWZ0?= =?us-ascii?Q?z3bpEFWAj5Rm7OYLOY/EgpJWG4G13ac4IA6QVVER/bMgKh3AkuGAAX9dY3fp?= =?us-ascii?Q?D7LSwJ/ZBFN95YQK1raEgYlqW1outMfOCx6DNh7bqIStRuzn8FFFGsHivKhs?= =?us-ascii?Q?ihjOvCDzC0tBARBKykXKzQLwHyn4inc=3D?= X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: Bs2rBqmw65VqSA9MYEG699zIZUF+hl0jjI/kWoNtmNv9T55vx4J14Kf4l8bit4rtVFYabpdmy2P373nVZM1kjj8p9CmEnNFuxDDrvJXSHPTD6fvlKLsVGzLjwFLA3R7Skv8QBs8nWyAf9qJhSE7fhPlX45idpwRW1RLglWFpMN/hTif9P+ZTh7ay0aP6I8murgilOHLkJaMIzwCQPmNUxCnSTkbqLxckYBSS50wQmnDIetQyImo1JFMR6ld17C0o3h2JzlrAHJDPAoHGYH9K5A+G8lQp4G6TRip5HqEXo9xDNSxYlY4yq0NLoJ0+xodlvs4e45BOCaVRGf6Tdv4fwhxySCHtu6qQf6xSbYVHfj2DdhhWN4eKi9v+DXRlJritJJAJ403V+6ltTHE9O8wPC1gwupsXJ4aTqKfgmstnuuCSNwcw/9LvvIAjdPJDWT57NicCqe07DCNSxkds6nO2so2oNA0ft+ckIqfatapo/iocM9cnIebP9eMWqyB3fjrNwBhZP7lbGivk+49wLjUScOtj8ifwXcrIhYcBuzVzwCPxQPvYZ0bHRKsp6o/NjtdSZ0q8oDfbYWCwnnhXbkcVtMRkeeUqyFIRRlTuxw+r/qw= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 729667d5-bad1-41eb-7b83-08de4dbd3c4e X-MS-Exchange-CrossTenant-AuthSource: CO6PR10MB5409.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Jan 2026 07:20:29.0454 (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: 5/YDNY5xoo29RHJ9aP4g4wpd/4Cy+Cuq0deodZJzMNLl/tAPeI/FWNkuVT0Ti41Buy7bODVfVt6Ic2BeMzEqczxxM++1oB0KocXBB980gqs= X-MS-Exchange-Transport-CrossTenantHeadersStamped: LV8PR10MB7750 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2026-01-06_03,2026-01-06_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 bulkscore=0 suspectscore=0 malwarescore=0 adultscore=0 mlxscore=0 phishscore=0 spamscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2512120000 definitions=main-2601070058 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTA3MDA2MCBTYWx0ZWRfX4AXfJxZyMj+P 3kU5mhNx7wGX4XyV2LicybEMXlGbq8caTWfYWsIsEgGbFnb4J0x2GxWlDrDv+NXNVDHclGAkYBq yMvW/EYB5UevBWjVFLhihjxtdD0bvcoJ+9KtFYR7BnljqylCIZRmEauajjArkx+Gz3Qp7sEl0U4 BhfeWRdZK9XhEW/y4+lmpcTaCVEGrdSwV1fjm7BAdGOiugEfWOZ9a/uAny+00rM/9gRk5vRH5eD /fAeEnkxZWnpRDxzgX8ROP5bthXebAfltpJaJhNi32CJiPwH1mDl7fmQ6S98/GtXeSjy4A090b1 3D/gkootQYJh3prgGtj9X2BQ9xsuquC8/CdzT4VHRsoWSpKESFmSUMqY/iS36nsmSrMrw94HkOv TfpjsMNtPQo7N+E8JqQi5XlEQKSh9fymbqY5PlCoB47qYPx0LTLPwYYoTnRjwANtZ6lPtG4ZZ4i B0L33Zz+OcqxKHOvjYp2wpCLT9rODik7UraU8njE= X-Proofpoint-GUID: _9U6CJ7QLXJUWB8d6H_5xa5oxVW3TRj9 X-Proofpoint-ORIG-GUID: _9U6CJ7QLXJUWB8d6H_5xa5oxVW3TRj9 X-Authority-Analysis: v=2.4 cv=WP5yn3sR c=1 sm=1 tr=0 ts=695e0cf5 b=1 cx=c_pps a=zPCbziy225d3KhSqZt3L1A==:117 a=zPCbziy225d3KhSqZt3L1A==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=vUbySO9Y5rIA:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=yPCof4ZbAAAA:8 a=vf6uuqR7Wl2Q4O64qLYA:9 cc=ntf awl=host:12109 Content-Type: text/plain; charset="utf-8" Use batch clearing in clear_contig_highpages() instead of clearing a single page at a time. Exposing larger ranges enables the processor to optimize based on extent. To do this we just switch to using clear_user_highpages() which would in turn use clear_user_pages() or clear_pages(). Batched clearing, when running under non-preemptible models, however, has latency considerations. In particular, we need periodic invocations of cond_resched() to keep to reasonable preemption latencies. This is a problem because the clearing primitives do not, or might not be able to, call cond_resched() to check if preemption is needed. So, limit the worst case preemption latency by doing the clearing in units of no more than PROCESS_PAGES_NON_PREEMPT_BATCH pages. (Preemptible models already define away most of cond_resched(), so the batch size is ignored when running under those.) PROCESS_PAGES_NON_PREEMPT_BATCH: for architectures with "fast" clear-pages (ones that define clear_pages()), we define it as 32MB worth of pages. This is meant to be large enough to allow the processor to optimize the operation and yet small enough that we see reasonable preemption latency for when this optimization is not possible (ex. slow microarchitectures, memory bandwidth saturation.) This specific value also allows for a cacheline allocation elision optimization (which might help unrelated applications by not evicting potentially useful cache lines) that kicks in recent generations of AMD Zen processors at around LLC-size (32MB is a typical size). At the same time 32MB is small enough that even with poor clearing bandwidth (say ~10GBps), time to clear 32MB should be well below the scheduler's default warning threshold (sysctl_resched_latency_warn_ms=3D100= ). "Slow" architectures (don't have clear_pages()) will continue to use the base value (single page). Performance =3D=3D Testing a demand fault workload shows a decent improvement in bandwidth with pg-sz=3D1GB. Bandwidth with pg-sz=3D2MB stays flat. $ perf bench mem mmap -p $pg-sz -f demand -s 64GB -l 5 contiguous-pages batched-pages (GBps +- %stdev) (GBps +- %stdev) pg-sz=3D2MB 23.58 +- 1.95% 25.34 +- 1.18% + 7.50% p= reempt=3D* pg-sz=3D1GB 25.09 +- 0.79% 39.22 +- 2.32% + 56.31% p= reempt=3Dnone|voluntary pg-sz=3D1GB 25.71 +- 0.03% 52.73 +- 0.20% [#] +110.16% p= reempt=3Dfull|lazy [#] We perform much better with preempt=3Dfull|lazy because, not needing explicit invocations of cond_resched() we can clear the full extent (pg-sz=3D1GB) as a single unit which the processor can optimize for. (Unless otherwise noted, all numbers are on AMD Genoa (EPYC 9J13); region-size=3D64GB, local node; 2.56 GHz, boost=3D0.) Analysis =3D=3D pg-sz=3D1GB: the improvement we see falls in two buckets depending on the batch size in use. For batch-size=3D32MB the number of cachelines allocated (L1-dcache-loads) -- which stay relatively flat for smaller batches, start to drop off because cacheline allocation elision kicks in. And as can be seen below, at batch-size=3D1GB, we stop allocating cachelines almost entirely. (Not visible here but from testing with intermediate sizes, the allocation change kicks in only at batch-size=3D32MB and ramps up from there.) contigous-pages 6,949,417,798 L1-dcache-loads = # 883.599 M/sec ( +- 0.01% ) (35.75%) 3,226,709,573 L1-dcache-load-misses = # 46.43% of all L1-dcache accesses ( +- 0.05% ) (35.75%) batched,32MB 2,290,365,772 L1-dcache-loads = # 471.171 M/sec ( +- 0.36% ) (35.72%) 1,144,426,272 L1-dcache-load-misses = # 49.97% of all L1-dcache accesses ( +- 0.58% ) (35.70%) batched,1GB 63,914,157 L1-dcache-loads = # 17.464 M/sec ( +- 8.08% ) (35.73%) 22,074,367 L1-dcache-load-misses = # 34.54% of all L1-dcache accesses ( +- 16.70% ) (35.70%) The dropoff is also visible in L2 prefetch hits (miss numbers are on similar lines): contiguous-pages 3,464,861,312 l2_pf_hit_l2.all = # 437.722 M/sec ( +- 0.74% ) (15.69%) batched,32MB 883,750,087 l2_pf_hit_l2.all = # 181.223 M/sec ( +- 1.18% ) (15.71%) batched,1GB 8,967,943 l2_pf_hit_l2.all = # 2.450 M/sec ( +- 17.92% ) (15.77%) This largely decouples the frontend from the backend since the clearing operation does not need to wait on loads from memory (we still need cacheline ownership but that's a shorter path). This is most visible if we rerun the test above with (boost=3D1, 3.66 GHz). $ perf bench mem mmap -p $pg-sz -f demand -s 64GB -l 5 contiguous-pages batched-pages (GBps +- %stdev) (GBps +- %stdev) pg-sz=3D2MB 26.08 +- 1.72% 26.13 +- 0.92% - p= reempt=3D* =20 pg-sz=3D1GB 26.99 +- 0.62% 48.85 +- 2.19% + 80.99% p= reempt=3Dnone|voluntary pg-sz=3D1GB 27.69 +- 0.18% 75.18 +- 0.25% +171.50% p= reempt=3Dfull|lazy =20 Comparing the batched-pages numbers from the boost=3D0 ones and these: for a clock-speed gain of 42% we gain 24.5% for batch-size=3D32MB and 42.5% for batch-size=3D1GB. In comparison the baseline contiguous-pages case and both the pg-sz=3D2MB ones are largely backend bound so gain no more than ~10%. Other platforms tested, Intel Icelakex (Oracle X9) and ARM64 Neoverse-N1 (Ampere Altra) both show an improvement of ~35% for pg-sz=3D2MB|1GB. The first goes from around 8GBps to 11GBps and the second from 32GBps to 44 GBPs. Signed-off-by: Ankur Arora Acked-by: David Hildenbrand (Red Hat) --- include/linux/mm.h | 36 ++++++++++++++++++++++++++++++++++++ mm/memory.c | 18 +++++++++++++++--- 2 files changed, 51 insertions(+), 3 deletions(-) diff --git a/include/linux/mm.h b/include/linux/mm.h index a4a9a8d1ffec..fb5b86d78093 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h @@ -4204,6 +4204,15 @@ static inline void clear_page_guard(struct zone *zon= e, struct page *page, * mapped to user space. * * Does absolutely no exception handling. + * + * Note that even though the clearing operation is preemptible, clear_page= s() + * does not (and on architectures where it reduces to a few long-running + * instructions, might not be able to) call cond_resched() to check if + * rescheduling is required. + * + * When running under preemptible models this is not a problem. Under + * cooperatively scheduled models, however, the caller is expected to + * limit @npages to no more than PROCESS_PAGES_NON_PREEMPT_BATCH. */ static inline void clear_pages(void *addr, unsigned int npages) { @@ -4214,6 +4224,32 @@ static inline void clear_pages(void *addr, unsigned = int npages) } #endif =20 +#ifndef PROCESS_PAGES_NON_PREEMPT_BATCH +#ifdef clear_pages +/* + * The architecture defines clear_pages(), and we assume that it is + * generally "fast". So choose a batch size large enough to allow the proc= essor + * headroom for optimizing the operation and yet small enough that we see + * reasonable preemption latency for when this optimization is not possible + * (ex. slow microarchitectures, memory bandwidth saturation.) + * + * With a value of 32MB and assuming a memory bandwidth of ~10GBps, this s= hould + * result in worst case preemption latency of around 3ms when clearing pag= es. + * + * (See comment above clear_pages() for why preemption latency is a concern + * here.) + */ +#define PROCESS_PAGES_NON_PREEMPT_BATCH (32 << (20 - PAGE_SHIFT)) +#else /* !clear_pages */ +/* + * The architecture does not provide a clear_pages() implementation. Assume + * that clear_page() -- which clear_pages() will fallback to -- is relativ= ely + * slow and choose a small value for PROCESS_PAGES_NON_PREEMPT_BATCH. + */ +#define PROCESS_PAGES_NON_PREEMPT_BATCH 1 +#endif +#endif + #ifdef __HAVE_ARCH_GATE_AREA extern struct vm_area_struct *get_gate_vma(struct mm_struct *mm); extern int in_gate_area_no_mm(unsigned long addr); diff --git a/mm/memory.c b/mm/memory.c index c06e43a8861a..49e7154121f5 100644 --- a/mm/memory.c +++ b/mm/memory.c @@ -7240,13 +7240,25 @@ static inline int process_huge_page( static void clear_contig_highpages(struct page *page, unsigned long addr, unsigned int nr_pages) { - unsigned int i; + unsigned int i, unit, count; =20 might_sleep(); - for (i =3D 0; i < nr_pages; i++) { + /* + * When clearing we want to operate on the largest extent possible since + * that allows for extent based architecture specific optimizations. + * + * However, since the clearing interfaces (clear_user_highpages(), + * clear_user_pages(), clear_pages()), do not call cond_resched(), we + * limit the batch size when running under non-preemptible scheduling + * models. + */ + unit =3D preempt_model_preemptible() ? nr_pages : PROCESS_PAGES_NON_PREEM= PT_BATCH; + + for (i =3D 0; i < nr_pages; i +=3D count) { cond_resched(); =20 - clear_user_highpage(page + i, addr + i * PAGE_SIZE); + count =3D min(unit, nr_pages - i); + clear_user_highpages(page + i, addr + i * PAGE_SIZE, count); } } =20 --=20 2.31.1 From nobody Mon Feb 9 00:42:13 2026 Received: from mx0b-00069f02.pphosted.com (mx0b-00069f02.pphosted.com [205.220.177.32]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 710FC283FCE for ; Wed, 7 Jan 2026 07:21:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=205.220.177.32 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767770468; cv=fail; b=VzGpQOTH76Bkkrn1EYE+aJPFsfvie9djqUAhyo0Og+b+xqn99Bs1IVn8Ell4Pn+nVzS/rJTkeIXNTnWgChcdykWoeoWiHtAe57AOGfRR4mAZbmx1KLTOQz5mziTmE3peAlMLXnj1Zd0mtrbqQtmRqXqV22H7mJfzcVAlSdxYC58= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767770468; c=relaxed/simple; bh=/OSEgTLp5f/f4JGE5kz8+wFdYaA7yyVRWaY5IExr8rU=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=TdFMY2L/nz5+eI9mt/hEQoy9V47ewlDjy4nH4DPIiAOEc7tP71gD718ISLqiFyb1lvTDaq8H1i2Q7ohCBbGrKGCgoPVVo+M4odHZ4x7uiBMT7MZ+p5xrTB6F4rh5cP2C/erFHlBr0hqfBXhzkzQRP4DHNVzXYWVoEvM4GlqXQJk= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oracle.com; spf=pass smtp.mailfrom=oracle.com; dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b=KA0QfEvH; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=D/OcX5+c; arc=fail smtp.client-ip=205.220.177.32 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oracle.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oracle.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b="KA0QfEvH"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="D/OcX5+c" Received: from pps.filterd (m0246630.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 6070YO1s798881; Wed, 7 Jan 2026 07:20:34 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-2025-04-25; bh=n/Evb0mlSQmpt+BweN5HABblkEfv31PrvCEcVxJaFX0=; b= KA0QfEvH6E4rJnye7vfRrtfv/cTcKFF6pvEH+QhR3kNxQNZcbZPI/PWrJruednZH FZasGs/Z5zlxf+IkItdlFJO5+GCXf7YVwO/0+agTITY/TPtfR8eAet0WS6bN1s34 MKfN61LI7AD4DmydEmQO5x3kQ4LjEooGlSFH4wwZWvSNJTpQfSGiJH875sqHKVRG NIs91MpmPBdFTjbmKj1DDD3yvHGciV6gtdU9vFjx5qJwZMNtc+Ij1uwoS4BywdTl jPcurAXf1NMfT3QIXylrR3PSzoFM3YSf45xvwZrCEGXqoPi3aUrcukkHXBWuOS2A /72t3+kg1vDK7R+8v2NRhQ== Received: from iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta02.appoci.oracle.com [147.154.18.20]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4bhc2frahn-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 07 Jan 2026 07:20:33 +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 60766KHN030734; Wed, 7 Jan 2026 07:20:33 GMT Received: from bn1pr04cu002.outbound.protection.outlook.com (mail-eastus2azon11010071.outbound.protection.outlook.com [52.101.56.71]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 4besjdj5yp-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 07 Jan 2026 07:20:33 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=kc9WCV+lxI9E3bliW2ekF2po1hrBl2e2nZGR1UbSEy7h6JJynrIwA/82/SNLsbI5jriSXFv74VR+UvhLMy3x3J21MebqxTs1GRDxYK6nUOEtYvtVnJmMuC+dZ2cG0IAgmm0NLpr+n1Ru5dy5LabxHd2pYXgT/Cnl3g1tZVqUDNEKgKAVP2lUwrpRG7uLuTyINws8dYjoV9vhBtgvrfTgHJMlS/PxhhRq2KmeZ6FMZvDUWj9CBAHv7abMSK69U9pp/jnEVN3D2FNxpZOL4RyGK5viMHFnp+emLDQyZvEFrC0KALmAIx7O8wHywhau6ExiRUzEdoeIJu7gFXMEDBh6YA== 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=n/Evb0mlSQmpt+BweN5HABblkEfv31PrvCEcVxJaFX0=; b=oFa/5QnhBIzTeoA3KMZ7BOOUj1WCXOTSDyrRqK6iJH/S6bESBlCFsXVBSFzTjxT1vJe8Ccwcm/GWEBkz5sn1HjjbBt3e/HTN+XdzeLq3Ed9UbICZyOFwdJrYMsnYQpf10juQiG4BE0N7ExkIQf61GU8sYCctoeyQmm2lK7lQp1s+mKNQhTeh7NGbZ2jLYgSBgVzpSIwLelhEw1hJWn01GqmV/JuT3tKZ+oQAJ59CqUNok/tXJNecjt6oDNDHM3wqy7lbXtHI94HYKXIERLQ5Kp4jzaYNOQ2bUAFOLfkyEoT/HPeP7KS7dlr9WXvqrwBQSHAHbjN8/sYeTv/p1zDbbA== 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=n/Evb0mlSQmpt+BweN5HABblkEfv31PrvCEcVxJaFX0=; b=D/OcX5+cH/PMZLAwGc+ZPoSysJHVGeKb3ogQxO3Ma/qoDIlBYrVlloBvLr59VyeApG+GBUS2MmTzTUdk5f4oPok0jiJ2i56L6IS67JdE9HAXPSgq4iL1iiHXDRkYrORNxDbGUq88vsL3SGPSECJz4mnroD704ULNMFZBQDsPQFc= Received: from CO6PR10MB5409.namprd10.prod.outlook.com (2603:10b6:5:357::14) by LV8PR10MB7750.namprd10.prod.outlook.com (2603:10b6:408:1ed::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9499.2; Wed, 7 Jan 2026 07:20:30 +0000 Received: from CO6PR10MB5409.namprd10.prod.outlook.com ([fe80::3c92:21f3:96a:b574]) by CO6PR10MB5409.namprd10.prod.outlook.com ([fe80::3c92:21f3:96a:b574%4]) with mapi id 15.20.9478.004; Wed, 7 Jan 2026 07:20:30 +0000 From: Ankur Arora To: linux-kernel@vger.kernel.org, linux-mm@kvack.org, x86@kernel.org Cc: akpm@linux-foundation.org, david@kernel.org, bp@alien8.de, dave.hansen@linux.intel.com, hpa@zytor.com, mingo@redhat.com, mjguzik@gmail.com, luto@kernel.org, peterz@infradead.org, tglx@linutronix.de, willy@infradead.org, raghavendra.kt@amd.com, chleroy@kernel.org, ioworker0@gmail.com, lizhe.67@bytedance.com, boris.ostrovsky@oracle.com, konrad.wilk@oracle.com, ankur.a.arora@oracle.com Subject: [PATCH v11 8/8] mm: folio_zero_user: cache neighbouring pages Date: Tue, 6 Jan 2026 23:20:09 -0800 Message-Id: <20260107072009.1615991-9-ankur.a.arora@oracle.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20260107072009.1615991-1-ankur.a.arora@oracle.com> References: <20260107072009.1615991-1-ankur.a.arora@oracle.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: MW4PR04CA0046.namprd04.prod.outlook.com (2603:10b6:303:6a::21) To CO6PR10MB5409.namprd10.prod.outlook.com (2603:10b6:5:357::14) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CO6PR10MB5409:EE_|LV8PR10MB7750:EE_ X-MS-Office365-Filtering-Correlation-Id: f9fa1355-93e3-4e6e-d39b-08de4dbd3d49 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|1800799024|366016; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?rbUTHgxS/5q73b1d1EuMUNg9siNKVhUq/7RttilBsMYkDsejDa/xeNk6LVl2?= =?us-ascii?Q?Ft60Ug4kX8usKhpRXFXLjwr+m2Bctus3e3q1wgu/vgVybp3VK7Zxz7MTFDi0?= =?us-ascii?Q?ASUMig/ZhySamZ6DluSSemv3W+AUgOnWYAPIg38FscIUIDf2k5vd2C1uRG6X?= =?us-ascii?Q?893pyGaMpem+bTurjRUClPdsYR9msVvc5oDVM0e2cMBESGKkFL+gh2c7AE6M?= =?us-ascii?Q?sPGkqm+m9nGmVOpcXpOL7ss6GN0aMuEzjSykNxnLhXxt7fi/wHtePds3KuN1?= =?us-ascii?Q?Qmb1edBcokNwPSuCC7URoDyDcWSe9XDN8nRyR7Xiwmri4SUyaLQk9U/7XMjw?= =?us-ascii?Q?thsOxa3UniyHvDM4vCuB7qDu3ZCYQI10WtF/fvKHl3GZLh6l8WYAG1iNB4v8?= =?us-ascii?Q?QjNt3olGLgm40ZnmAvtnwCZ1QoYqJbIIT5A2ZjSNFjvxSccAEX6smqyYEayu?= =?us-ascii?Q?FvtZ2xjBEnWbHex6Q9vOxPoyxt+Jhy4f3rY6940sGJFDJKVHoDSHvJODpVru?= =?us-ascii?Q?0l/v+1rtmBO3ZuGZ24kKmWVpd3amtjiaMopibjVHYWYBphID3HwqZIUDKGzN?= =?us-ascii?Q?UTOeLQBqZ2fx8v0rAsX0KC4+QEgbRONW3A1K1RXl+XXNCLjzhZntyqLyvIjH?= =?us-ascii?Q?YwN86psHwhTCjn3XNyaQEPQTIJAmjN4SXAFTETEhA4H3Bm9J2w5PJj3SDDAW?= =?us-ascii?Q?oJxxQhpVQ6x7lF+312gM6onC7Zq1uoRFuwwS2Qer3Mvju0LrdRom8mkLEyYn?= =?us-ascii?Q?m9xfZ5rPOdFx/01nj5oyi+YvmevS3pkUeB9gGVbFWNYbz3WVCuwUQ1UYXY0a?= =?us-ascii?Q?tGufCsYFNGLmDTq91UmTNMCxhs/BYxW6NagcV0dHqkF052hYbt/fa0JcTAuY?= =?us-ascii?Q?uDHmkiJ2TCIFsN6zi8bmFsDZrA1vYMxl7EItszjBZR3seabi1IqG7a77g03g?= =?us-ascii?Q?4xI/U6aDkeciijFrTnJC7vBCBX1GuMm9Pik698Mo5GbnwxybdFuVRxj/hjpk?= =?us-ascii?Q?HSwzkeJhHCDkG3zEKdrzBhzQrmZMF1dw6Y46gASQFLGXQALU2wAR8OHiaNiq?= =?us-ascii?Q?IiKaFrW73YSED0EUe+B3OrAQJ+rQe6blhW1TnQjzXu1Zs70ntRcuq/1/p0AI?= =?us-ascii?Q?6NEJ4FCDB4KevDuG/ZlrHaDB1iMTNhvoydGaezisEBz3ngYzwvjM+UbX/p62?= =?us-ascii?Q?Za8o/e5QW4UeN8T4WHhvU4IJ6uFb+7wpQDYjVBH0v0wBDlvLU/MqUUqBj5Qb?= =?us-ascii?Q?bQSBENgOrHKvRdnHR8n8W7RaGYe+Dz0UDggEkd+U9y+Baa91dG7Ojp5Vwg1l?= =?us-ascii?Q?pyl6Ap9O7SK9qjJY9281F727KJSnPcwJnfPor+gusY1zh27W9T2Zf3M69PY2?= =?us-ascii?Q?GafRd94kusheBwRc3AN7gudrtYSa41wenS9oqXaG7L6A+VVx8AfwSSb1iBOK?= =?us-ascii?Q?izlN0SP+dOxjTxwqoXfCMJ/T9AwJ35MV?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CO6PR10MB5409.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(7416014)(1800799024)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?Y6XnXZ5JHqOeJ0lb7Ft7eioW0ZNj8isw5FULWEuRPWntPGvD1rd7pbPdsYjW?= =?us-ascii?Q?VDGf43e4nDfw0o+nKX0E/rJCn72blHCO5b4m4Ozm4cIVPCOxdHo12b8aksFy?= =?us-ascii?Q?RLQexWg6PVk7owhXg11xz1nw4ZreuOIhLwtcWnTONY4Ze0gI1LqNxE2h3ZaS?= =?us-ascii?Q?WD1OONLRJliwrQVbeVdtQKzb3Jqx/n2WOEAaF/kzHTh2L59ZgNJwiB6pRDDO?= =?us-ascii?Q?5UK3XRM5ZyXhGihZDDms6W+QZOTQ/Qi7QDTI66l6lgO7sz7uArEV8BQimxtC?= =?us-ascii?Q?zv+SKRT65cYNXIxf9Tsjv/6mBBBOv3q4A8ZKWtz5dvDlm16BwKRC1+UrP5ny?= =?us-ascii?Q?5v7nGl4cXkIoYsu76pZkjdeGsgYhwhAIKwpyl86QxfJT3h/prmGR4n64sKNs?= =?us-ascii?Q?V3bjm3zDUhCfQyFFCyC+1sRzDi1McUASOMCnSV9ttRYpcBVVYk2SG06tMQh7?= =?us-ascii?Q?1OUhZy2q7leZdXA2ooPxkf02JKj/QzMeJ/mQVTHeXnDJZkCAsaHrr86TPBey?= =?us-ascii?Q?OS8ss/IRLznBDd/hp75XLoPfToz2z/TfolRmG/sqqyAa5G0gFvOmURbh4Et+?= =?us-ascii?Q?iQQEYq/KzsOwxmb3F5HdiY5zysZctQqKugsp3KzBnyy0e13fNk6eSgBK9ewu?= =?us-ascii?Q?fD1So+DzUJ9G1INAArQRn93lVrm8AjwkQ6P+NE/ppoxvGguCCqTkIN/a7ENw?= =?us-ascii?Q?DHVc9KDfEyu3MApszlQRGn+S5EGq4WgcZPaHSGPd+aXQAWrOhkN9/H/OgUHQ?= =?us-ascii?Q?VySv7zS8YrKTRf+Kfet99NAFUhrA1s6k8FOr46IKtLy8MqlyekSCcr9a+TZW?= =?us-ascii?Q?PIhJqTXJJGgpTR604Xu3BwrSVd16yGHstG0p5qmy7xg9icmF4k35keIuBetw?= =?us-ascii?Q?BJmIYtOgWbHBTzSPT6GbHufnNovlGuM1OuSMMJ+c+0dcIbIfa1UH03qAYEdC?= =?us-ascii?Q?WkeBMKlLLdf4LKbh2vgbHgPvptcAudZw/xK47OnyEF7bAbJrtJ1Z2dBReVeY?= =?us-ascii?Q?twIBGDl+d62HOEbqdv2fCluS0WvHQWFUL0RNfQ726sGpAkyiVAQQqBDlyN3w?= =?us-ascii?Q?dOhwdO/QHlSBR0eQ9FINrj4VjsyJMRyU3CQ3tjiVIYJtgO5GcYXa67qZimzd?= =?us-ascii?Q?AL87ZDgFlQ2H/XskIZpslnSAy+j/MiN+34SZ0MeCVkDGtA6DPjmybXeYZKMK?= =?us-ascii?Q?B9IHK7YXsJULRuldxC1gFT4z/ZR9HomehINdrd7PzJ5b+FN4oUdOeL+Yl/4H?= =?us-ascii?Q?Hfoq6f+jHcojSGe2nweTjQvU1G3IZiA0AlCCKC9UQMrsJc0/SsGvnaJ1Z1Qa?= =?us-ascii?Q?b57/asODAubOS7R695l2kC759lFQB4F3RkhZrqbkvsxcrJ6e4AmkSqno0T9j?= =?us-ascii?Q?c5sy+lu59WDxQ3GsOifnosm+gwRKt2+J1wn38p3dPLIAuMGlMJJK8Eg98K0o?= =?us-ascii?Q?c+2PfvLTwYjuZNmoyMpqcfq3TPc6cHd2u0Xp+nN8o7NGUQn7JyTzpfTU1H4e?= =?us-ascii?Q?kROnK1HdaGT1t96a7RsTiFjJ9y3eehfl4zOoKwLDLP46Ct/Hbs9+7ckR2rGQ?= =?us-ascii?Q?l7po/Mobaem1GqNGKtJcbrmZaPEmeHfkZUEdfGHWkwCbEv6ueji1f2wO14gX?= =?us-ascii?Q?qqZY0UXzB6h7rv/TwD0BTL67SwEijU8FzARW+XO/DAo0K9p/x3eOYfS6v4q/?= =?us-ascii?Q?SilZcBDWYzTDFl05zzjmYLmoXHnFkgWLRTUx3Lb2pLBI3HTk0LfTTRmRvxuG?= =?us-ascii?Q?F8VJoUeV8o2ABz54cUJJc83YzDEbY78=3D?= X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: SwYWagpKpoPw6uS/E8QOMrWMxGafUHptdbpR3ODsBuOHR5SjFKwkIHVsDGg3MX/efwB77kDHZpal2NQ5Cdatdu2OOs9DWG+iuIFiGi0STvYrFNF1EZlj0PwQ9v6enAuoyRAWGmZdLFpJT7XuPrnSuFjI09s24ILhq37F9xeknwEEtM67Mr3YYrnJs9suR+7D+eDR41wBuslSMB7Va1KmbLQ9XQ+EFbTSmL5+iuAJC+mh+Edh68mHwkimS/OHrFFeruj6sMZGaLzqEYevdiGCpy01fE8ikmvo5OXMnuL97CWafz2GfePnTvXSKOFk3n4bto9wfWpXDMQ0I3mkFpM6Wmt0vRFRydx7myTtpiGIvOCZ4yaWFv050lp3MnjdXBHpDuieJgoML9LW6vakU1Aso+ZMA7yuamlzoIkIZEORHpAdR4OOYtx1HXsXcpzeU/6lGelmCTXNZ2Jt29IexXqSFsSFC0Crp193hWWYlqc4gP07E4qTypMg2+oJFYtxNrPpsEsCWMoRbgrb7JOgcVqhyLiScPgedNR1NVVsASZiwwT6p+iSW+SagoJt7Gr7I8G5UrRhJyGCGLw90emD74b/fqR99bM2lENAD8LNOoyD+cs= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: f9fa1355-93e3-4e6e-d39b-08de4dbd3d49 X-MS-Exchange-CrossTenant-AuthSource: CO6PR10MB5409.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Jan 2026 07:20:30.6674 (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: ZzU20i8FwFIxpxTQEsXxwPIT57CYK43tljOlVgRIrJdTofELKRT+p8FXxsInrZFxCpA7/RBdO8aDsG7fm8LqlcQa9vKv6SLQMaGITImTW30= X-MS-Exchange-Transport-CrossTenantHeadersStamped: LV8PR10MB7750 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2026-01-06_03,2026-01-06_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 bulkscore=0 phishscore=0 adultscore=0 malwarescore=0 suspectscore=0 mlxscore=0 spamscore=0 mlxlogscore=999 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2512120000 definitions=main-2601070058 X-Proofpoint-GUID: dNxKxpyxZPyhNt-v2j-rWhBgM5awZctD X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTA3MDA1OCBTYWx0ZWRfX5iH41c/AMd7p 0a0Bl1K+nM2E/wBAxdHbs463tY5QN4IQzwd9vJ47MPmym+lMsOukGLOq7ewuGYu+bCvkTEh6IcH d7Dbfi3wawDovLpg+PRq7DEU9GinyqNW76NL45VPbRNkrVWRkZPtZuDRO1QDVw0z3VJp0U2lQ8r aFyrMI8bsa1dlZ4sMQyCvtKWJqDrsEAokO+2VCZ8NoHm+23y+FiVYwV8w5aMv8mj35RatRscTFz L0oMX6FsuewDFNoPmfzJVnMRMGt47/g4LbSsHmTnB8INm2QqKDXfVic/YGvqhlJzvh1PvlPTgF5 I0oSSAqj5DDgpRsBK6yhTirv6cI2Y68XRbZQi74jkhKpkUa1AKicrbF+vg6gwdiQXKBlGMoffO7 zroYfYjS1uODLK9PYxVLxkPgGGRGq25gjGeFvIXRLrHzNIcmVF+ZHMnw46ovmSdoZcAakCVV4LG C3oSUrSgl/aP1gyBH7kSnMEHH1rOjmrJac2Au1AY= X-Authority-Analysis: v=2.4 cv=KtVAGGWN c=1 sm=1 tr=0 ts=695e0942 b=1 cx=c_pps a=e1sVV491RgrpLwSTMOnk8w==:117 a=e1sVV491RgrpLwSTMOnk8w==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=vUbySO9Y5rIA:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=yPCof4ZbAAAA:8 a=zd2uoN0lAAAA:8 a=LhKAmCKuLmOf4y2dLz8A:9 cc=ntf awl=host:13654 X-Proofpoint-ORIG-GUID: dNxKxpyxZPyhNt-v2j-rWhBgM5awZctD Content-Type: text/plain; charset="utf-8" folio_zero_user() does straight zeroing without caring about temporal locality for caches. This replaced commit c6ddfb6c5890 ("mm, clear_huge_page: move order algorithm into a separate function") where we cleared a page at a time converging to the faulting page from the left and the right. To retain limited temporal locality, split the clearing in three parts: the faulting page and its immediate neighbourhood, and the regions on its left and right. We clear the local neighbourhood last to maximize chances of it sticking around in the cache. Performance =3D=3D=3D AMD Genoa (EPYC 9J14, cpus=3D2 sockets * 96 cores * 2 threads, memory=3D2.2 TB, L1d=3D16K/thread, L2=3D512K/thread, L3=3D2MB/th= read) vm-scalability/anon-w-seq-hugetlb: this workload runs with 384 processes (one for each CPU) each zeroing anonymously mapped hugetlb memory which is then accessed sequentially. stime utime discontiguous-page 1739.93 ( +- 6.15% ) 1016.61 ( +- 4.75% ) contiguous-page 1853.70 ( +- 2.51% ) 1187.13 ( +- 3.50% ) batched-pages 1756.75 ( +- 2.98% ) 1133.32 ( +- 4.89% ) neighbourhood-last 1725.18 ( +- 4.59% ) 1123.78 ( +- 7.38% ) Both stime and utime largely respond somewhat expectedly. There is a fair amount of run to run variation but the general trend is that the stime drops and utime increases. There are a few oddities, like contiguous-page performing very differently from batched-pages. As such this is likely an uncommon pattern where we saturate the memory bandwidth (since all CPUs are running the test) and at the same time are cache constrained because we access the entire region. Kernel make (make -j 12 bzImage): stime utime discontiguous-page 199.29 ( +- 0.63% ) 1431.67 ( +- .04% ) contiguous-page 193.76 ( +- 0.58% ) 1433.60 ( +- .05% ) batched-pages 193.92 ( +- 0.76% ) 1431.04 ( +- .08% ) neighbourhood-last 194.46 ( +- 0.68% ) 1431.51 ( +- .06% ) For make the utime stays relatively flat with a fairly small (-2.4%) improvement in the stime. Signed-off-by: Ankur Arora Reviewed-by: Raghavendra K T Tested-by: Raghavendra K T Acked-by: David Hildenbrand (Red Hat) --- mm/memory.c | 41 ++++++++++++++++++++++++++++++++++++++--- 1 file changed, 38 insertions(+), 3 deletions(-) diff --git a/mm/memory.c b/mm/memory.c index 49e7154121f5..a27ef2eb92db 100644 --- a/mm/memory.c +++ b/mm/memory.c @@ -7262,6 +7262,15 @@ static void clear_contig_highpages(struct page *page= , unsigned long addr, } } =20 +/* + * When zeroing a folio, we want to differentiate between pages in the + * vicinity of the faulting address where we have spatial and temporal + * locality, and those far away where we don't. + * + * Use a radius of 2 for determining the local neighbourhood. + */ +#define FOLIO_ZERO_LOCALITY_RADIUS 2 + /** * folio_zero_user - Zero a folio which will be mapped to userspace. * @folio: The folio to zero. @@ -7269,10 +7278,36 @@ static void clear_contig_highpages(struct page *pag= e, unsigned long addr, */ void folio_zero_user(struct folio *folio, unsigned long addr_hint) { - unsigned long base_addr =3D ALIGN_DOWN(addr_hint, folio_size(folio)); + const unsigned long base_addr =3D ALIGN_DOWN(addr_hint, folio_size(folio)= ); + const long fault_idx =3D (addr_hint - base_addr) / PAGE_SIZE; + const struct range pg =3D DEFINE_RANGE(0, folio_nr_pages(folio) - 1); + const int radius =3D FOLIO_ZERO_LOCALITY_RADIUS; + struct range r[3]; + int i; =20 - clear_contig_highpages(folio_page(folio, 0), - base_addr, folio_nr_pages(folio)); + /* + * Faulting page and its immediate neighbourhood. Will be cleared at the + * end to keep its cachelines hot. + */ + r[2] =3D DEFINE_RANGE(clamp_t(s64, fault_idx - radius, pg.start, pg.end), + clamp_t(s64, fault_idx + radius, pg.start, pg.end)); + + /* Region to the left of the fault */ + r[1] =3D DEFINE_RANGE(pg.start, + clamp_t(s64, r[2].start - 1, pg.start - 1, r[2].start)); + + /* Region to the right of the fault: always valid for the common fault_id= x=3D0 case. */ + r[0] =3D DEFINE_RANGE(clamp_t(s64, r[2].end + 1, r[2].end, pg.end + 1), + pg.end); + + for (i =3D 0; i < ARRAY_SIZE(r); i++) { + const unsigned long addr =3D base_addr + r[i].start * PAGE_SIZE; + const unsigned int nr_pages =3D range_len(&r[i]); + struct page *page =3D folio_page(folio, r[i].start); + + if (nr_pages > 0) + clear_contig_highpages(page, addr, nr_pages); + } } =20 static int copy_user_gigantic_page(struct folio *dst, struct folio *src, --=20 2.31.1