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 736B3C369C2 for ; Fri, 18 Apr 2025 02:59:40 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 066346B02A1; Thu, 17 Apr 2025 22:59:38 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 016866B02A5; Thu, 17 Apr 2025 22:59:37 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id E48C86B02A7; Thu, 17 Apr 2025 22:59:37 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0011.hostedemail.com [216.40.44.11]) by kanga.kvack.org (Postfix) with ESMTP id C74046B02A1 for ; Thu, 17 Apr 2025 22:59:37 -0400 (EDT) Received: from smtpin02.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay05.hostedemail.com (Postfix) with ESMTP id 4086D5DEC3 for ; Fri, 18 Apr 2025 02:59:39 +0000 (UTC) X-FDA: 83345659278.02.B675067 Received: from sea.source.kernel.org (sea.source.kernel.org [172.234.252.31]) by imf25.hostedemail.com (Postfix) with ESMTP id 4B4AAA000E for ; Fri, 18 Apr 2025 02:59:37 +0000 (UTC) Authentication-Results: imf25.hostedemail.com; dkim=pass header.d=linux-foundation.org header.s=korg header.b=GbdXQsyp; dmarc=none; spf=pass (imf25.hostedemail.com: domain of akpm@linux-foundation.org designates 172.234.252.31 as permitted sender) smtp.mailfrom=akpm@linux-foundation.org ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1744945177; a=rsa-sha256; cv=none; b=S6nggbl765PWyfj4aCpSR7S6do5fI1qO7ugskfkfE87j4z1yUQaPpdaFVZ/P1tmas90hvJ /RCB5kJzrYRPgpzh7QRzdmV/qn2Xb2Yxn5+DC5Nbv3r7OmUY0M3EOaoBL7DarPhHob+lFp DpDKxwV3eXS5XEVTQVW5vlSuLVdEtHs= ARC-Authentication-Results: i=1; imf25.hostedemail.com; dkim=pass header.d=linux-foundation.org header.s=korg header.b=GbdXQsyp; dmarc=none; spf=pass (imf25.hostedemail.com: domain of akpm@linux-foundation.org designates 172.234.252.31 as permitted sender) smtp.mailfrom=akpm@linux-foundation.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1744945177; 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=8b8RQd3wmiVvgDwNGScyGSQo37F/M+kmcQp+ayn2h+M=; b=0wkxxEnlbNcWgx9o0UREmnTeqsmXjP2eBsM409ft0zhTQJ/Dpvj+RE0sKY8UxMuwH4tqzu ZkdegYYMz5pJWiieo7apx43vSa2beyP3DucNX8DBbp1ygKxy7HYJ0qrIowLbHUBVsNoerY 8thl+mDYCH3Nachjsci+ifZ7pWubQak= Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by sea.source.kernel.org (Postfix) with ESMTP id EEBD044D37; Fri, 18 Apr 2025 02:59:34 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id C62D5C4CEE4; Fri, 18 Apr 2025 02:59:35 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linux-foundation.org; s=korg; t=1744945176; bh=1pl44oV5s99bxQs8TSunw+N+b8z+VV8XdZg9NMJymog=; h=Date:From:To:Cc:Subject:In-Reply-To:References:From; b=GbdXQsyp28Jcw2hWoBr+5NowT7gWNtHsJ48X/sktQoNISp89p5dtCW1B8Uoy/vH4h BmS7vaYvCL2i2rvIyIjsGdEA1pL0cmMHQS5iEgLPR7npLQoEzo/rPIHEynwBUXY9Ib dCnEgO2sJmzYQzGa0KrExPWzXYB+/ujJxgYIW4zU= Date: Thu, 17 Apr 2025 19:59:35 -0700 From: Andrew Morton To: Jinjiang Tu Cc: , , , , , Subject: Re: [PATCH] mm/contig_alloc: fix alloc_contig_range when __GFP_COMP and order < MAX_ORDER Message-Id: <20250417195935.2ac19ac5f92add5931b6fa5a@linux-foundation.org> In-Reply-To: <20250312084705.2938220-1-tujinjiang@huawei.com> References: <20250312084705.2938220-1-tujinjiang@huawei.com> X-Mailer: Sylpheed 3.8.0beta1 (GTK+ 2.24.33; x86_64-pc-linux-gnu) Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit X-Rspam-User: X-Rspamd-Server: rspam02 X-Rspamd-Queue-Id: 4B4AAA000E X-Stat-Signature: 99safhkoyj8km4hxfuo9bnce1qxqe538 X-HE-Tag: 1744945177-624441 X-HE-Meta: U2FsdGVkX18IFFgQVvjKUiQuWES5S+DVF+xOKmG6WMthmw0EVE8eahrG9w7a7CwGIsbY8ydgRuqC4D2EO1BXStHp32gaI7J6rjVMZ2dF/uWT8GHXxPm63kZtvq/dijt+qtX56xZhjWmEBu/NWskpDkUZ7RytIY9s3A5htziOlow8axqYN1keWbE/lPLozzxfacennl+Bp3hPddYPuZgFVRaZMfCPg2K0L0XnDTXVBddLur+PzV/1elFrz/fgWub1RVnyPcyC1DFdXzK0u7BzUt7DI3H66oBYrV96DlYRUuMfyjhLFKmQaWgrEqiCOPzIZPY84U3G/IPoBV43J3ML9S/nH/fEk5ENmnSD9XUF+VrHy80wjupj1dfVQYYoBKZ3bOQjr/+A8c2IBZrkOnYE8QnJGQgfMtyckt6OsXcM7is9HGmcXx05w9oYlKB4Z3TJOg4rxL1E5NOI8sLjrzkqDMmPJ1sFShc2YmjujaVu3wUST9kjrWQjA3tTkho05PGURaTc00K6xHxB6ZQS5fhOMtgKXW4cyhldrvZkZpoC7qYKIhnRRXJHoUUP/deJ6XT+unaP0nafSfHBsaRI1Q1OBm5OZsp9fjmZGZ7TVD0AEfBTGo7KiQktOThq4lnqyAqGR4uhZ4u69kcYahcsS5+6a6iy5sJr/BF9qsM8p9hDXJ5J5pTJPMXz7AhgwXJw+ytd3SimYjayGEnmyYFVAR93Tw29qZSEs1kRai14OGf9E9UEH7t1/U5c5EUCi9bMwfNUQurNf20VikQlv2rZHkwZZ3huUaA3eGx7GQNfvQw1589VWrN9DdktRl8KOPw0C+e059ChyB8yLsGF5Rj2TZ2VyKkCk2worDKhRKqqwlXhZUA+7EOBwWuE4AEhXV7B5JBvlSAFGh4CzK1KROcmyGdGfa9xiWsrxcjNlrbpPBXksYDbtqFixOZTHO9TKIDKa+CrRzUIOx/aTh6vLYdVI7M 0qkYnsQf OHTW73mJ86/mifITOV1p0uldNtnm/a5YrCR8TzT9iQNapwspm2xC/3P93tSepUnMUhEU0CMVnxQAnSdeSeKHGz217wPcSRbLk03/+I4aBsnt4kk8z38O6Y35l4QjhaI/n5V4JWzO+0p0T76Fe10lHt2IsTEaFRY3L7mFjh7arcFTLzFJxyD0bscJ6RagOrzFHtt975htaVM4RIB6vVu/eL6fDcJZwMlMSEjeHqb82xIVm2ypW6OJeu+gjWO55EoIJ2p6hd9y+NPo1tvWEc73but5tE0ZuZKUIvljXO7Nxr+Pbvv9HklTD13+NJX6Vo/+CfkOw 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 Wed, 12 Mar 2025 16:47:05 +0800 Jinjiang Tu wrote: > When calling alloc_contig_range() with __GFP_COMP and the order of > requested pfn range is pageblock_order, less than MAX_ORDER, I triggered > WARNING as follows: > > PFN range: requested [2150105088, 2150105600), allocated [2150105088, 2150106112) > WARNING: CPU: 3 PID: 580 at mm/page_alloc.c:6877 alloc_contig_range+0x280/0x340 > > alloc_contig_range() marks pageblocks of the requested pfn range to be > isolated, migrate these pages if they are in use and will be freed to > MIGRATE_ISOLATED freelist. > > Suppose two alloc_contig_range() calls at the same time and the requested > pfn range are [0x80280000, 0x80280200) and [0x80280200, 0x80280400) > respectively. Suppose the two memory range are in use, then > alloc_contig_range() will migrate and free these pages to MIGRATE_ISOLATED > freelist. __free_one_page() will merge MIGRATE_ISOLATE buddy to larger > buddy, resulting in a MAX_ORDER buddy. Finally, find_large_buddy() in > alloc_contig_range() returns a MAX_ORDER buddy and results in WARNING. > > To fix it, call free_contig_range() to free the excess pfn range. This has been in mm-hotfixes for a month without issue. Is there any reviewer interest? > --- a/mm/page_alloc.c > +++ b/mm/page_alloc.c > @@ -6528,7 +6528,8 @@ int alloc_contig_range_noprof(unsigned long start, unsigned long end, > goto done; > } > > - if (!(gfp_mask & __GFP_COMP)) { > + if (!(gfp_mask & __GFP_COMP) || > + (is_power_of_2(end - start) && ilog2(end - start) < MAX_PAGE_ORDER)) { > split_free_pages(cc.freepages, gfp_mask); > > /* Free head and tail (if any) */ > @@ -6536,7 +6537,15 @@ int alloc_contig_range_noprof(unsigned long start, unsigned long end, > free_contig_range(outer_start, start - outer_start); > if (end != outer_end) > free_contig_range(end, outer_end - end); > - } else if (start == outer_start && end == outer_end && is_power_of_2(end - start)) { > + > + outer_start = start; > + outer_end = end; > + > + if (!(gfp_mask & __GFP_COMP)) > + goto done; > + } > + > + if (start == outer_start && end == outer_end && is_power_of_2(end - start)) { > struct page *head = pfn_to_page(start); > int order = ilog2(end - start); >