From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 8A156CCD1BF for ; Sat, 25 Oct 2025 15:30:30 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id A5B658E014E; Sat, 25 Oct 2025 11:30:29 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id A0B1D8E0135; Sat, 25 Oct 2025 11:30:29 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 8849C8E014E; Sat, 25 Oct 2025 11:30:29 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0014.hostedemail.com [216.40.44.14]) by kanga.kvack.org (Postfix) with ESMTP id 663AA8E0135 for ; Sat, 25 Oct 2025 11:30:29 -0400 (EDT) Received: from smtpin06.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id C36EE140190 for ; Sat, 25 Oct 2025 15:30:28 +0000 (UTC) X-FDA: 84037023336.06.3D27CB9 Received: from MW6PR02CU001.outbound.protection.outlook.com (mail-westus2azon11012030.outbound.protection.outlook.com [52.101.48.30]) by imf21.hostedemail.com (Postfix) with ESMTP id DD9871C000F for ; Sat, 25 Oct 2025 15:30:25 +0000 (UTC) Authentication-Results: imf21.hostedemail.com; dkim=pass header.d=Nvidia.com header.s=selector2 header.b=nkgMfLde; dmarc=pass (policy=reject) header.from=nvidia.com; spf=pass (imf21.hostedemail.com: domain of ziy@nvidia.com designates 52.101.48.30 as permitted sender) smtp.mailfrom=ziy@nvidia.com; arc=pass ("microsoft.com:s=arcselector10001:i=1") ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1761406226; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=jlDALx22rg5kBC5Yu6IHhE1BtpvxwKS4sxS7ws/CqTQ=; b=iYvHb2OlOfqhh9j5FecyzpLSA7Nr7F/Xb/+wGUiNz553Q0lDc2E0warXt/kxdXckZR33pQ 7W5J9jhS2a4vpa6iDpGhA5qL3M+TUUTVNSYLcEybm1BegkdplJCI/CBXIKGrwOqmFffTwU +FYsynSxwXZdBxdfzBfdxWpte+uvL/E= ARC-Seal: i=2; s=arc-20220608; d=hostedemail.com; t=1761406226; a=rsa-sha256; cv=pass; b=RGD8FaCf+DcIY/y/5gO5f6kFJhrGQ5pOJk9u6uAPhTQFJTB8JVTVQXzG745h4atFHgXwXG ct2PugSUSeH7ervOEHJghRhNMXXmfxwj11VoBiDb1Abj51OOdoITkXaCU9775mwLenDOHe ANQ1lDoRXzbK5re6y6lqx1zjfvp7G7s= ARC-Authentication-Results: i=2; imf21.hostedemail.com; dkim=pass header.d=Nvidia.com header.s=selector2 header.b=nkgMfLde; dmarc=pass (policy=reject) header.from=nvidia.com; spf=pass (imf21.hostedemail.com: domain of ziy@nvidia.com designates 52.101.48.30 as permitted sender) smtp.mailfrom=ziy@nvidia.com; arc=pass ("microsoft.com:s=arcselector10001:i=1") ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=TFEZYWvtAupDN+/HpEVF0BwjNx/SnyVKm+yQQ4une8ogQ13zy6ReSeKmGAPY/HZ8sOXejM7iH6qKXsGLBYHec2z195c+N2AS6wnNyD05gyyEIaAR2YWF59ZvOITsioQZxCCZKOnFX3cNEgZals23zJKgWEhT/nW0hqg9B50a8xtHRbDlES+8cHc9czw5uqK3YcwpfveWl//0WXurlX0bB05dkO1x9bQD5z4JbsBuO1rPzPowxmySqm1Xo3vjafqOJ82j/0EawJJJCH+vo0iWBW8QeCtVt4Ag8Rr+9c7JMdlBAh4qCFV+spYTTDRZWEhG+B8QYKpz5E1ImPwgYb83yw== 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=jlDALx22rg5kBC5Yu6IHhE1BtpvxwKS4sxS7ws/CqTQ=; b=SMy1IYSjRQo8bnJtqtBZxBI14vtmCL2bLxeOkW7g0CukkdbAzLQo5hRNw7rgL0CN1cTybsiKrD+ASN+rQ4OEVQ76k+n/1KSgjFgg5lTF3VB8tA8Jbb5XHax9b+BPgkX8Af/JQfcB+V8R92mKG8v6M+Hjkg0M8KOPXwjBvXR67BmO4RI2IPYJfus7PGgynHPpH7YISgl/HIuLxNQpC0waVs33V+by2PHUGvMBu3a9m/NzsaF8g43zEcDLHsHGeYxw84o5gEpsW9gjcH5oqIutsNt8eswBzJgh3odmm2Q2wbYB7gaZHPdq2bqJxAV30jvj7DYQTxa2msbNMYhhv437cA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=jlDALx22rg5kBC5Yu6IHhE1BtpvxwKS4sxS7ws/CqTQ=; b=nkgMfLdetAnmeUNxS46kdlR5NpPrMfNZzEiIRhpaUY8a42cYrnx5wEpLVOG8bfLm/nU6cb9MW1FdeSI7nZO5/cabRPrkWLrdAsavrrq3AvYnoKtVzqBM5eGNMMTLjT2ffHnQ1AUk+KFRNs0M0f4a5TffhPKIw/To65B3uYQOie3uqeo2dUlmgPZL2LKlgI0moitVIryYxp1IJ6HgXbG08TgAewCq8lxToTDEytKIofufrPTU2+Yz7okNKUC8c643EwNdhfWJ1VGrd1gOYdxS9OFPIWxW5vHVy7Uo4Qk1K7C0igVLrXtRqx1ODSc7mnJqHHSaY5WP8hfKCAZxCKtO2Q== Received: from DS7PR12MB9473.namprd12.prod.outlook.com (2603:10b6:8:252::5) by CH0PR12MB8485.namprd12.prod.outlook.com (2603:10b6:610:193::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9253.16; Sat, 25 Oct 2025 15:30:22 +0000 Received: from DS7PR12MB9473.namprd12.prod.outlook.com ([fe80::5189:ecec:d84a:133a]) by DS7PR12MB9473.namprd12.prod.outlook.com ([fe80::5189:ecec:d84a:133a%5]) with mapi id 15.20.9253.011; Sat, 25 Oct 2025 15:30:22 +0000 From: Zi Yan To: Lorenzo Stoakes Cc: linmiaohe@huawei.com, david@redhat.com, jane.chu@oracle.com, kernel@pankajraghav.com, akpm@linux-foundation.org, mcgrof@kernel.org, nao.horiguchi@gmail.com, Baolin Wang , "Liam R. Howlett" , Nico Pache , Ryan Roberts , Dev Jain , Barry Song , Lance Yang , "Matthew Wilcox (Oracle)" , Wei Yang , Yang Shi , linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, stable@vger.kernel.org Subject: Re: [PATCH v4] mm/huge_memory: preserve PG_has_hwpoisoned if a folio is split to >0 order Date: Sat, 25 Oct 2025 11:30:19 -0400 X-Mailer: MailMate (2.0r6272) Message-ID: <60D65915-5FF5-4ECA-A52F-8B9FE8F714F4@nvidia.com> In-Reply-To: <298f1a0c-a265-4b0c-a5a0-7f916878dcc7@lucifer.local> References: <20251023030521.473097-1-ziy@nvidia.com> <298f1a0c-a265-4b0c-a5a0-7f916878dcc7@lucifer.local> Content-Type: text/plain Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: BL0PR01CA0012.prod.exchangelabs.com (2603:10b6:208:71::25) To DS7PR12MB9473.namprd12.prod.outlook.com (2603:10b6:8:252::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DS7PR12MB9473:EE_|CH0PR12MB8485:EE_ X-MS-Office365-Filtering-Correlation-Id: febccf0c-3965-4055-b31d-08de13db6971 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|366016|1800799024|7053199007; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?/v8C6rj9Xmh0X5XZZwmUQKRgbqbvjjD4J8mDJsb/r0fj23w55YqhBYa4n/Eq?= =?us-ascii?Q?36xXlo3QqmS3v+yGhH2l8N8EuoPWbdfpIeTPZr86SuRCdN/+h55pPzrQEYss?= =?us-ascii?Q?mfGzLSNo+ertUJ37OgZIbk0yF+eAI6dZ7h7VFaE1Dz8qYE3/q9MqLsBN+ulG?= =?us-ascii?Q?czRbfRW9WFKXLnJ3fG7/6bGyfhcflKz1i2I4OHZphgYU+gTH1HrCaqOkCjtv?= =?us-ascii?Q?3VzFEK17f8RSIKMD/s8IpQUZwT4cPA/xy1oKmdCvxF2tqL+8UCnd3oepAdpG?= =?us-ascii?Q?pAeN0NG5xL+tYR44yf2EKKQIsczhnfx25QaKqu+TiSR+I1knCNd19NlOJL87?= =?us-ascii?Q?jjZS2526xkYJMgh1W+t6ax3EUoHMLxNhUiRySb2zzn4gSZK8zzMfmHtmjh5i?= =?us-ascii?Q?2T3GD164oMO6Sg0RVs8u/DCGf7oDwSed+PTsfYFem+0ZMheUXUoXKvNlEwsS?= =?us-ascii?Q?HmnREgFVjpXyQgvGx5sawOVpF216KCYuNwY/NmT6Nyb48Jgv8kHdU/vaC2iX?= =?us-ascii?Q?JlKBL+4/jgld2gTCdgT5J9rruDAye9KKNx7egNjpPubXxw6ORxxLpX5j7rI5?= =?us-ascii?Q?UrbpsP2wmJ7ngKoVT+4bHKUtURWFhUsENMBbngh/3MmUVG76LnOKElI939VX?= =?us-ascii?Q?9TSefA3Ly8ETD9vIZH1qsm60yZ6K/uwPPlklWYI8z+cUce9k7uh/XOXV197T?= =?us-ascii?Q?u1hU1vutczz/n3h0hnVFZACehSPvoRJBVb1GBX3jQPK5GTTtXD/vTS00L6Qp?= =?us-ascii?Q?Rlha+Vqx2sQA2eCXRuLklR6P0E/fuFg68xPlQh1vc9S5tDbAiPVOdnmKHI71?= =?us-ascii?Q?ni4m3o+MecvU/IM8Iuzt8Ka5Wt6lslb2MA/7mEs63zWgS65bFvn4M0OO2PKy?= =?us-ascii?Q?+RsFGPTfVSRXTg9r325tIeXlW0s11q5O2zhyPcVCDcKzS8/2l68YSuu1PMJz?= =?us-ascii?Q?zf7GLf8rehgQLA4Sxc7w96mWb1l5/Fh3BiiC/3r2/RQ3r/EwF9twd8HGL+DX?= =?us-ascii?Q?JnQmV/DAx7kjoLv3HRPgxUbGR+7ojGBx0j1kanvlurE5vboCWJblYmJlI6wk?= =?us-ascii?Q?uCEVKffYhHfwGaqhz4y/3nmCnRkqfUsPEvmJMSbpOKKu3rbUYyX6Y4KDGP5w?= =?us-ascii?Q?LNWq/s77iPc5Ww/enjGPvVsWeY9psYqOh4WLDiHxuNg9bxmpbv3kIJ9IqnG6?= =?us-ascii?Q?NxRAmAw4GMzxAt6BH9vqfWZ8BOoyVBOm1Esy+kTqMwf3jcNQfaa+U7JVv0AJ?= =?us-ascii?Q?Vg6zZnUCqBuCUp7Znxk5bo80raV8N6rwlDCPiDYde2kqeGB0gm+DDrMeG19U?= =?us-ascii?Q?rjBd/3z3ajMJw/PgAuFzrpJJstIvY8peiDZFDA/l+jBUGCTJayTQlsho9KEG?= =?us-ascii?Q?JLDoAgXfs93NHaHxdpZ/js2vDz5YPK51FEWE8kGF56W+2LBZc62ZHoa3rFy6?= =?us-ascii?Q?D97Q6uPgNkXGCHiQYuR1uWSIaleWAzsI7qoU7V8gXoe63yaApA7axw=3D=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DS7PR12MB9473.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(7416014)(366016)(1800799024)(7053199007);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?0hGPzmAUh8XSWOpn5tfBz7BVHojhVlOVCrhMeJCpUi2y1iQbwUzUNb+M1OCc?= =?us-ascii?Q?sVj1PUyjxclWSj+iL0ip3+b38qr4jtsY0J7qzmF+pI2I5bPr0PfimvVkDBbd?= =?us-ascii?Q?Z2dOCpQdomXAakD9/aw74to930mthn6iHKBiGEI4V56WUz/ECmg8sQXbbe47?= =?us-ascii?Q?xqEKADub5ZQq9mK1AMP66XLaeWA9OY/pFcx4Y99F3vCiQToZLCZWAWQIMJmP?= =?us-ascii?Q?FMd4aOprox8TaYotpHFiWs35rE4nX4l3Sid3bbP6sSjsLIQbBukPoEuhMXbH?= =?us-ascii?Q?B/E2B20LloQ7mwt5WBUVutQUyJRq5phvrgXxMgqUyMMz9NE93IChN4IgJFG9?= =?us-ascii?Q?/owtuERsDTySF8oQ6Dc6kHOve6lVhUjTkqz0m9Km9pZuhD+ZqoHDagtqKNku?= =?us-ascii?Q?m/T47XdUAc0WsFTab6Suem43v10+0ov9an2hK8PLZCc4XDhSnQojrIflm4jU?= =?us-ascii?Q?LELiCdoQ+WpPgk99IerxR3C+LTjFW+cLmyPOhGdGEoOFBARc7uARFbuexnBo?= =?us-ascii?Q?ssGx0rtfbEgi+uhSgYMyTEeUlKiWdAday6DRBUaTnYy4XuSN+Rx8uopN8xPN?= =?us-ascii?Q?9NfW5MSMuhThdFtyu101ZGv5WMmvbuWH+oODeczk8VCetEZ/isfc389TKKlO?= =?us-ascii?Q?k0NA28MQsUlOn0O/BlGcgpQPrs2U608vMINfYJDEY10fuJED/2wfzqnHYQKm?= =?us-ascii?Q?RJ1Y2PeLRcrVJwtG966O6PZwFA84h5ME8bN1aahOvIijyPlPj6UD8URmw5Cc?= =?us-ascii?Q?7U+kGF0e7wtVJbriP2G6tnlx0nU3DxnN5A8mkQLWnJYRT6+yHhQ3NZeRmRlO?= =?us-ascii?Q?5SUT5priYXOlgqj9sx3pxOHjE4D0LCv7v+yRLuBilNsjVtRPDRFAmCFszLaq?= =?us-ascii?Q?eLNoF6d/QBXm8edMFbbVF6XNU64APPxiX2QsLCpQagoP+kOpWhSHBeSdtUtB?= =?us-ascii?Q?3JmuDUZ7uOR3iUoE8yrBWK0Eb7300/Nt3P7v8mFFENf/ArB3KQqKHI6GPcQ6?= =?us-ascii?Q?yiXr0Er3Q7H7nq84lBwRnMAtmSsvEslxO/cNbPVAfdLfW8Nxajs+8ET00ARY?= =?us-ascii?Q?0bOdfz0xFSKjetzZ0w4PgSkz0Tl6MoCL04Ao/NSH2r+OMyyOboym5/SF/vpG?= =?us-ascii?Q?95AF2DAjPUYbpAT6cMEfhTfO8K9L8a/EgVI+d2MWRA3b0K0GnHTDxmQaj/VJ?= =?us-ascii?Q?exIi0VC/UgC1+gg2lWa1P1p07RU3/N7kLROwbMZCBFhhhjuN31QlFmS0jmLz?= =?us-ascii?Q?gJdVDs+2mKUyS3q42yu7NnKQB+O+2VKPHxGucO+MCEjv22GNzhEpoZP94h9q?= =?us-ascii?Q?f+29SDGb4gtQs+PK3J+8WrRq6qQ3C25QYQhxpIao7uMLhYlO0ijvB5WcdFQ4?= =?us-ascii?Q?qJUh20JuldeEjQR1mwCmd0cWID5SRgPsybRWJ+VBXqmFfJ9Qz6ws1LmqL54+?= =?us-ascii?Q?oUrYX+fI+lcMMPGwf1CX6k7TGZuTtydPzp+AyUOUfl78Mz4yY9QQulm8IKps?= =?us-ascii?Q?majK4mimcuFIfzJUk2MkypYOjaf09/7PaftZTu0Sgr3U7yGdKjZ3euAjOPRW?= =?us-ascii?Q?SM9fgzISU4glr2CgBJ1qTFzGcwL/k6JiL817pdBF?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: febccf0c-3965-4055-b31d-08de13db6971 X-MS-Exchange-CrossTenant-AuthSource: DS7PR12MB9473.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Oct 2025 15:30:22.2218 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: bs7F1wksT+mmDL//Wm7jOt/O0Em4xZIcpRt613N2rYccjVUjey0Rh4U4NSG66zb2 X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH0PR12MB8485 X-Rspamd-Server: rspam01 X-Stat-Signature: kdietrxboh7n1uz3wsk9z5fqnca31eax X-Rspam-User: X-Rspamd-Queue-Id: DD9871C000F X-HE-Tag: 1761406225-258852 X-HE-Meta: U2FsdGVkX1+fTLKspnYdVDYSPwhrpm3+ijX9up+x6KQn1KAZj3k9/c5ZxWHDINwcy40OUhvl1g9MQAcRcdXMcf9VkG77RMogwOQ6HTlAAx2w6xti588Lk6OVuMioosbGD+Pv9uZBnf/64VfqD9zJk2AtdpQuWGgruBXcbGkwTk+tCh7BxU2zvyi7/54zJi6caAa0mhxxuJuEw/McE6UgMIl5Cgsw7sxK+Hb/0f247lh1IqNI1HvTdFMQTjyRvDnskfmJvUZTMLu1qnc/W2/yMrlYSvu7I2WL4IR2cmrmdbHL58PaF4BwD+c4UzQyCyC9d8HCb5/h2/pCC+80D0mG7XI0WaNQ/DzvcCe2IHNRPkheLi4LOW9VsmihTYPwUb4m541PnhlcyuNYtcDZmJ6FPtSPjc1bHOPUAcBgeXLxTiMUzXA+zAoRASQCpnlFZEr6fT6j2iip1tzlnZlbc8ivXYYFZFDCOTcC9eSUQfF5oxC2vrIkyYShiaUWRaOS3hnz4vyAvlf9ABmwHI487U0Pxj5NpLQ1gPTlInA8B0z1KE/1ESpbtsiXvrV2OgUpIcuuG+t+0VY/sPNUlYrQbAeAcUm7URpqXm+429FSJXIxhPOOVxw0jx/4wCCQT3lEX/1DRnexHuf/OiAfUqp7lp4lvpyb4emZABECI0MXz4RGO+NHJsqS5HgwK6TzHBsDRtz2KcfaBLKPzDEaYFN/isMeyU8gNvlPGKHBV8ZlJEepsYEJRxxWm5sWQq/X/dSwpprVObG5edEJnE+fDojJK9McBxs2OSTIPOQK2N7Og3rjYsjaWuDOh53tfTBsr6cVlId+t07UHfdCUhYzOG8reNDbmynEflVuQ/K/OUrihy/lahG7T6YSH8Ywvz8OSOKRY8di0AXcUFL76Vqfh/s2fnCbtYqWCJ6ON5+jXW4O/rEzIxoi4QhS7cCX9Y8h4AbpDUeD1oLCFbZPQCtTlpWEt94 Pdq5biQ8 AQ/iaxCMPjBNSRwdYj17Yil/q8SV55ksRWoMtCSQwDL0tOq0NtLCT3LnqiAT5mgafLNRARSbU81F9EEWaI+p/kGbGms5RGSm5Dw0S6Le7ZdulQLws5NjFMUls3SdNwJi684ShBgvGotCNnmqecHLzRjmB7xvYiaE2rqwwluEISP+PoP83Ot6Y+BuNlbOl/eWDWgd2HV7QsjCopStG4164GRubJf2wv3xy+CAr+EyzdurizR9i/1LkjgtqvjR5okrWSThh1JcsDDGLkBH+15uh+j+0e/v5HspiafPBJy8nGWMCaXe9gqNCR3jbJjHtCpyDzfzx6xlKeU0/R7RRL5MV1scedc8WKlk6p8lZwY+n0TWjKDNPMivIoU8yec71x+wqZGi6py5BnxU9rzex87F+yY1en0om20AMYaf1ocSdFhT7hFU255/wh+L06gmnjsA/xr0jHxdHJoWcc2uO7SZ0ZkcYZDM4Igdkvo2ylgxiMDHOQeeVt/JLa76kMtXJJW/dBaE7NXX53n4rp8uhyacwuA7jEqBgklydARAExDd88j+ethudQpNlnEgZ42/Nu0ob5val X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: On 24 Oct 2025, at 11:44, Lorenzo Stoakes wrote: > On Wed, Oct 22, 2025 at 11:05:21PM -0400, Zi Yan wrote: >> folio split clears PG_has_hwpoisoned, but the flag should be preserved= in >> after-split folios containing pages with PG_hwpoisoned flag if the fol= io is >> split to >0 order folios. Scan all pages in a to-be-split folio to >> determine which after-split folios need the flag. >> >> An alternatives is to change PG_has_hwpoisoned to PG_maybe_hwpoisoned = to >> avoid the scan and set it on all after-split folios, but resulting fal= se >> positive has undesirable negative impact. To remove false positive, ca= ller >> of folio_test_has_hwpoisoned() and folio_contain_hwpoisoned_page() nee= ds to >> do the scan. That might be causing a hassle for current and future cal= lers >> and more costly than doing the scan in the split code. More details ar= e >> discussed in [1]. >> >> This issue can be exposed via: >> 1. splitting a has_hwpoisoned folio to >0 order from debugfs interface= ; >> 2. truncating part of a has_hwpoisoned folio in >> truncate_inode_partial_folio(). >> >> And later accesses to a hwpoisoned page could be possible due to the >> missing has_hwpoisoned folio flag. This will lead to MCE errors. >> >> Link: https://lore.kernel.org/all/CAHbLzkoOZm0PXxE9qwtF4gKR=3DcpRXrSrJ= 9V9Pm2DJexs985q4g@mail.gmail.com/ [1] >> Fixes: c010d47f107f ("mm: thp: split huge page to any lower order page= s") >> Cc: stable@vger.kernel.org >> Signed-off-by: Zi Yan > > This seems reasonable to me and is a good spot (thanks!), so: > > Reviewed-by: Lorenzo Stoakes > >> --- >> From V3[1]: >> >> 1. Separated from the original series; >> 2. Added Fixes tag and cc'd stable; >> 3. Simplified page_range_has_hwpoisoned(); >> 4. Renamed check_poisoned_pages to handle_hwpoison, made it const, and= >> shorten the statement; >> 5. Removed poisoned_new_folio variable and checked the condition >> directly. >> >> [1] https://lore.kernel.org/all/20251022033531.389351-2-ziy@nvidia.com= / >> >> mm/huge_memory.c | 23 ++++++++++++++++++++--- >> 1 file changed, 20 insertions(+), 3 deletions(-) >> >> diff --git a/mm/huge_memory.c b/mm/huge_memory.c >> index fc65ec3393d2..5215bb6aecfc 100644 >> --- a/mm/huge_memory.c >> +++ b/mm/huge_memory.c >> @@ -3455,6 +3455,14 @@ bool can_split_folio(struct folio *folio, int c= aller_pins, int *pextra_pins) >> caller_pins; >> } >> >> +static bool page_range_has_hwpoisoned(struct page *page, long nr_page= s) >> +{ >> + for (; nr_pages; page++, nr_pages--) >> + if (PageHWPoison(page)) >> + return true; >> + return false; >> +} >> + >> /* >> * It splits @folio into @new_order folios and copies the @folio meta= data to >> * all the resulting folios. >> @@ -3462,17 +3470,24 @@ bool can_split_folio(struct folio *folio, int = caller_pins, int *pextra_pins) >> static void __split_folio_to_order(struct folio *folio, int old_order= , >> int new_order) >> { >> + /* Scan poisoned pages when split a poisoned folio to large folios *= / >> + const bool handle_hwpoison =3D folio_test_has_hwpoisoned(folio) && n= ew_order; > > OK was going to mention has_hwpoisoned is FOLIO_SECOND_PAGE but looks l= ike you > already deal with that :) Right. And has_hwpoisoned is only set for large folios. > >> long new_nr_pages =3D 1 << new_order; >> long nr_pages =3D 1 << old_order; >> long i; >> >> + folio_clear_has_hwpoisoned(folio); > > OK so we start by clearing the HW poisoned flag for the folio as a whol= e, which > amounts to &folio->page[1] (which must be a tail page of course as new_= order > tested above). > > No other pages in the range should have this flag set as is a folio thi= ng only. > > But this, in practice, sets the has_hwpoisoned flag for the first split= folio... handle_hwpoison is only true when after-split folios are large (new_order= not 0). All folio has_hwpoisoned set code is guarded by handle_hwpoison. > >> + >> + /* Check first new_nr_pages since the loop below skips them */ >> + if (handle_hwpoison && >> + page_range_has_hwpoisoned(folio_page(folio, 0), new_nr_pages)) >> + folio_set_has_hwpoisoned(folio); >> /* >> * Skip the first new_nr_pages, since the new folio from them have a= ll >> * the flags from the original folio. >> */ >> for (i =3D new_nr_pages; i < nr_pages; i +=3D new_nr_pages) { >> struct page *new_head =3D &folio->page + i; >> - > > NIT: Why are we removing this newline? It is a newline between two declarations. > >> /* >> * Careful: new_folio is not a "real" folio before we cleared PageT= ail. >> * Don't pass it around before clear_compound_head(). >> @@ -3514,6 +3529,10 @@ static void __split_folio_to_order(struct folio= *folio, int old_order, >> (1L << PG_dirty) | >> LRU_GEN_MASK | LRU_REFS_MASK)); >> >> + if (handle_hwpoison && >> + page_range_has_hwpoisoned(new_head, new_nr_pages)) >> + folio_set_has_hwpoisoned(new_folio); >> + > > ...We then, for each folio which will be split, we check again and prop= agate to > each based on pages in range. Yes, but this loop only goes [new_nr_pages, nr_pages), so the code above = is needed for [0, new_nr_pages). The loop is done in this way to avoid redun= dant work, flag and compound head setting, for [0, new_nr_pages) pages and the= original folio, since there is no change between the original values and after-split values. > >> new_folio->mapping =3D folio->mapping; >> new_folio->index =3D folio->index + i; >> >> @@ -3600,8 +3619,6 @@ static int __split_unmapped_folio(struct folio *= folio, int new_order, >> int start_order =3D uniform_split ? new_order : old_order - 1; >> int split_order; >> >> - folio_clear_has_hwpoisoned(folio); >> - >> /* >> * split to new_order one order at a time. For uniform split, >> * folio is split to new_order directly. >> -- >> 2.51.0 >> -- Best Regards, Yan, Zi