From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id AA9BEC83F03 for ; Wed, 9 Jul 2025 16:27:26 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 394056B013D; Wed, 9 Jul 2025 12:27:26 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 36B7D6B013E; Wed, 9 Jul 2025 12:27:26 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 233066B013F; Wed, 9 Jul 2025 12:27:26 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0016.hostedemail.com [216.40.44.16]) by kanga.kvack.org (Postfix) with ESMTP id 106486B013D for ; Wed, 9 Jul 2025 12:27:26 -0400 (EDT) Received: from smtpin16.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay10.hostedemail.com (Postfix) with ESMTP id A9706C030D for ; Wed, 9 Jul 2025 16:27:25 +0000 (UTC) X-FDA: 83645256450.16.82ACB83 Received: from NAM11-CO1-obe.outbound.protection.outlook.com (mail-co1nam11on2068.outbound.protection.outlook.com [40.107.220.68]) by imf08.hostedemail.com (Postfix) with ESMTP id 869A0160007 for ; Wed, 9 Jul 2025 16:27:22 +0000 (UTC) Authentication-Results: imf08.hostedemail.com; dkim=pass header.d=Nvidia.com header.s=selector2 header.b=iDC6E2TE; dmarc=pass (policy=reject) header.from=nvidia.com; spf=pass (imf08.hostedemail.com: domain of ziy@nvidia.com designates 40.107.220.68 as permitted sender) smtp.mailfrom=ziy@nvidia.com; arc=pass ("microsoft.com:s=arcselector10001:i=1") ARC-Seal: i=2; s=arc-20220608; d=hostedemail.com; t=1752078442; a=rsa-sha256; cv=pass; b=MXFX9j/3spZB/TC8Ro2xIvZBHZyV8v+/yRTRc/Q3d0SLVXB7bbsMTD1KFu2lFAzJsWGdC1 t89Ty34WluGh8ATjpppfVzjdoUmH6tgKKfMdQ4kWDK/hps7gohhfLmOxkBPqgzppYYmTA/ kB8spVOYs8VkcvxwqlWk3ezZv7qUygo= ARC-Authentication-Results: i=2; imf08.hostedemail.com; dkim=pass header.d=Nvidia.com header.s=selector2 header.b=iDC6E2TE; dmarc=pass (policy=reject) header.from=nvidia.com; spf=pass (imf08.hostedemail.com: domain of ziy@nvidia.com designates 40.107.220.68 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=1752078442; 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=IlM5dpJzm6ohOD1uB2wz2/HdHUUSi7soN8QZ3OfRrvs=; b=n/Dq1RFy3KLchcH7doEbOrUzHEwpptDSQFUqvZxbzJzgztrLKnbD3c7c2lilWuckY+XJDw jb+b+a8cXJED7FGPGjErYVHeS/QmoVzx72H3Jc3pDN1CGv5J8khGTY99SFfXVRr3QEQIOZ SPrCCLLD8Y4ET/0/n/dyHRlU17ZNsuY= ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=GMItXV/CfxgRfEJdebekNLpeNaBIwhK5MJygJcSnc5GhPNPcsjGy1JbBkX0nx0fBqWKoR8Umv8mYGsMOPVVKRJSC4un2E32amAEjYk23kyoHEuoUtAYSoT/eiboHXg4w85tGjZzRVFC/5y7c4uXhfL2SFT5YISrLVSWE4GeF4lnZ9bAOpxqL0cPOAuliJef9bFK25/O6fypL0X8/IkDGgjqXr4jauuluqW8fZCAM8cCk0Hlx+ED4qst6oEtqd4yyypmPSPWlsdprO4vqvQKjnMRoK0WbzZlbL6nKtqDNo4YEuM+pL9Ed6A4mDpctvjucq0kaYvkbcNF6pLR/V6iIyg== 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=IlM5dpJzm6ohOD1uB2wz2/HdHUUSi7soN8QZ3OfRrvs=; b=DyS9qJ5WHwNRSBM84QuWumCwwA8qHlQOXtyJsN0cZPxroWIGDh62/j31sDr0+5rcQsq5Q04MqVSnJ5Kr2ykYm0cXIVTxRTiKljr548adtZHHs5YiXJqC9MpWKENpqYG4cVIXeC6ZHK4kd2rxPz53A+H6NvYvXdiPQfRiMipXvfs4urwiKzaYm/cruChAGUmJh98ySPmsdfe1Xjv4Y3RXX9LGx4LeXwncn7FYU+J80q4eGwThbgdK4+x/DDhF3LMvmgFGMKA73q36Od8+3rH3iO44IVCdLEww2Gq5h7Fp3tTZRI+7ORd997hPY+sz1sRm3f/Itv63RjNVxNwuoCZrQQ== 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=IlM5dpJzm6ohOD1uB2wz2/HdHUUSi7soN8QZ3OfRrvs=; b=iDC6E2TEYhp7xGSFI+zcOYXo+ETOK1GzrMHIQ9bwc8KrkXfoTVnjz/pSSpiU4H2o6Ta3igWr/a8PzDHn9M6w7BDVqXVxUm6C6o8TDo23rwtRGGjROzaUf5FVjGiWmfsAHM7bzSfr+Gp9oJHknaKsmf3L2FJg3QdD8VK8Y++McedW1mvTP3feTdQLNp7j1MuHyvEnsS4mLvH2FfEBOBRRKP+C1u8iDH0Koj7ATMuKmaG0L7RbNYsbYUGXt0pbGGAxrtFkDr+LiSw1570Z0gGt5MqeuJG7TdhLGfOjPTzsIi07WJvEuxm8PqFeOZtChP7GFDyN96vy01JBLl+Sksr/BQ== Received: from DS7PR12MB9473.namprd12.prod.outlook.com (2603:10b6:8:252::5) by CH3PR12MB8233.namprd12.prod.outlook.com (2603:10b6:610:129::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8880.34; Wed, 9 Jul 2025 16:27:08 +0000 Received: from DS7PR12MB9473.namprd12.prod.outlook.com ([fe80::5189:ecec:d84a:133a]) by DS7PR12MB9473.namprd12.prod.outlook.com ([fe80::5189:ecec:d84a:133a%6]) with mapi id 15.20.8901.024; Wed, 9 Jul 2025 16:27:08 +0000 From: Zi Yan To: David Hildenbrand , Matthew Wilcox , Pankaj Raghav , Luis Chamberlain Cc: Jinjiang Tu , Oscar Salvador , akpm@linux-foundation.org, linmiaohe@huawei.com, mhocko@kernel.org, linux-mm@kvack.org, wangkefeng.wang@huawei.com Subject: Re: [PATCH v2 2/2] mm/memory_hotplug: fix hwpoisoned large folio handling in do_migrate_range Date: Wed, 09 Jul 2025 12:27:05 -0400 X-Mailer: MailMate (2.0r6272) Message-ID: <1D589FE5-3515-4ED5-B12E-D5CE23BA5D13@nvidia.com> In-Reply-To: <8c9719f0-c072-40bb-b7f6-6f2cc41a31dc@redhat.com> References: <20250627125747.3094074-1-tujinjiang@huawei.com> <20250627125747.3094074-3-tujinjiang@huawei.com> <373d02c5-2b62-8543-b786-8fd591ad56eb@huawei.com> <61325284-d1d6-a973-8aa7-c0f226db95fa@huawei.com> <7b2c054b-fc33-4127-aaa9-9edf6a63e142@redhat.com> <924d9d25-e53c-f159-6ec0-e1fd4e96d6e2@huawei.com> <4c5d4fd5-5582-11d8-9fee-24828ac1913d@huawei.com> <8c9719f0-c072-40bb-b7f6-6f2cc41a31dc@redhat.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: BL1PR13CA0154.namprd13.prod.outlook.com (2603:10b6:208:2bd::9) To DS7PR12MB9473.namprd12.prod.outlook.com (2603:10b6:8:252::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DS7PR12MB9473:EE_|CH3PR12MB8233:EE_ X-MS-Office365-Filtering-Correlation-Id: 061253f4-0581-447f-70d2-08ddbf057306 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|1800799024|366016|376014; X-Microsoft-Antispam-Message-Info: =?utf-8?B?LzlncWg1MjkyMkFGcnNEcTBKRExlY1ZKRmJiN004VnU1bXRVbTIzTkFXMDVD?= =?utf-8?B?OHRoSlR5QzdDVnBuNFo0OEZhUTBkeGp6TnUxdU4vaVJqckc1MGtaSi9lNmlZ?= =?utf-8?B?NHEzazZkcUJaeS9OWFI3bXd3MDZ5QnZ1RGd4d2IvaGpScjVjOWN0QllOZ2Fy?= =?utf-8?B?OGVxRGk3Y3Z5M0dRRmpiTWR0ZGprT243NWE5NTNhY3E1QnkzTFJVc0Z1K2x0?= =?utf-8?B?MkRZQmVxK3RhdGs1bEhMWDc0WXBVbWVKTTBjVmlHeE1GOG9CRFJiamZVelRX?= =?utf-8?B?NHVvZ2wxSk9mcjh1TTM5OU5hekV2bkUwRU0ycm9tcGRBZHlVeTlSejltdHI4?= =?utf-8?B?UVFHdmJ4V1p3VVlGSElyRmRTanRBbVloNmcrU09JR0lyblYvbFMxcWgySlFD?= =?utf-8?B?L0dWTVAxcVhjRFF5aDVYZW1oK3A4Ky82cVg0U3hRSVUyUllEVU94Q1U2OTNo?= =?utf-8?B?clRvR3cxa3A3ZWJ1Uko5Zmt5MzBaMm5HN2FIWlZ4VmxFaHJkNHk3Lzg0U1Jh?= =?utf-8?B?Z250RXZ4TXBubjd5SmxwNHNBQm94VTNpRk03cnlSYXZYNlBaME9vR0RpcTkv?= =?utf-8?B?TlhyZ0FZMVB5eVU4MVpRZ1pMZUhoYTQ0M0FMclMxRm5hNWRnVytlOFRqd2NL?= =?utf-8?B?V29hZ3FpSW5WZ3I2d3VFM0VzVWlqYnBiMnVXVEVicEh6cE1pQ2pnR09kZUdi?= =?utf-8?B?QVNZcVY1NURYZzdFSklueFZTYlAybWtTZmhMVzZvdlFpZ0FnMzh1UHVPSXBV?= =?utf-8?B?cldOc0M4clFCbVlTbE1NTkxNb0FkWUM0N0xOOXl6Y3hSMXJsODF4eGp4L3lE?= =?utf-8?B?eWlhUUF5Y3QydDZCRmMvZDErQktub1A2RDY3OEQ5TXphUnNJOGhySm1YNnpS?= =?utf-8?B?eHRLSUl0SjgxSXdWK2lZcmV3OUtZNVp4Z3EvRi85QkVvcUpJWHlnbzhnYmtX?= =?utf-8?B?c0NSQmtjVDErczArYlJ0ZlEwTUViZVluZjZFQk9hT1pEWGQvMnhIVUd5Z2FY?= =?utf-8?B?ZHN1ZGVOdTN0bnRFSitycWtWV3drSVRHSks3WFQvVFBLRDlMbVlQMHJMM2d6?= =?utf-8?B?R0Y4eEVHRVU3ZmxOUVQ3dVUxVjZPOFFtdldxTE1RWUpoNVltVVZwbkp4WFRs?= =?utf-8?B?SFJkOHVaQzJ3R0c2d1BFTnBHR3ZrUGd6SU13bUZidnNZMUdpWUE0ekNkOUdG?= =?utf-8?B?cnp6NmdLczA5RWE4YXRTZlZXTytQL3ZqWVZoN1J3dHBlOTBsaXVHekJ4aWUw?= =?utf-8?B?QWFsUytGRGRySy8xTUQ0MDQrRXlxeXpzQUZrUVV1NnJFTWJocEJTc2VBRDdW?= =?utf-8?B?UWR5V3BNZnJ0L005U2ZqN0pvZnJJdlQ1T2xoYWZ2VVZWM0dkQXV0UGVrOHFG?= =?utf-8?B?NVdMUVVPSXJOM2NJSUdPcElXbURsSGRVMmliRDFreUIwTzhCWSs3RHBPMHdC?= =?utf-8?B?WXVDdU9qUVB4cnVhOHA1T2lwVXFNTUk5UngrZlJSbWlpQlZwMlM4WlhUTGlZ?= =?utf-8?B?TTlBVENSd1o1aFJ5WnhFRm9UY3F3M0pvbjlGM1BRZXVKeTRTMEYyeHlzWTVn?= =?utf-8?B?UWJuTzliQ0pTRWluRGtVNGxDRVFPUDYveElyOEFUdUhmYmNlcy9Uc1VCc2lV?= =?utf-8?B?cFNKSmJoOUZmOWQ1MjR1QVhJOE1kRE8zSGRRZTc1bXp3b0hjeWk4N2pSSU44?= =?utf-8?B?Rkl3TklIWjdteFErUW5nUm5xdDd6L2NtUkc3ZFpsQ3pFd1lXNXQ5anhvZkxC?= =?utf-8?B?UG1HOGhtODVBQjhPM1gxL2JmVXU3ZVVwZE02SmFTcHkyeDFyY1k1QjM2czFE?= =?utf-8?B?MzF1bDI2VmFTL2dRMXJrOFZPUmVjNEZoUXA0WWlGWUZDL0h1WVlmVGxTZVpR?= =?utf-8?B?V1FaaE9yVFF2dStEVVlFT1JDb1hBOXpzUXhzeStDZjNTS2pWYkt3cHo2bEhR?= =?utf-8?Q?2dKVCRHO89c=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)(7416014)(1800799024)(366016)(376014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?eDM5bm1uS0Z5Z2x5SDV4WjJCZElVazlyaGErallhallOT3NiZ0dWYmc4ejR5?= =?utf-8?B?RjVGRnk4RGtWekE0S0pJY1QrR29oSFJuaVRILzlCNHE1VEJqQXdFYXMwMnh1?= =?utf-8?B?aTNORExoK3dFMTFwS0c0emlLV3ZrOGZSUUVPeGNnR2d0VnN3VUdwWENkRXNo?= =?utf-8?B?NlloZzU4djVjSVpycDV4d0pyaWlDbEQvdzNsd3VRcG50ZitvVnRzQXJUNWRn?= =?utf-8?B?ZDlGOG8vWmxXakVYRVNhV3l6TS9URHpWRENFU2J1Y3d4cGRHdEZuQmtidjl2?= =?utf-8?B?VlpsS1Mwbm01VUQ0NlB6RzBsVTl1SFFvdFN4WDR5RmxGVHdSTDZ2cXN6V3pa?= =?utf-8?B?TlJBaXM3U2pRM01kWm5WSGU2c2htQXBZZW0vMG9pdDhITEZ3RnJMZGdPdnR5?= =?utf-8?B?a3JFSWZ0MFgxQVYzbHVKejdVQ25oVlRVaFlLc2FkRDNxUEFDL1ltaXJUOHFJ?= =?utf-8?B?MDVRbnJkQ1V0VUhlUWhuWERVYzNsTGRTVEFTR0N5eklLdWhOSDFKVWFqc29X?= =?utf-8?B?VWtmL2x3TGd1Y0FQMlZVWjd2b3k5blNoVTEwTjZONklNR2ZxYzJwZzl4S3FB?= =?utf-8?B?M2RiLzJMUGhuZzNSU3VQWUhPTFB5QThLZE92c1R6UUg3a3U5NldCQ08vQ0ZT?= =?utf-8?B?dG5pRzhFQjJUT0RHQlloNTFUZzQ4S01uMjNOUWdlTks3U01kMzNSNzZKV2tW?= =?utf-8?B?eWNPQUpCNmFSL3NCRXJKRTRKRXVOeUlUWVJMZnpjclVVUkYzZUIySGlFOTBa?= =?utf-8?B?TkN6T0tBZFBjajFSQTNHcy91TlRob0RYRlhrbnV0NXIvVGRSZ2VCQkppMU9k?= =?utf-8?B?Tjg3b0Y3b1VjR2dFVTZVaVI4NWVQa2txM2J2TnBLRERmZ1RNMlNvTStUSVdk?= =?utf-8?B?UUQxRWdyNXlXa3JoOW43bUdzNXpmbXkvZk93UUwybHNZbko5alJRWFJpU0Yr?= =?utf-8?B?S29hTElQSzNQOEhJSkpaVlhBVHp4cjE1ZnhQZFQ0M1FwZGUrbFU3bmFEUGs4?= =?utf-8?B?M1ZDWENyUUZlV3QxN2pXdmhYbDdpZkVCMHFqMmRLcE9Zblhua09PZEttaVRn?= =?utf-8?B?TTQ0aFNwL2g0Rjh3VzM3SkRudGJIbVZKYnMrZnZUTVhSNFVTY2RTMDZYZlBV?= =?utf-8?B?SFNiblZscFhVVGRWYVpHTGRMbklHQ0lhK0lkbUNsSlVwWDlZcWhvTmlkK2VK?= =?utf-8?B?RVp0QnYxNGQ4dDF4NFNCc1VxSUc1SGpEb0dYVG95eERMazFGU2VPU08wSDFj?= =?utf-8?B?UDEwWWxvM0NCdTlkeDF2eTBiVzRnUi9Md0sxRUtNV0crSnoxbklXS3ZhMWN3?= =?utf-8?B?b3I2aC84NWlrK2dFOXhrdlZGcmdDcFZRa0FpVWc5TGVHQ0xyT2VpZnRMQSta?= =?utf-8?B?VndyV0oxUktIMEdiY0ZDaWUzMG1rZitUdFBRV0VxMnpLREdaT2Fpd3c3MEo1?= =?utf-8?B?eE92bktMQ3dBRmhVSGpEL0Q2bWpwREZzcG9pSCsrMGtDUEFxQTRuSFRkMXpS?= =?utf-8?B?QkxwT0h0MGJqR3dZMlpjaFZmWUZ3Ky9nRHRVS1lDSDBVb3JOQUlkTjZINit0?= =?utf-8?B?WVhyQTl1U1EzaXZtSFphelBWYjNDR1c2WlpTOVAxQkRWelk0eEdJMFg1SkZR?= =?utf-8?B?UmtJRzYzSzhMWkJXK3dqN2hVbis4eWFjek50ZU9oQXpXWDVYdElNWFlRZ0dl?= =?utf-8?B?NnJPYy9FSmlIaDZxNFlUa0FxY0R4Vm9JNmlYR0I0eFlXY1Q2d3hzelo0WlBE?= =?utf-8?B?Rm5YemNrSWo1UGtXSUdtRURSNmQyb1p4UlNWOU9BbnliYnJrU0hPZGI2OXo3?= =?utf-8?B?RThxM1VJRVYralFKQkc1V1JFUk5XY09ic29zbHBaN1FiRnZiM2IxL1pJN2Iw?= =?utf-8?B?eWxJSDhJOFgyYTNQMURQdlIvUnRYZGdNOFpITm9CWnZlcVZvL1Y5NG1jNHRx?= =?utf-8?B?eHN4RFJ0MnBQeEgrOGxhRzFCNk0xaStRY2ZDTFpNdFRIRGgrV0lHeUcwaHV1?= =?utf-8?B?bVA1Vk91bWNkbWFIL3A4TmY0ZFl3R2VLdys4R0d3UnJrM3lSaUFmNkQ5UlBT?= =?utf-8?B?UWtTV3dobnZud3I3UDllOXN1Y0RuZzhHRGdoeFZzS2dLZHBEVUZ5OGdmODFN?= =?utf-8?Q?LNbrGsmjWnmIVwiQ7PbAGz2Qx?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 061253f4-0581-447f-70d2-08ddbf057306 X-MS-Exchange-CrossTenant-AuthSource: DS7PR12MB9473.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Jul 2025 16:27:08.3085 (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: a+MleAk+pDnYwkaCWDMnzeYefH7X0o5D1OBWjz7rJG0YbjzfrdAOa+s3/Tgggk8q X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH3PR12MB8233 X-Rspam-User: X-Rspamd-Server: rspam01 X-Rspamd-Queue-Id: 869A0160007 X-Stat-Signature: q7qntscaqg16d8no1ss9usi3d3rajjd8 X-HE-Tag: 1752078442-706256 X-HE-Meta: U2FsdGVkX1/mzUUsSBsKYQ6yZg3smra08E0d5IzrxPacWrNO/IpJi4b8JUW+xVz5hF+8byCvJN0K7mUBvfshWEzuMwk9eL/GQnX1nY3Sg07wSGL/g0aw9cmp+YIhKyhe9oozz7KHTx1ezjvMniEb1Br6XS8LoRTop5VdXL0moN+wiIk7Y4c+7pAkxyAWXmGBCWW8fLadjmkKo7TzERo30QmPeaC+YhUskni75mL/KNPiQlCLfvsMmwxYgLxnNlDV63QY7NcIHLipIWIxlGQ5Q+gmee+8OeFLWEYNp5KQvnkQe8j2pvRLFzmj9NTNGDSuxJDTk9BTqvKiMWSsyN5IL8ENWjc5pckXUh3kUBaL4gwupPQ/x/AJLmxf3JVwsoHNEPcP7fWYwUMuRsqke3w43ZpeO4OmQzysRSl7XEI4yBm+Tyt2W4ccvWr5ysHfVsepxq+deDR27oaKsGsCuGEbYezY+51uSjNWEoi4XKSQQhspLAG8JKMwdKl9pd9NL1CLH4J2dQjH4Zt+vhBNnpkwfJucDc+9XCjrxvnwg9fjXPVE9M6+pPmOPqS2mLRVsgRbDn8A0B0byBuCAx9zZk3PahI6eSXL7hRCmGdc+iV+ABXV2vdhdIT4XJdzzr8/TGOw8taBz5tjQcsJHPHU4S2NGJoDQuw6a2fvJqBfvMTUxHQAOwSZt/p25cm/QI5G1T0xQ+JeZfM+9zvwRc32dVurnDAJy1E6wHMpmZCxK2enbewzR073FjxGXx9U53h0whO7onwsGirBiJCEXCc2LHWI6wVMW8ma3/Fap8R12w/NvSKeFXVC/7xUPF5Wce6Iu+sMQZnMTjZgFDHOK+xfW67rfXISxDC49hSguD7SlzIy5zhYQmGIrcmsjY6XBnDeHgSSlfXJ+jsmj7vJjB/oKrX+BCLroPSYIZ2l4mmNyzvk5mSWY6E23zVWOMi3JelXscEPP5TSp4vQ9TgOXaEJkoa QGN1aXd4 BgiZSTphLLTi7JzN5ATgtwb2B8gbCh4nVvAizMdAREXUJWShS1wqN45KTVbYmBLiJM+27ZB8Fm5U1wXKIZlGt4opcg7wYIltL9h4W2Tz4clQ5iQKnOQe/FIp9zz1IrHX/60SMoA+0VvYy6YGTOSi2QJhK9gNzMFfWGXWZF4XRd9Px+z4a+38sZmnu5sOjnCfWmaAOzihAU0k1nGp1ClObtJkLdGkkM1kxMdb3dR3WlayrXMOfqJ3fwzeTwajyUkuhkCCsuG76m7q6GX0OLVtRAbcI/V3PtFdFUcY3JvJx44AAO9tJqHhUnAHkOWfvFyw07JgjO1S+Dd3tiU7NzyVkgouIp7sVdAnHZwZL5qLIDMlh9n1UvhYJ1QgkLOoVGiHKmv4lfQxoMC8ChB+4240dr7ldxpVmk0+l3o8CkJzfQeyN7OoyDo1Seo/WniKPB2dkZ1Da3IRVp5CwTeMCtUD5NgmhUYXusDcVfDE39xh3oiqN3kA= 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 8 Jul 2025, at 5:54, David Hildenbrand wrote: > On 08.07.25 03:15, Jinjiang Tu wrote: >> >> =E5=9C=A8 2025/7/7 20:37, David Hildenbrand =E5=86=99=E9=81=93: >>> On 07.07.25 13:51, Jinjiang Tu wrote: >>>> >>>> =E5=9C=A8 2025/7/3 17:06, David Hildenbrand =E5=86=99=E9=81=93: >>>>> On 03.07.25 10:24, Jinjiang Tu wrote: >>>>>> >>>>>> =E5=9C=A8 2025/7/3 15:57, David Hildenbrand =E5=86=99=E9=81=93: >>>>>>> On 03.07.25 09:46, Jinjiang Tu wrote: >>>>>>>> >>>>>>>> =E5=9C=A8 2025/7/1 22:21, Oscar Salvador =E5=86=99=E9=81=93: >>>>>>>>> On Fri, Jun 27, 2025 at 08:57:47PM +0800, Jinjiang Tu wrote: >>>>>>>>>> In do_migrate_range(), the hwpoisoned folio may be large folio, >>>>>>>>>> which >>>>>>>>>> can't be handled by unmap_poisoned_folio(). >>>>>>>>>> >>>>>>>>>> I can reproduce this issue in qemu after adding delay in >>>>>>>>>> memory_failure() >>>>>>>>>> >>>>>>>>>> BUG: kernel NULL pointer dereference, address: 0000000000000000 >>>>>>>>>> Workqueue: kacpi_hotplug acpi_hotplug_work_fn >>>>>>>>>> RIP: 0010:try_to_unmap_one+0x16a/0xfc0 >>>>>>>>>> =C2=A0=C2=A0=C2=A0=C2=A0 >>>>>>>>>> =C2=A0=C2=A0=C2=A0=C2=A0 rmap_walk_anon+0xda/0x1f0 >>>>>>>>>> =C2=A0=C2=A0=C2=A0=C2=A0 try_to_unmap+0x78/0x80 >>>>>>>>>> =C2=A0=C2=A0=C2=A0=C2=A0 ? __pfx_try_to_unmap_one+0x10/0x10 >>>>>>>>>> =C2=A0=C2=A0=C2=A0=C2=A0 ? __pfx_folio_not_mapped+0x10/0x10 >>>>>>>>>> =C2=A0=C2=A0=C2=A0=C2=A0 ? __pfx_folio_lock_anon_vma_read+0x10/= 0x10 >>>>>>>>>> =C2=A0=C2=A0=C2=A0=C2=A0 unmap_poisoned_folio+0x60/0x140 >>>>>>>>>> =C2=A0=C2=A0=C2=A0=C2=A0 do_migrate_range+0x4d1/0x600 >>>>>>>>>> =C2=A0=C2=A0=C2=A0=C2=A0 ? slab_memory_callback+0x6a/0x190 >>>>>>>>>> =C2=A0=C2=A0=C2=A0=C2=A0 ? notifier_call_chain+0x56/0xb0 >>>>>>>>>> =C2=A0=C2=A0=C2=A0=C2=A0 offline_pages+0x3e6/0x460 >>>>>>>>>> =C2=A0=C2=A0=C2=A0=C2=A0 memory_subsys_offline+0x130/0x1f0 >>>>>>>>>> =C2=A0=C2=A0=C2=A0=C2=A0 device_offline+0xba/0x110 >>>>>>>>>> =C2=A0=C2=A0=C2=A0=C2=A0 acpi_bus_offline+0xb7/0x130 >>>>>>>>>> =C2=A0=C2=A0=C2=A0=C2=A0 acpi_scan_hot_remove+0x77/0x290 >>>>>>>>>> =C2=A0=C2=A0=C2=A0=C2=A0 acpi_device_hotplug+0x1e0/0x240 >>>>>>>>>> =C2=A0=C2=A0=C2=A0=C2=A0 acpi_hotplug_work_fn+0x1a/0x30 >>>>>>>>>> =C2=A0=C2=A0=C2=A0=C2=A0 process_one_work+0x186/0x340 >>>>>>>>>> >>>>>>>>>> In this case, just make offline_pages() fail. >>>>>>>>>> >>>>>>>>>> Besides, do_migrate_range() may be called between >>>>>>>>>> memory_failure set >>>>>>>>>> hwposion flag and ioslate the folio from lru, so remove WARN_ON(= ). >>>>>>>>>> In other >>>>>>>>>> places, unmap_poisoned_folio() is called when the folio is >>>>>>>>>> isolated, obey >>>>>>>>>> it in do_migrate_range() too. >>>>>>>>>> >>>>>>>>>> Fixes: b15c87263a69 ("hwpoison, memory_hotplug: allow hwpoisoned >>>>>>>>>> pages to be offlined") >>>>>>>>>> Signed-off-by: Jinjiang Tu >>>>>>>>> ... >>>>>>>>>> @@ -2041,11 +2048,9 @@ int offline_pages(unsigned long start_pfn= , >>>>>>>>>> unsigned long nr_pages, >>>>>>>>>> =C2=A0=C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ret =3D scan_movable_pages= (pfn, end_pfn, &pfn); >>>>>>>>>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 if (!ret) { >>>>>>>>>> -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 /* >>>>>>>>>> -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 * TODO: fatal migration failures should b= ail >>>>>>>>>> -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 * out >>>>>>>>>> -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 */ >>>>>>>>>> -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 do_migrate_range(pfn, end_pfn); >>>>>>>>>> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 ret =3D do_migrate_range(pfn, end_pfn); >>>>>>>>>> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 if (ret) >>>>>>>>>> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 break; >>>>>>>>> I am not really sure about this one. >>>>>>>>> I get the reason you're adding it, but note that migrate_pages() >>>>>>>>> can >>>>>>>>> also return >>>>>>>>> "fatal" errors and we don't propagate that. >>>>>>>>> >>>>>>>>> The moto has always been to migrate as much as possible, and this >>>>>>>>> changes this >>>>>>>>> behaviour. >>>>>>>> If we just skip to next pfn, offline_pages() will deadloop >>>>>>>> meaningless >>>>>>>> util received signal. >>>>>>> >>>>>>> Yeah, that's also not good, >>>>>>> >>>>>>>> It seems there is no document to guarantee memory offline have to >>>>>>>> migrate as much as possible. >>>>>>> >>>>>>> We should try offlining as good as possible. But if there is >>>>>>> something >>>>>>> we just cannot possibly migrate, there is no sense in retrying. >>>>>>> >>>>>>> Now, could we run into this case here because we are racing with >>>>>>> other >>>>>>> code, and actually retrying again could make it work? >>>>>>> >>>>>>> Remind me again: how exactly do we arrive at this point of having a >>>>>>> large folio that is hwpoisoned but still mapped? >>>>>>> >>>>>>> In memory_failure(), we do on a=C2=A0 large folio >>>>>>> >>>>>>> 1) folio_set_has_hwpoisoned >>>>>>> 2) try_to_split_thp_page >>>>>>> 3) if splitting fails, kill_procs_now >>>>>> If 2) is executed when do_migrate_range() increment the refcount of >>>>>> the >>>>>> folio, the split fails, and retry is meaningless. >>>>> >>>>> kill_procs_now will kill all processes, effectively unmapping the >>>>> folio in that case? >>>>> >>>>> So retrying would later just ... get us an unmapped folio and we can >>>>> make progress? >>>>> >>>> kill_procs_now()->collect_procs() collects the tasks to kill. But not >>>> all tasks that maps the folio >>>> will be collected, >>>> collect_procs_anon()->task_early_kill()->find_early_kill_thread() >>>> will not >>>> select the task (not current) if PF_MCE_PROCESS isn't set and >>>> sysctl_memory_failure_early_kill >>>> isn't enabled (this is the default behaviour). >>> >>> I think you're right, that's rather nasty. >>> >>> We fail to split, but keep the folio mapped into some processes. >>> >>> And we can't unmap it because unmap_poisoned_folio() does not properly >>> support large folios yet. >>> >>> We really should unmap the folio when splitting fail. :( >> unmap_poisoned_folio() doesn't guarantee the folio is unmapped >> successfully, according >> to the return val. Although I don't know in which case we will fail to >> unmap. > > I think there are only cases for anon folios, when the folio is in the sw= apcache > or it's lazyfree (!swapbacked) and we run into the walk_abort cases. Retr= ying will > likely make it work in many cases I assume. > > This is all really rather suboptimal and, I'm afraid, requires much bigge= r rework to improve it. > > Failing memory offlining is also not nice. > > I was wondering whether we can just keep splitting the folio until it wor= ks: > > diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c > index b1caedbade5b1..991b095ac7e78 100644 > --- a/mm/memory_hotplug.c > +++ b/mm/memory_hotplug.c > @@ -1819,6 +1819,19 @@ static void do_migrate_range(unsigned long start_p= fn, unsigned long end_pfn) > pfn =3D folio_pfn(folio) + folio_nr_pages(folio) = - 1; > if (folio_contain_hwpoisoned_page(folio)) { > + /* > + * unmap_poisoned_folio() cannot handle THPs, so > + * keep trying to split first. > + */ > + if (folio_test_large(folio) && !folio_test_hugetl= b(folio)) { > + folio_lock(folio); > + split_huge_page_to_list_to_order(&folio->= page, > + NULL, > + min_orde= r_for_split(folio)); > + folio_unlock(folio); > + if (folio_test_large(folio)) > + goto put_folio; > + } > if (WARN_ON(folio_test_lru(folio))) > folio_isolate_lru(folio); > if (folio_mapped(folio)) { > > > Probably the WARN_ON can indeed trigger now. > > > @Zi Yan, on a related note ... > > in memory_failure(), we call try_to_split_thp_page(). If it works, > we assume that we have a small folio. > > But that is not the case if split_huge_page() cannot split it to > order-0 ... min_order_for_split(). Right. memory failure needs to learn about this. Either poison every subpage or write back if necessary and drop the page cache folio. > > I'm afraid we havbe more such code that does not expect that if split_hug= e_page() > succeeds that we still have a large folio ... I did some search, here are the users of split_huge_page*(): 1. ksm: since it is anonymous only, so split always goes to order-0; 2. userfaultfd: it is also anonymous; 3. madvise cold or pageout: a large pagecache folio will be split if it is = partially mapped. And it will retry. It might cause a deadlock if the folio has a = min order. 4. shmem: split always goes to order-0; 5. memory-failure: see above. So we will need to take care of madvise cold or pageout case? Hi Matthew, Pankaj, and Luis, Is it possible to partially map a min-order folio in a fs with LBS? Based o= n my understanding of madvise_cold_or_pageout_pte_range(), it seems that it wil= l try to split the folio and expects a order-0 folio after a successful split. But splitting a min-order folio is a nop. It could lead to a deadlock in th= e code. Or I just get it wrong? Best Regards, Yan, Zi