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 8E452C282DE for ; Sun, 16 Mar 2025 15:32:46 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 2CFAB280002; Sun, 16 Mar 2025 11:32:44 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 27C7C280001; Sun, 16 Mar 2025 11:32:44 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 16B95280002; Sun, 16 Mar 2025 11:32:44 -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 ED969280001 for ; Sun, 16 Mar 2025 11:32:43 -0400 (EDT) Received: from smtpin30.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id ADE5B80D12 for ; Sun, 16 Mar 2025 15:32:44 +0000 (UTC) X-FDA: 83227806648.30.2813AB9 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by imf05.hostedemail.com (Postfix) with ESMTP id 022D610000E for ; Sun, 16 Mar 2025 15:32:42 +0000 (UTC) Authentication-Results: imf05.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=Fnhw7TMJ; spf=pass (imf05.hostedemail.com: domain of rppt@kernel.org designates 139.178.84.217 as permitted sender) smtp.mailfrom=rppt@kernel.org; dmarc=pass (policy=quarantine) header.from=kernel.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1742139163; 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: in-reply-to:in-reply-to:references:references:dkim-signature; bh=CZoZdi+/rcfDOhuzZ2BxAZJKnQzZLBliCIkwIhp7y3g=; b=gIMGJK9VI/DuRH8afLmdcX7k0ksjBHGJCVm8rqqsXuyfw1jyt1/8U9IHmPx21EXQsCP3XD Mk3JyGsw15or4acRbLxfP+Rb6NvU7OJMkQVlL2bTvQNOtABvGFDI+vxQe77i6f/7/iS4cp xuLv+aNPn+5B6/P0X88nk9ndeeshPY4= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1742139163; a=rsa-sha256; cv=none; b=bElncDc/XwwtFDMcVYkrBUpzIKGD7K70m0OkInO6ADAf6fSRv546rAg0hP7/vqBI/eXy4x QaWRP4247tWmXBFRMrhh+dJV2F4THgmoknl0VSC4Z58kGQYmAQbXwqjZyQy/VCqPI6ACyh X6XEX4uH6Etptcv3Wlsq1vroBjScFbs= ARC-Authentication-Results: i=1; imf05.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=Fnhw7TMJ; spf=pass (imf05.hostedemail.com: domain of rppt@kernel.org designates 139.178.84.217 as permitted sender) smtp.mailfrom=rppt@kernel.org; dmarc=pass (policy=quarantine) header.from=kernel.org Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by dfw.source.kernel.org (Postfix) with ESMTP id 301375C49A0; Sun, 16 Mar 2025 15:30:25 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 84288C4CEDD; Sun, 16 Mar 2025 15:32:39 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1742139161; bh=YX4sDokxndnlj4S0GiQ3bcDStl7MJnFPUaDHqzdzr+g=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=Fnhw7TMJc2nM3SiUqb0JAJsl4CzqRdnzBA3k0GX1x++N/IGdrDIrCjTdTNIToS+U8 BvWigxmhb8lM+0s+yc46UR178cigBrr2+BGn6cXdIYjGbyMZXdeaHvCOW7Omapdmlu aKezhYyo1sOA5cqIjmRHE0GXrUo03VZffyjiBhHk+GhobU2OSiX+0y8uUwlTIzzCNC A2S1sxsYJ1KbKK0y7pK1jEiJNe59zL6vsExxgyobUjY/HLzOAv6mOVNUbm/8wZICgm mzsnMnfIT6iAmJ3NOsGnpDqd6togQMQieprf3zPphvhstntcq8LBgc4szBUMb0osoE TWBsEvatEn4RA== Date: Sun, 16 Mar 2025 17:32:35 +0200 From: Mike Rapoport To: Wei Yang Cc: akpm@linux-foundation.org, linux-mm@kvack.org, Yajun Deng , stable@vger.kernel.org Subject: Re: [PATCH 2/3] mm/memblock: repeat setting reserved region nid if array is doubled Message-ID: References: <20250312130728.1117-1-richard.weiyang@gmail.com> <20250312130728.1117-3-richard.weiyang@gmail.com> <20250314020351.bgdjmdjqnobu77s7@master> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20250314020351.bgdjmdjqnobu77s7@master> X-Rspam-User: X-Rspamd-Server: rspam01 X-Rspamd-Queue-Id: 022D610000E X-Stat-Signature: 57e75dcbgr1jk5j1rp416c63m3bfoxju X-HE-Tag: 1742139162-48112 X-HE-Meta: U2FsdGVkX1+YX9AT6vf9rZ+1B0EdZDWsMQF2JE5r1auEWjPTDwmonXdtrMT/2cP4X8eSUFHGB6vdUxrU4VDoZzR0cEYxCdpa+3llLQcvnGTmgPF4qOSUeO4vq+BuoV7MckYESK2grggNAaJAHqZqeYsQNSr9OD3NIfgTqffRyGM8vJB0eRwTqaR4Ff05cUs49GVcj0IFx6Y5rN7y7hTdtOSlf47NX3A4qLGkGguoJRmXYXGjA/xTCTym9PRbFgjOwiWAJSU5IqSeRIjyqwKif3IyZMXdFLNTLSEP3v5EvhzoF4DUSoXJaRvmvJLDjV8u2faftcsCfrd8NUgH5ApTsTAsXT/98l81RSAnOsR+FAHjcXijxoLENQPyZyOHVt/5fgJ+Uu1H0PEzC6fBu2gtY1BkTggtfzCcVzw41n8+mxBTuABZnYdKJ2byleOsEPVGVcNbAWa4eAp3lnOGzso78jpywE+1SMUlFJKoIVc2SXzooqDGzcdcsq1SsX2PTQXaHPEllNXbHpGNSd9lC1NRiDShWa7UCxpMefQIu8wH2WkNDcmHiCE2KuIG65rN6VbM9q8hIXTudh8eJPWv6vVg6UDY9vCf/0C/Dg2JVVWy3rPfmmnKsfZyr/UzFeVv+yuz2MI+DXUViQy+ZNoVBkp1oI6qXoCrwZtSeAm8xGhiWBASXwnNbpbfbGIgOuoa4Q0ESoTPZnTn1V/EwBugOMhMiBdhFDLxzN/ZTn+/p3A1ujYsJJnCHbttwU750n3rQK18kmBlV8OK5ejSvDkJktWA3+77hXYz02AvWjEX4U4eyYKANnm0k19odrwjvIDZ88u9pQzXZ6l4udGcks9+FiKyyb2bmwCdT9aDTNr8A0Ta5z7S7KTiOP3GaIdgyVibWMWYvvZGEBnc7WQXddlrP2WST3oWd0RuyFVYM8uUStTUtU0Hl00lzPk/9w52YzM5aUbh7th04XO2+9EBDpocA0Q q1RwFdQy gZktjBPCaIL1qqlOoa1c2vA/0YC6pEpc+u2CWaEApeM+OmUXPVbejdlHnf5CM58pIlV+zYS52fNJczhn3zrwjajuKSZw5/fwjMnOcoyOkoW5IvsA9gXZQH3wlMxQPAXJHstgQEuzszMIskJrccKrI0T1KTjxC8OyctqpoP/SLGW7yQPa+N0d128DygMtg8RTs1kA6GJg20+pMlJp9XettLxM0wKMItafpqn5NvDZEp6KWBJxzBrbN9x2llTcZMW/z4i2IKzeyCWtH8rqp4o40Oz7fzPa2EZi+kUOrb15U+BilvPUwK/J5df1dwoT4fj6GeF5MXFWUYsv3fqed3M9xJJcvkX0QCWjFqhh2VRHmJs8/yBdYgR2EhMkrag== 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 Fri, Mar 14, 2025 at 02:03:51AM +0000, Wei Yang wrote: > On Thu, Mar 13, 2025 at 05:07:59PM +0200, Mike Rapoport wrote: > >> Commit 61167ad5fecd ("mm: pass nid to reserve_bootmem_region()") introduce > >> a way to set nid to all reserved region. > >> > >> But there is a corner case it will leave some region with invalid nid. > >> When memblock_set_node() doubles the array of memblock.reserved, it may > >> lead to a new reserved region before current position. The new region > >> will be left with an invalid node id. > >> > >> Repeat the process when detecting it. > >> > >> Fixes: 61167ad5fecd ("mm: pass nid to reserve_bootmem_region()") > >> Signed-off-by: Wei Yang > >> CC: Mike Rapoport > >> CC: Yajun Deng > >> CC: > >> --- > >> mm/memblock.c | 12 ++++++++++++ > >> 1 file changed, 12 insertions(+) > >> > >> diff --git a/mm/memblock.c b/mm/memblock.c > >> index 85442f1b7f14..302dd7bc622d 100644 > >> --- a/mm/memblock.c > >> +++ b/mm/memblock.c > >> @@ -2184,7 +2184,10 @@ static void __init memmap_init_reserved_pages(void) > >> * set nid on all reserved pages and also treat struct > >> * pages for the NOMAP regions as PageReserved > >> */ > >> +repeat: > >> for_each_mem_region(region) { > >> + unsigned long max = memblock.reserved.max; > >> + > >> nid = memblock_get_region_node(region); > >> start = region->base; > >> end = start + region->size; > >> @@ -2193,6 +2196,15 @@ static void __init memmap_init_reserved_pages(void) > >> reserve_bootmem_region(start, end, nid); > >> > >> memblock_set_node(start, region->size, &memblock.reserved, nid); > >> + > >> + /* > >> + * 'max' is changed means memblock.reserved has been doubled > >> + * its array, which may result a new reserved region before > >> + * current 'start'. Now we should repeat the procedure to set > >> + * its node id. > >> + */ > >> + if (max != memblock.reserved.max) > >> + goto repeat; > > > >This check can be moved outside the loop, can't it? > > > > We can. You mean something like this? Yes, something like this. > diff --git a/mm/memblock.c b/mm/memblock.c > index 85442f1b7f14..67fd1695cce4 100644 > --- a/mm/memblock.c > +++ b/mm/memblock.c > @@ -2179,11 +2179,14 @@ static void __init memmap_init_reserved_pages(void) > struct memblock_region *region; > phys_addr_t start, end; > int nid; > + unsigned long max; maybe max_reserved? > > /* > * set nid on all reserved pages and also treat struct > * pages for the NOMAP regions as PageReserved > */ > +repeat: > + max = memblock.reserved.max; > for_each_mem_region(region) { > nid = memblock_get_region_node(region); > start = region->base; > @@ -2194,6 +2197,13 @@ static void __init memmap_init_reserved_pages(void) > > memblock_set_node(start, region->size, &memblock.reserved, nid); > } > + /* > + * 'max' is changed means memblock.reserved has been doubled its > + * array, which may result a new reserved region before current > + * 'start'. Now we should repeat the procedure to set its node id. > + */ > + if (max != memblock.reserved.max) > + goto repeat; > > /* > * initialize struct pages for reserved regions that don't have > -- > Wei Yang > Help you, Help me -- Sincerely yours, Mike.