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 mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 6667CC433F5 for ; Mon, 8 Nov 2021 14:16:03 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id DC839604DB for ; Mon, 8 Nov 2021 14:16:02 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org DC839604DB Authentication-Results: mail.kernel.org; dmarc=fail (p=quarantine dis=none) header.from=amd.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=kvack.org Received: by kanga.kvack.org (Postfix) id 033076B0073; Mon, 8 Nov 2021 09:16:02 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id F24FA6B0074; Mon, 8 Nov 2021 09:16:01 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id DEC076B0075; Mon, 8 Nov 2021 09:16:01 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0087.hostedemail.com [216.40.44.87]) by kanga.kvack.org (Postfix) with ESMTP id CC60D6B0073 for ; Mon, 8 Nov 2021 09:16:01 -0500 (EST) Received: from smtpin12.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay05.hostedemail.com (Postfix) with ESMTP id 80494183EC5AD for ; Mon, 8 Nov 2021 14:16:01 +0000 (UTC) X-FDA: 78785962122.12.C8F8173 Received: from NAM10-BN7-obe.outbound.protection.outlook.com (mail-bn7nam10on2071.outbound.protection.outlook.com [40.107.92.71]) by imf03.hostedemail.com (Postfix) with ESMTP id 24890300E544 for ; Mon, 8 Nov 2021 14:15:52 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=K3Ll3DbVHOZGJMWx8M4qD8az3T8qZIkkMdLUBspqSD9Bvx1jgDJgktIMCrkqQ7yBI+7WQXZ6mjCnK84ZhLZhfalHT4jQnDL2TUvVXl6y/YgxqgSutvcgQidFgsOLt6QU5cftfsymZWRcvtxl1aLd5UYItdKvGG8KFvpzKxsywPY03oyKTakB4FHlYOqTvFMR3zZY63ueKzYsXcBy45gufH08foNPQ8G9FPq9fARRXPTPmw+Pa+7/+9p4KBoHxKTiLOvYdVB4ma6JQwbzbHS8XMDUapbp4NCbQn4lutEdwJkAVciPI/+WkrU85Psgq4RsJFkpv4SmZpiFAwO75FxAOg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=6BXd8/eh2BE0zSJlU14zD6i3wpm0sYlv1mr5fEUIgDE=; b=LuId4n0/W/3pPVxwQe/+aCCd+nVwmp+fu19PlBaIExvh2hy8aULPPQXIf3U5k/YFLTXNnyR24lASAQJW2CziUDO307Et4V1/dQG8WXJd8w3O1w8AqGgMWBmyNjrKUblaS1VmdWG2xlLOoqTAw2s2S4Rl6AdcD6JastDAZV+s3FwXtGUm5cc9qcrpCTvVBJbqkA8odmL7dxw7juUVzdH7SNgIhOXDt8FWEGpIcljDYRJsTeximoG1xecARkQceKe7YtGVZmxIQ8EZeR9JTYzmdzRrZZzPCarpo2y+leYE0OQRibUT1TDNdMgezf1l1Aq3yvjESM/G0tYUH+xQFWVwTw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=kvack.org smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=6BXd8/eh2BE0zSJlU14zD6i3wpm0sYlv1mr5fEUIgDE=; b=Dvxn/ZaSsRoIIZEpVhBsI9167uaJhuWjhLnBN9D8ja8A1E+3pbrpTaCTRVjDOMFHLDmEkSbLb7ERfB/pIj6CtVyThGgiMNiudtuHHCeeRjkN/657/IyfaW/nKOb2ELiF0wAuvDZ8omekfXUvcfpezW83JReZNpWY16yLZo5usyg= Received: from MW4PR03CA0212.namprd03.prod.outlook.com (2603:10b6:303:b9::7) by CH0PR12MB5185.namprd12.prod.outlook.com (2603:10b6:610:b8::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4649.14; Mon, 8 Nov 2021 14:00:49 +0000 Received: from CO1NAM11FT044.eop-nam11.prod.protection.outlook.com (2603:10b6:303:b9:cafe::10) by MW4PR03CA0212.outlook.office365.com (2603:10b6:303:b9::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4669.11 via Frontend Transport; Mon, 8 Nov 2021 14:00:49 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; kvack.org; dkim=none (message not signed) header.d=none;kvack.org; dmarc=pass action=none header.from=amd.com; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=SATLEXMB04.amd.com; Received: from SATLEXMB04.amd.com (165.204.84.17) by CO1NAM11FT044.mail.protection.outlook.com (10.13.175.188) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.4669.10 via Frontend Transport; Mon, 8 Nov 2021 14:00:48 +0000 Received: from lang-desktop.amd.com (10.180.168.240) by SATLEXMB04.amd.com (10.181.40.145) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.7; Mon, 8 Nov 2021 08:00:45 -0600 From: Lang Yu To: , David Hildenbrand , Oscar Salvador CC: , Catalin Marinas , Andrew Morton , Lang Yu Subject: [PATCH v2] mm/kmemleak: Avoid scanning potential huge holes Date: Mon, 8 Nov 2021 22:00:29 +0800 Message-ID: <20211108140029.721144-1-lang.yu@amd.com> X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [10.180.168.240] X-ClientProxiedBy: SATLEXMB03.amd.com (10.181.40.144) To SATLEXMB04.amd.com (10.181.40.145) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 9a98439d-5299-492b-e61d-08d9a2c02ae4 X-MS-TrafficTypeDiagnostic: CH0PR12MB5185: X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:6430; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: Tb3YOZlzLyJtMCPcpxOzCk7fWvFcltefBq4idSvXMCfg40ezHPglVnXsK4uOj8FtLr8L34TTRxJAwl1CK9iWHwJ686jz5dJItmpvUpxldvHLsbv9EMC0KTfsVGObkkv0yOid3Jxzq3KZgchnD8iSazhu1SKpFypdCmIMx4MX1bWe10dgSWMyEmT6NP3xZZwGoxyarIA/lCuv0kDiwMKAiBQHy5UqPPlMPNrCGodyQNrfKa0C7+JVSJa5Pc+Bb0rADmL2K/ZmQtIBHsMBgwYcnP3kBbysuOFUZsHlkTFbGRCSUE3ad6UQHQE2TvIPL/5HnqqRC8us44pUXDmKZh+Q27fqfPjOIBMo5KCLkK2NBc+0nRe9JztWRhCRI7y7nbw7sJrQlY1l4SMGcOZqRvci+nKjeMBJLcJQfgpH/Lg09d0MNskn0vwNQl+0DrPRfZIrAtbTVR+lp2Pz+15SIy5eDlM+m3Hzqtq4yZKw15t50QEIMhKgpVRL1uSxuDCQveZ9MPxTwnOsHmO7dq6IaAcQEoLFy38/rYCyO5s+kIMTmkrOKmNwIhGyh6OqTh9W1VOEFeS4LBaaOoOGzGRhJUllAJIBbcjboHDxd/Kue9BhHNV//Csx4o3wIREvMjMflJqXGMsihIndPVoyi2+pSd4udEcvdYHwppUWIx67f9JxUguBkXbg0PLAwrYR93ShWlS8s+lPQVaUrJP9KN31HTKlcnuJfjzDW5bEdWNH6mnjIZmSWJE7UrNjDUG3kLt/dxt/Yu3JIv1n0vkJlGsLSRxcEw== X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:SATLEXMB04.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(4636009)(36840700001)(46966006)(47076005)(8676002)(36756003)(8936002)(110136005)(2906002)(2616005)(44832011)(4326008)(83380400001)(81166007)(54906003)(316002)(7696005)(356005)(70586007)(26005)(186003)(508600001)(426003)(70206006)(336012)(16526019)(86362001)(5660300002)(36860700001)(82310400003)(1076003)(6666004)(14583001)(36900700001);DIR:OUT;SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Nov 2021 14:00:48.5041 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 9a98439d-5299-492b-e61d-08d9a2c02ae4 X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.17];Helo=[SATLEXMB04.amd.com] X-MS-Exchange-CrossTenant-AuthSource: CO1NAM11FT044.eop-nam11.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH0PR12MB5185 X-Rspamd-Server: rspam03 X-Rspamd-Queue-Id: 24890300E544 X-Stat-Signature: 8pax361f9oar4jz8a9m7mofd5cedkrzp Authentication-Results: imf03.hostedemail.com; dkim=pass header.d=amd.com header.s=selector1 header.b="Dvxn/ZaS"; dmarc=pass (policy=quarantine) header.from=amd.com; spf=pass (imf03.hostedemail.com: domain of Lang.Yu@amd.com designates 40.107.92.71 as permitted sender) smtp.mailfrom=Lang.Yu@amd.com X-HE-Tag: 1636380952-914519 Content-Transfer-Encoding: quoted-printable 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: When using devm_request_free_mem_region() and devm_memremap_pages() to add ZONE_DEVICE memory, if requested free mem region's end pfn were huge(e.g., 0x400000000), the node_end_pfn() will be also huge (see move_pfn_range_to_zone()). Thus it creates a huge hole between node_start_pfn() and node_end_pfn(). We found on some AMD APUs, amdkfd requested such a free mem region and created a huge hole. In such a case, following code snippet was just doing busy test_bit() looping on the huge hole. for (pfn =3D start_pfn; pfn < end_pfn; pfn++) { struct page *page =3D pfn_to_online_page(pfn); if (!page) continue; ... } So we got a soft lockup: watchdog: BUG: soft lockup - CPU#6 stuck for 26s! [bash:1221] CPU: 6 PID: 1221 Comm: bash Not tainted 5.15.0-custom #1 RIP: 0010:pfn_to_online_page+0x5/0xd0 Call Trace: ? kmemleak_scan+0x16a/0x440 kmemleak_write+0x306/0x3a0 ? common_file_perm+0x72/0x170 full_proxy_write+0x5c/0x90 vfs_write+0xb9/0x260 ksys_write+0x67/0xe0 __x64_sys_write+0x1a/0x20 do_syscall_64+0x3b/0xc0 entry_SYSCALL_64_after_hwframe+0x44/0xae I did some tests with the patch. (1) amdgpu module unloaded before the patch: real 0m0.976s user 0m0.000s sys 0m0.968s after the patch: real 0m0.981s user 0m0.000s sys 0m0.973s (2) amdgpu module loaded before the patch: real 0m35.365s user 0m0.000s sys 0m35.354s after the patch: real 0m1.049s user 0m0.000s sys 0m1.042s v2: - Only scan pages belonging to the zone.(David Hildenbrand) - Use __maybe_unused to make compilers happy. Signed-off-by: Lang Yu --- mm/kmemleak.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/mm/kmemleak.c b/mm/kmemleak.c index b57383c17cf6..adbe5aa01184 100644 --- a/mm/kmemleak.c +++ b/mm/kmemleak.c @@ -1403,7 +1403,8 @@ static void kmemleak_scan(void) { unsigned long flags; struct kmemleak_object *object; - int i; + struct zone *zone; + int __maybe_unused i; int new_leaks =3D 0; =20 jiffies_last_scan =3D jiffies; @@ -1443,9 +1444,9 @@ static void kmemleak_scan(void) * Struct page scanning for each node. */ get_online_mems(); - for_each_online_node(i) { - unsigned long start_pfn =3D node_start_pfn(i); - unsigned long end_pfn =3D node_end_pfn(i); + for_each_populated_zone(zone) { + unsigned long start_pfn =3D zone->zone_start_pfn; + unsigned long end_pfn =3D zone_end_pfn(zone); unsigned long pfn; =20 for (pfn =3D start_pfn; pfn < end_pfn; pfn++) { @@ -1454,8 +1455,8 @@ static void kmemleak_scan(void) if (!page) continue; =20 - /* only scan pages belonging to this node */ - if (page_to_nid(page) !=3D i) + /* only scan pages belonging to this zone */ + if (page_zone(page) !=3D zone) continue; /* only scan if page is in use */ if (page_count(page) =3D=3D 0) --=20 2.25.1