From mboxrd@z Thu Jan 1 00:00:00 1970 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 9742423A9AD for ; Tue, 23 Dec 2025 05:15:17 +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=1766466919; cv=fail; b=gxp6MlARxz1+HyYorqKHI8BGziD1D13ch3Tpp6+hgolBdStb7IPB1Tv7rSZ2G77rzTOrr5L4eYJfd9Oo1mgzCdX/cDTDXL3nbchtrLeeMJ19qj3QD5Y7zQTDOmr+Hx/d4TRVBh5aYwTF0JdgmLt8x7/TMzpAiIG08RIl76CA6/Q= ARC-Message-Signature:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766466919; c=relaxed/simple; bh=PJUM13s9WxiUpUZRRnEi2OkizyUbTKevrCf9L4zY7cQ=; h=Date:From:To:Cc:Subject:Message-ID:References:Content-Type: Content-Disposition:In-Reply-To:MIME-Version; b=azXg4uC0f+HHFBjBHvgmgQoRLQFTviYsEuDiR1E16RnMT1lNGFpJZVWkG6xkyMWTxtvjUCyKlUTy5ET+QSt/Fa7N8uRcBwbts4wik6NNCJnEr6PhCk4wZIN9A9ECifeA6x+aFWmBunx0d2xMBrkPv4UoMz9QS2kE8CJJ7kl8vEU= 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=X1CGOQzK; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=V0KmDR+a; 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="X1CGOQzK"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="V0KmDR+a" Received: from pps.filterd (m0246627.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 5BN4AVK63603259; Tue, 23 Dec 2025 05:14:20 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :content-type:date:from:in-reply-to:message-id:mime-version :references:subject:to; s=corp-2025-04-25; bh=TZskPGepbhZubl9nYI iCm/re4tcLZFj5/HuMuAXGvN4=; b=X1CGOQzKmsiGCntZA6bXc/0zVnIHK2WlAU OFeVJj82lGU+3RwJql5VwkrZEoErdevdAYw10yZ7wHqb4Sw1M2XKUeZQPYREJxhR 0ktNVm8e8/Wa07cLaLiM4w2JxGb5zgpdEdctf12BQazBnkNF62XLpMmJGdrWlBKA n45+Er2qKOy88sZfWmjbsu8lyciKJyxDESUM3Y3DD8JZ1ERLQ6te0O2vz6MrlVLz FdxN6q9MG8iVtX5JcYTBFYu2V4tNkTsFPQN1QkIEEA036L5boXEtCcH4XIy8yZdC tLdHki3jiC+m5AD/6CwKE6j2V6CvK9Ix/jkRSM2MywhbzSJsorDw== Received: from iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta01.appoci.oracle.com [130.35.100.223]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4b7ktcg159-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 23 Dec 2025 05:14:19 +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 5BN3e3n2016556; Tue, 23 Dec 2025 05:14:18 GMT Received: from sn4pr0501cu005.outbound.protection.outlook.com (mail-southcentralusazon11011021.outbound.protection.outlook.com [40.93.194.21]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 4b5j8j2tam-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 23 Dec 2025 05:14:18 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=BQWjzqlnsX3z8x4/UX+Fta8nteVWW/hxJJyGjt3IRbbYv2j0Y2sW6ShT69ZdNMrOw7OqhJ9iba+9arxJQmTucDVQJrUiyLEBC191m95NZkpRndqN2XImfKdBhAlEjCrLI1f8xf7L0nDIfZF9xO2MiiYbUmDTIwGuZlFYtHEe386FnP5aIeLvXVcYgAUgWrmLha4nKUJXPIzL775gsFF2bQbnBgfMGv1PaaNyMaqgRAe1UxmVFoMgbo3iO9D6ByryA5/jSysD7zj/Z1ydtOVBYZvl2UJOuWV0b7pmhchW682YlJ2v3DfovL49wZHG9k8voQ6ecaWMfGkrUTaodjgIfg== 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=TZskPGepbhZubl9nYIiCm/re4tcLZFj5/HuMuAXGvN4=; b=LuEh/g6qbBeDWkmNgu6QMjz765V+afIfYb4Be+4W0Q24cnJjiqOxRE5Hyl7r31XzJNZ3Z9ReWZt/JUbDaUTOyF4QpZIDSQJYBPEc5i0GMF75rqnvn6P0r5JfeT0C8BiAZbdmFOn+f98kpuii+y/FI7fmAYyL6RbqGYotEI+qTNOgmq+XeiZyTqVmi1OV6EFOwyYvaGx2+J5YbAbMCMQkv7PpNVZUmUwFC99tHYCbuVuMHZaLqb42uohH/UlYxz+iNES7ngYXGCbrbUS0A6HyG2hxDtVtIES1Q8jhbzm7JNNcF5/b5IQ2P5Nd6/XBVPaYI+kKriU3kfAvrPJViv1MFQ== 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=TZskPGepbhZubl9nYIiCm/re4tcLZFj5/HuMuAXGvN4=; b=V0KmDR+acpLjpELqQYrLgkXQ2HoIoJHHl+h0DVpcsCGC0yf9Tmujdd4grBT89CmGIjd8Wz6KpOK1/S2Mx7ayQZrh7TdAZsbeEOPexKalbdYac+Yho7DWzw/OUTR48Jd6KMzZlfbbT49HuhvRDCeolHal3jNzp5Hsw2DMNHdcrbE= Received: from CH3PR10MB7329.namprd10.prod.outlook.com (2603:10b6:610:12c::16) by IA3PR10MB8640.namprd10.prod.outlook.com (2603:10b6:208:583::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9434.11; Tue, 23 Dec 2025 05:14:13 +0000 Received: from CH3PR10MB7329.namprd10.prod.outlook.com ([fe80::c2a4:fdda:f0c2:6f71]) by CH3PR10MB7329.namprd10.prod.outlook.com ([fe80::c2a4:fdda:f0c2:6f71%7]) with mapi id 15.20.9434.009; Tue, 23 Dec 2025 05:14:13 +0000 Date: Tue, 23 Dec 2025 14:14:00 +0900 From: Harry Yoo To: Jiaqi Yan Cc: jackmanb@google.com, hannes@cmpxchg.org, linmiaohe@huawei.com, ziy@nvidia.com, willy@infradead.org, nao.horiguchi@gmail.com, david@redhat.com, lorenzo.stoakes@oracle.com, william.roche@oracle.com, tony.luck@intel.com, wangkefeng.wang@huawei.com, jane.chu@oracle.com, akpm@linux-foundation.org, osalvador@suse.de, muchun.song@linux.dev, rientjes@google.com, duenwen@google.com, jthoughton@google.com, linux-mm@kvack.org, linux-kernel@vger.kernel.org, Liam.Howlett@oracle.com, vbabka@suse.cz, rppt@kernel.org, surenb@google.com, mhocko@suse.com Subject: Re: [PATCH v2 2/3] mm/page_alloc: only free healthy pages in high-order HWPoison folio Message-ID: References: <20251219183346.3627510-1-jiaqiyan@google.com> <20251219183346.3627510-3-jiaqiyan@google.com> Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20251219183346.3627510-3-jiaqiyan@google.com> X-ClientProxiedBy: SE2P216CA0032.KORP216.PROD.OUTLOOK.COM (2603:1096:101:116::9) To CH3PR10MB7329.namprd10.prod.outlook.com (2603:10b6:610:12c::16) 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: CH3PR10MB7329:EE_|IA3PR10MB8640:EE_ X-MS-Office365-Filtering-Correlation-Id: 598a1302-adca-4397-b103-08de41e21c3b X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|7416014|376014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?2dAXx7AB4N0Zi/kJH9CrvWOCGsR9nJsGqr7PafT47NwL2supGD5Kud0f7Jpq?= =?us-ascii?Q?39pJjiq7+yIn8P0hxszheU+AtV4LXHDlLgJaBP+cNGphiAYr038CngArWk7w?= =?us-ascii?Q?nIli5wpj5jQ80auoU635Drhfs3QcLwNulI11K0JQNN3Esx3t3iO2Inz8mWxp?= =?us-ascii?Q?OA6s+1t963uiUjvUECqnIgQoYDBbwvvtDEvap/OlCMBW9+U6ScJfMquxrXgB?= =?us-ascii?Q?3Ax89Godska8nseUZoFvQRH3k2VBu5NvBpVC6YNO6m8O6t4hGIdTJN13sSl1?= =?us-ascii?Q?a0lFQXyNqFT2AiDHcP5suNcsui+qxNMSyzWUGG1XDs/SYEUt4AN28+r4laDq?= =?us-ascii?Q?BFFkVH+OQyEZiVFZXD5Pr9u0LtSoMiPlsF9PSImaapibxXedNDrqbO/MQzmB?= =?us-ascii?Q?9rUiXFlH4Q6cEjoiRKz0/HaoW7jfvMW0iCoJZjToQqI/YvlTdfmZybbIMwSU?= =?us-ascii?Q?0yH7Z+qKKCwuXPGwUEbr4huZIa5beYIUGw+bxrS/if/+6cumTFfSJg8GTLta?= =?us-ascii?Q?6e9AGsry6LtRzVgZIpPBw9TdGJjfoz5ULp8VNH1o1wSh60L9+NV8NxmDN45d?= =?us-ascii?Q?nZNUaMqzxE+0PesM2guUL6eueXZ6fhOjqVYEZA3z9zDYGaC3/rmdxOrf9NyY?= =?us-ascii?Q?bPpnZhdo0z3R6ar1Bmt0iZnuKNu5ZOO27lWiqqhtQvlOlOgqJUrt4mgFNrhU?= =?us-ascii?Q?wM2ZjDsb51GNk9VfUaFC1EefbnUo/LWiYCTcZvJ4rXNyjG5ocOat2TkpeCeS?= =?us-ascii?Q?IzaCXyq8Ho3yJ9zptgYVB9oDU/73TJVMMrhoBY2N7AZSq/8rwQ55HlUN8bUr?= =?us-ascii?Q?t4up92XeBxHgrFsn3cnoMQsyC3W36v+CO5n6837aaOx0SJIOKdCGr7yveERe?= =?us-ascii?Q?RC6ThSxawYdfWJgTlyZClgb4wFKjx3LdFkKhyBQRzXg8DnT4FADEaBP/OgdQ?= =?us-ascii?Q?4SJi38eEDq8J8Jk0YNSfWl+phs9skcXoq55yw9EF/14ntP187nqhNu/ajMO/?= =?us-ascii?Q?mGPtWibKh7fQDhhHbwXrUV43ZrM6DF0hC4G86yp4Zh4nt7JIk/P43W7DyldF?= =?us-ascii?Q?ZEjd6HreNUTfjVDujVZDjUtnD8jai+O+JiU8no1wh5kZxroeoOnydL2r/wmI?= =?us-ascii?Q?arG5JBFVbn+R0C+XvsPwlzAIEQYMFg1BcXAnCn1VQ0smGD5GzfmTYbw15dPQ?= =?us-ascii?Q?9jqXooS73ERZ+7u60oA/Z7Q17c14agkEDgI56ATMJ1jBagvHis4GhiiZYBEq?= =?us-ascii?Q?PdBMVFQdDm9CNmlVtTL9ejLPtBwwsstMw0fmJ/LyMl7xGWRG0YzjWtwEycnT?= =?us-ascii?Q?mxgkagJYD6WkdwIhQY54isWzbu8CzFu0q8FiO/NPrK7tkMVrSGdbfc+IdOEQ?= =?us-ascii?Q?HdGJbK0s7zk2cEvX2uSuwI5Jqf274N4Up9otEqdePTSwb2G3I8HagxX97pJK?= =?us-ascii?Q?TrTeT1naKWWoTBU2Houerw9EvtO3hw19RsCEeIXONwG1TllC5ULL8Q=3D=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CH3PR10MB7329.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(7416014)(376014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?YhPOhfPJRZ1Zah+wrXSztKnjSF6kbknDqK1Rp1c4fLhdQCX+edMUQ9F+heM7?= =?us-ascii?Q?GjDaxzsKvGFYBnaFumTEwl4queWseAlxwOPjIO4tEhzpXMQvrd9qE2th1t+j?= =?us-ascii?Q?WcFOADEH2OAzVs3CTn9i+oqGvJRijAqJYtuAteK0ChcouBgrxvUmY9RIIgi/?= =?us-ascii?Q?zFTDgt462MwCwSMMv5BM11QLbUnJ4tKMAdj/LVwsiTV0V/1Vq+DnRZ4bBBqS?= =?us-ascii?Q?QO8RZwcZCyKtklGU7JYCA7TJeoXZ8zrr75OXUv9P74ON3HNRgiKttGqUh/OU?= =?us-ascii?Q?EX0C6QGBEDKdpFGvg+oW8FqZrFJH/EiR/uWjdv/G+KxPCGk9716bisq+QNnT?= =?us-ascii?Q?bxKaP+khUCkJxkZCU1OXOE7gvZ3yoXiTRnP5zb4L8v/0XRthA04V477hwr0p?= =?us-ascii?Q?nv3VCteqtULtL2pI/Elnf73+wWozEonTgwwZyCZJhAZS9yHhYsCNsjRxPRCh?= =?us-ascii?Q?eq6XYAy/tE+gPrNJWTTrZx1NRsEzfnTH0ztz69c1mQd3nLCXaABMVTtSfaKS?= =?us-ascii?Q?AnmeDjiV/8SmPj6NsqM7XZvOhc8WDcpwivtg0snnoDgvfQcWUNOihH12BdNJ?= =?us-ascii?Q?4gKAyOMUlt8weg0Fdt25/aX9tM8Gb2CSH3D2vAYrBnjnCuXMV2QITmI3jpuZ?= =?us-ascii?Q?95BpPdF+imqoglLKfkQSrPME9GBUUfk0majbsagr3EbeeZGyUejm41yFP76A?= =?us-ascii?Q?qcSvrqR6oQe6x8wKF+gFO8joQGKGBv4z6Ty0xalM0LNFbF839O+PNn7OnSvY?= =?us-ascii?Q?43yMdn/dauco7nW9Q+KCNQLoqe/fDkbJa+i2zJ/PaYzusJ729BydtgAN1GQH?= =?us-ascii?Q?7qBDNg+FASMp6ZfNKB8/IDcmjOyfu6qZkMoy9VFzfVfRL/pyPWgxskuay9ib?= =?us-ascii?Q?Lb43+5AL0OVhAOtnMlFnkh+9BrVXCcRR7Rkw6mnJciyDwicE7KpACTNeJoWL?= =?us-ascii?Q?cn5Cte6Kff8jp9nmriaDBPT6uVqAVZH939jFHWKT9iqHN6aZHt47LW6smjaK?= =?us-ascii?Q?aO53MPIpppmouUxZwGA+W2t0BoPtzgaH1JXGFbv+HnNQeUAqhFlpYFY/KPiz?= =?us-ascii?Q?ABfZK0EyFTtaYDRaCxP8qJIPWxyiANHvTkPaTAMHZ2T/OeYfQyfAT8SwUHdC?= =?us-ascii?Q?pLcT/J4pjeJPoAZszA4biUeHiYWH2mfsmQ3Sgw/clvbjmGYWNznXMcAfPlA0?= =?us-ascii?Q?9CyhZpUakZILBmcF0+CQH8RY4f22EdKSJnV4ZyeRa8KXh2hhGGiXTXB6mVfR?= =?us-ascii?Q?WgrJxYWkLxSZV/wMBMV1x05bamiwaXF2nGTWhT9HWF3Ue2ymvpvP2PKUt556?= =?us-ascii?Q?ziYzh/u2HIkLshdu49hADj66icjtTiD7cxz6RfiL+NBhWRuJ+m8VAEYq4F1X?= =?us-ascii?Q?gBYyKv47ZqwehSPDIi6tVmrOqn3uGl/H0nfGuKKb1GFPpuT3GoZ6sINBAM9g?= =?us-ascii?Q?3wo9cQblvn/QE6eKfZWkPFT4ZqwKOXFxZvtNWjMf3LNlaexRRm6qhqwCKG8o?= =?us-ascii?Q?gF6wpPBuiqvC+eRYGioef9brmBEuEz9FKOATN2pPWD47xQGlXqfx6jcsdfES?= =?us-ascii?Q?VollbO9MuEJ3qzdDYyKbFMEH/J5eX4vBgVUgc6kzcJJu3ttPZdgEkalmr4SK?= =?us-ascii?Q?NNbt6nnOS6oBH1FHOJWeH24SWpvkKFU4Xc/ct6/K+hrfk9mjdjdtJvbbNsOl?= =?us-ascii?Q?l64f94qphV5MQ9hWVzkdLs3HV1h75dgeJfibA1E90ESI4iPenPPfwp9h7eH1?= =?us-ascii?Q?nPcpujPcjQ=3D=3D?= X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: x1MC7j8dlvkU26+/FUz70CkceWDm9sIYJcS+nninizH6kJnWjjAM6lSRI22s4y7K8N5Nkan/joPnP6ER57D55Jgc/njDQStRJ4H7/EidWK51gwfTdZ9Hf9NG+bgApKFpKKu4DLB0briu4hAiKqg/ZwP6jCEDi6Cet3N7/1AUeJ7wqLtNajbXXxe1P0tpQpg9kCLAk+q46SkjN/zW/fZuwq/xAaBxBP/+skYDTg20+qCIiWcsHeOoKHWXqT0GQW2vIyJI8SM+pENYchcgBOObN3edTaj9t1YSqRPGCnjOpTmEpFVeb+gRboNjlweqYKg+pEeTBpsc72W0/lY2S5kf11SHz7rpPfJarzZh1pilLeuAhZzH+w1UIOFfwDd8fZXHEwgtfXfSQMCieByvVLGhbchlA2WbtYMRjmlcMcryxN1Iwt2ExaRpH2PB9dmSUU6av0WBqAPFbvOwngM5t1XI2WhFB30qbDcm1EJhA6HnN0Zb58PtD8QC0BGhj0d7M300uvH++80FLFxf6j4Y1Ky72yy3LTCv23zo2L1luPD8NUy0aRU6lKGIOW5UAv0MtIeTpd5YDXmg5Eiuy0ikMiv/gBGJ2PdpbyoexA+KADPfHlk= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 598a1302-adca-4397-b103-08de41e21c3b X-MS-Exchange-CrossTenant-AuthSource: CH3PR10MB7329.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Dec 2025 05:14:13.0606 (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: AwMuR+QKcqCTOARvbxPCfhHRCSfwsdCorAXtg6Z+q6B1KBnONaHBnR4Ex8LWtZtB1kTVjgfLv3R0/V4UocbOhQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: IA3PR10MB8640 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=2025-12-23_01,2025-12-22_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 phishscore=0 mlxlogscore=999 spamscore=0 malwarescore=0 mlxscore=0 bulkscore=0 adultscore=0 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2512120000 definitions=main-2512230042 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMjIzMDA0MSBTYWx0ZWRfXyKfnpHCUWaku S5HXeG89CtaSkTOF7csh/ZEmet1ayib8n2TBjVul7qY1okxfZO54sxWGNcf8SIsuxs2moxfwLdY wI69giHSe2rmtzEEXexQhqzVH7zkj1CKdC2I1Q7iRVxU7HwUxzQpP6fCT1F0WlURvPHRS1rVW2i Qa+ADqujY9JhomdPKWN9NqQwD5D6I8hapcL+I1cjkPMND8Do5yL/Ece5c/+Vqbm5guQo1N3iUSI 8AI+abdjWN8Ut8GJKzeG2Yb4etxBs6CVkfhMMKRWGs7ypg2bQeU3yOrm+6Z8lZPhlNE5sAG+D5Q venP88KF0Y37sK+xLlYv1oqSEOAfIqdwzJ6PqSUxKcKXVc3Yjj4Ikmd8Vje0aWW3UCtEmG4alFZ fbR2YmPdeAvxEnKaNY849swKr8d9pSgbXwxHpr7nkWrjXrFq2bGjoTi84yCqcSPmoaGVauk9X6v 6j0TZZdyhXlPwoHGV5RcZ3+Rl8XxpGFVoJueEgCs= X-Proofpoint-GUID: vaCX-pC_fMtPfjNdHDLH2qNsgwEsARtj X-Proofpoint-ORIG-GUID: vaCX-pC_fMtPfjNdHDLH2qNsgwEsARtj X-Authority-Analysis: v=2.4 cv=ONQqHCaB c=1 sm=1 tr=0 ts=694a252b 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=kj9zAlcOel0A:10 a=wP3pNCr1ah4A:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=VwQbUJbxAAAA:8 a=R_Myd5XaAAAA:8 a=1XWaLZrsAAAA:8 a=Q5I-b3xSWx7GxrG_ZasA:9 a=CjuIK1q_8ugA:10 a=L2g4Dz8VuBQ37YGmWQah:22 cc=ntf awl=host:12109 On Fri, Dec 19, 2025 at 06:33:45PM +0000, Jiaqi Yan wrote: > At the end of dissolve_free_hugetlb_folio that a free HugeTLB > folio becomes non-HugeTLB, it is released to buddy allocator > as a high-order folio, e.g. a folio that contains 262144 pages > if the folio was a 1G HugeTLB hugepage. > > This is problematic if the HugeTLB hugepage contained HWPoison > subpages. In that case, since buddy allocator does not check > HWPoison for non-zero-order folio, the raw HWPoison page can > be given out with its buddy page and be re-used by either > kernel or userspace. > > Memory failure recovery (MFR) in kernel does attempt to take > raw HWPoison page off buddy allocator after > dissolve_free_hugetlb_folio. However, there is always a time > window between dissolve_free_hugetlb_folio frees a HWPoison > high-order folio to buddy allocator and MFR takes HWPoison > raw page off buddy allocator. > > One obvious way to avoid this problem is to add page sanity > checks in page allocate or free path. However, it is against > the past efforts to reduce sanity check overhead [1,2,3]. > > Introduce free_has_hwpoison_pages to only free the healthy > pages and excludes the HWPoison ones in the high-order folio. > The idea is to iterate through the sub-pages of the folio to > identify contiguous ranges of healthy pages. Instead of freeing > pages one by one, decompose healthy ranges into the largest > possible blocks. Each block meets the requirements to be freed > to buddy allocator (__free_frozen_pages). > > free_has_hwpoison_pages has linear time complexity O(N) wrt the > number of pages in the folio. While the power-of-two decomposition > ensures that the number of calls to the buddy allocator is > logarithmic for each contiguous healthy range, the mandatory > linear scan of pages to identify PageHWPoison defines the > overall time complexity. Hi Jiaqi, thanks for the patch! Have you tried measuring the latency of free_has_hwpoison_pages() when a few pages in a 1GB folio are hwpoisoned? Just wanted to make sure we don't introduce a possible soft lockup... Or am I worrying too much? > [1] https://lore.kernel.org/linux-mm/1460711275-1130-15-git-send-email-mgorman@techsingularity.net/ > [2] https://lore.kernel.org/linux-mm/1460711275-1130-16-git-send-email-mgorman@techsingularity.net/ > [3] https://lore.kernel.org/all/20230216095131.17336-1-vbabka@suse.cz > > Signed-off-by: Jiaqi Yan > --- > mm/page_alloc.c | 101 ++++++++++++++++++++++++++++++++++++++++++++++++ > 1 file changed, 101 insertions(+) > > diff --git a/mm/page_alloc.c b/mm/page_alloc.c > index 822e05f1a9646..20c8862ce594e 100644 > --- a/mm/page_alloc.c > +++ b/mm/page_alloc.c > @@ -2976,8 +2976,109 @@ static void __free_frozen_pages(struct page *page, unsigned int order, > } > } > > +static void prepare_compound_page_to_free(struct page *new_head, > + unsigned int order, > + unsigned long flags) > +{ > + new_head->flags.f = flags & (~PAGE_FLAGS_CHECK_AT_FREE); > + new_head->mapping = NULL; > + new_head->private = 0; > + > + clear_compound_head(new_head); > + if (order) > + prep_compound_page(new_head, order); > +} Not sure why it's building compound pages, just to decompose them when freeing via __free_frozen_pages()? If you intended to reset compound head & tails, I think it's more readable to decompose the whole compound page at once and not build compound pages when freeing it? > +/* > + * Given a range of pages physically contiguous physical, efficiently > + * free them in blocks that meet __free_frozen_pages's requirements. > + */ > +static void free_contiguous_pages(struct page *curr, struct page *next, > + unsigned long flags) > +{ > + unsigned int order; > + unsigned int align_order; > + unsigned int size_order; > + unsigned long pfn; > + unsigned long end_pfn = page_to_pfn(next); > + unsigned long remaining; > + > + /* > + * This decomposition algorithm at every iteration chooses the > + * order to be the minimum of two constraints: > + * - Alignment: the largest power-of-two that divides current pfn. > + * - Size: the largest power-of-two that fits in the > + * current remaining number of pages. > + */ > + while (curr < next) { > + pfn = page_to_pfn(curr); > + remaining = end_pfn - pfn; > + > + align_order = ffs(pfn) - 1; > + size_order = fls_long(remaining) - 1; > + order = min(align_order, size_order); > + > + prepare_compound_page_to_free(curr, order, flags); > + __free_frozen_pages(curr, order, FPI_NONE); > + curr += (1UL << order); > + } > + > + VM_WARN_ON(curr != next); > +} > + > +/* > + * Given a high-order compound page containing certain number of HWPoison > + * pages, free only the healthy ones to buddy allocator. > + * > + * It calls __free_frozen_pages O(2^order) times and cause nontrivial > + * overhead. So only use this when compound page really contains HWPoison. > + * > + * This implementation doesn't work in memdesc world. > + */ > +static void free_has_hwpoison_pages(struct page *page, unsigned int order) > +{ > + struct page *curr = page; > + struct page *end = page + (1 << order); > + struct page *next; > + unsigned long flags = page->flags.f; > + unsigned long nr_pages; > + unsigned long total_freed = 0; > + unsigned long total_hwp = 0; > + > + VM_WARN_ON(flags & PAGE_FLAGS_CHECK_AT_FREE); > + > + while (curr < end) { > + next = curr; > + nr_pages = 0; > + > + while (next < end && !PageHWPoison(next)) { > + ++next; > + ++nr_pages; > + } > + > + if (PageHWPoison(next)) > + ++total_hwp; > + > + free_contiguous_pages(curr, next, flags); page_owner, memory profiling (anything else?) will be confused because it was allocated as a larger size, but we're freeing only some portion of it. Perhaps we need to run some portion of this code snippet (from free_pages_prepare()), before freeing portions of it: page_cpupid_reset_last(page); page->flags.f &= ~PAGE_FLAGS_CHECK_AT_PREP; reset_page_owner(page, order); page_table_check_free(page, order); pgalloc_tag_sub(page, 1 << order); > + total_freed += nr_pages; > + curr = PageHWPoison(next) ? next + 1 : next; > + } > + > + pr_info("Excluded %lu hwpoison pages from folio\n", total_hwp); > + pr_info("Freed %#lx pages from folio\n", total_freed); > +} > + > void free_frozen_pages(struct page *page, unsigned int order) > { > + struct folio *folio = page_folio(page); > + > + if (order > 0 && unlikely(folio_test_has_hwpoisoned(folio))) { > + folio_clear_has_hwpoisoned(folio); > + free_has_hwpoison_pages(page, order); > + return; > + } > + It feels like it's a bit random place to do has_hwpoisoned check. Can we move this to free_pages_prepare() where we have some sanity checks (and also order-0 hwpoison page handling)? > __free_frozen_pages(page, order, FPI_NONE); > } > > -- > 2.52.0.322.g1dd061c0dc-goog -- Cheers, Harry / Hyeonggon