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 61A8AC25B75 for ; Mon, 3 Jun 2024 06:29:10 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id F373C6B00A0; Mon, 3 Jun 2024 02:29:09 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id EEA136B00A3; Mon, 3 Jun 2024 02:29:09 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id DB0B36B00A4; Mon, 3 Jun 2024 02:29:09 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id BB34D6B00A0 for ; Mon, 3 Jun 2024 02:29:09 -0400 (EDT) Received: from smtpin25.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id 6CDF5A1C67 for ; Mon, 3 Jun 2024 06:29:09 +0000 (UTC) X-FDA: 82188600018.25.A7CF565 Received: from sin.source.kernel.org (sin.source.kernel.org [145.40.73.55]) by imf25.hostedemail.com (Postfix) with ESMTP id 243D9A0003 for ; Mon, 3 Jun 2024 06:29:06 +0000 (UTC) Authentication-Results: imf25.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=S2cEE1j8; dmarc=pass (policy=none) header.from=kernel.org; spf=pass (imf25.hostedemail.com: domain of rppt@kernel.org designates 145.40.73.55 as permitted sender) smtp.mailfrom=rppt@kernel.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1717396147; 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=nIGXvJIF7xHYGVANGjswqfLQUS9lIBPZLKw1MAWG9G4=; b=aev9mL+/tovoXcBpTDSkfdGWIy4ntTw/dHRizEbGwgR3ixoEFwc8hhd54FJP652pwUeLkY MTc7/0BC55Lf1MEFtH+YpOh8qrVcz8/vYErwnG97qPAA7SqKhruL/P5/pkBMlInO0HLPx/ 5+L0NMAJQsG5VDuETM+IC/A1ZfsS9Z8= ARC-Authentication-Results: i=1; imf25.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=S2cEE1j8; dmarc=pass (policy=none) header.from=kernel.org; spf=pass (imf25.hostedemail.com: domain of rppt@kernel.org designates 145.40.73.55 as permitted sender) smtp.mailfrom=rppt@kernel.org ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1717396147; a=rsa-sha256; cv=none; b=paVB9FRXQw0LjHSbk7kRPCMl3MAWLqztgAJAkXcRg8QFM6sADHKMX1CwFXe7HSfZ+Ue2Ft rMNVyeYyxx89oB08qcDBC5sLvgqJANJX2D9vYm5noROuezwnvoLAjpukwp15mwEYVUG5Ev lKxRDVNvYkFDZz2MMoJUJV7tr2SIbH0= Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by sin.source.kernel.org (Postfix) with ESMTP id 6EC31CE0AD8; Mon, 3 Jun 2024 06:29:03 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 36922C2BD10; Mon, 3 Jun 2024 06:29:00 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1717396142; bh=xGsbcbXnkn2I/FeHqzkNVs41z8rruQkVa17wOryeudI=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=S2cEE1j8dGoUeGyl0bH1htsmAXl99d0TptcfNcamrcUJP2JvqgVDhNF5WQfF17coQ XnPUscmETH8fIuNJKXK0GJW6IruQB7VrFUFGwRjYx/4XXj3EA17vjhg/v/U7snLBjc JTqc+cM5Z822ikFbEXR45ydffR3o+tLhVarR24vP1SwYXP14vTIv6alpNc+rA2lrQX vj9zH9+jBdGQZusABPPbUiZ2UB7/r/d+DeyJej9jSj8+rG5rqKKJDARwmO9XT2BNPb l5UCpbFmoqCFn14ftyP4aTMUyDe60mU+gyMR5fzBc96sCvoHwGyI1hSrEmnVrvGlS6 XDnmz+2mfkB6A== Date: Mon, 3 Jun 2024 09:27:10 +0300 From: Mike Rapoport To: Wei Yang Cc: akpm@linux-foundation.org, linux-mm@kvack.org Subject: Re: [PATCH 3/3] mm/mm_init.c: not always search next deferred_init_pfn from very beginning Message-ID: References: <20240531002613.5231-1-richard.weiyang@gmail.com> <20240531002613.5231-3-richard.weiyang@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20240531002613.5231-3-richard.weiyang@gmail.com> X-Rspamd-Queue-Id: 243D9A0003 X-Stat-Signature: nezmgnunsgckj11zq7cms5et6o3g8swc X-Rspam-User: X-Rspamd-Server: rspam08 X-HE-Tag: 1717396146-545642 X-HE-Meta: U2FsdGVkX1/ugjkoKHbPyOIQa2+Q4q0MAiqVkwalBM2+hoOc6K5LKsWyPoioIcZ1YnRErzkC/vhvT+ykPGrPujJcbqW8MlL6u3wB6cJlxHYw70eupbehCjent4EsPSEJ4FCgJUpE57EuJXvEwiD7oCq/BE76HUbEZN8scIWIvujXrklSZ6G0Z/WV1Y3Uf6/9SoltixUsymEbuL57z1oAowgjVRam4FRt1jRk+h6owh9N27cgivFjgkUozsjpuLvKSE+NjpMfDH218aaCxkur0yQ16VDTwINzXU9l0KUas8+iTMa1cxJLQf7HMwtZsGCONXv1qDoE3zkcZoN5Wkzxj4jZDxor+hR/KU7JhKx+K08bz6PDKNchP8G9NPP1dEFJwFFSMNFSsr4xuf7cZaaYGW9USdPvD7Vguwh8JGDsFM8TQ/Xj17G3XFy0t+rCrgbwFY7/Wnvza4I1TDr+Jb8gZUpGwNbSs5gBHGuZdRRT6BMrRKFuPjNjDTTIySPmgGSTvTQVMw8WodBlPqCPIpoacS3Rj7eGRZsUdKsWcsuxwMKNQm4OUXg5mdqbHL4pJpH64a3vmjxa06xTNeaid9yqAkeiDBy7w62l/vf/ZRebKpxfFxSxj7LIf8KCr35ics4T/3Uad7zNnib+Eg6SOzGQwhnILfZvTu74o7xyRSuAVr/OW6Cjin71hxO/f9C3ZWt74018+ho1ShYfPUzqxzCYES4xPo8h0fMQ7PsuDMx2dN9UcQi81DyAIGn5bZaSxKI96Pksc1q6n1NvOYsUYo6nIHVwE9ykNEjxC0yPadVfwjfCeBOGsRv3irHJhpT7gqX/omxSaoS7zrBdhYiYuhDn8lsGCagw3qbM9TihrNfEtnGtZBd/H6IzYjSEeqVHqysdCBiJGq8BaADDIRM3OhefK0A++r/OXG9XjRKxiknAlX4h0HWYyU2mDxmnZrEdgfMGJlbd4xf1C2mGefbBsFV 3CTCPuvE 3agM4LjAfVd6c5aaT+x7UXc7amuA9QOgbHxwJARHeH0J9/2B0M1IpDzUVQL0YtZgsCwz58BCUvRWKyrJzGa+eH1h4GsFeTLMYQ8ge0LDm7PQh7kD6D0SFUvwaZpy0Eyj8gAS6hoJAAcXbAhGgxHJklzULiOCJs0wbDRobs3q7G10MPp457WsfIVMVFQtXMhN0ui67VUq14RWPl7Y1SeQbiTBFvIlo2LJTpzgdyIzVSsCNr4OMTtV6B/CypiD9OrMZ3SBo6qgtFryGWzQ+zpxRk3FD6F5vTKd8WNbZ 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, May 31, 2024 at 12:26:13AM +0000, Wei Yang wrote: > In function deferred_init_memmap(), we call > deferred_init_mem_pfn_range_in_zone() to get the next deferred_init_pfn. > But we always search it from the very beginning. > > Since we save the index in i, we can leverage this to search from i next > time. > > Signed-off-by: Wei Yang > --- > include/linux/memblock.h | 19 ------------------- > mm/mm_init.c | 21 ++++++++++++--------- > 2 files changed, 12 insertions(+), 28 deletions(-) > > diff --git a/include/linux/memblock.h b/include/linux/memblock.h > index 6cf18dc2b4d0..45cac33334c8 100644 > --- a/include/linux/memblock.h > +++ b/include/linux/memblock.h > @@ -299,25 +299,6 @@ void __next_mem_pfn_range(int *idx, int nid, unsigned long *out_start_pfn, > void __next_mem_pfn_range_in_zone(u64 *idx, struct zone *zone, > unsigned long *out_spfn, > unsigned long *out_epfn); > -/** > - * for_each_free_mem_pfn_range_in_zone - iterate through zone specific free > - * memblock areas > - * @i: u64 used as loop variable > - * @zone: zone in which all of the memory blocks reside > - * @p_start: ptr to phys_addr_t for start address of the range, can be %NULL > - * @p_end: ptr to phys_addr_t for end address of the range, can be %NULL > - * > - * Walks over free (memory && !reserved) areas of memblock in a specific > - * zone. Available once memblock and an empty zone is initialized. The main > - * assumption is that the zone start, end, and pgdat have been associated. > - * This way we can use the zone to determine NUMA node, and if a given part > - * of the memblock is valid for the zone. > - */ > -#define for_each_free_mem_pfn_range_in_zone(i, zone, p_start, p_end) \ > - for (i = 0, \ > - __next_mem_pfn_range_in_zone(&i, zone, p_start, p_end); \ > - i != U64_MAX; \ > - __next_mem_pfn_range_in_zone(&i, zone, p_start, p_end)) > > /** > * for_each_free_mem_pfn_range_in_zone_from - iterate through zone specific > diff --git a/mm/mm_init.c b/mm/mm_init.c > index d05a4c38310f..ec17bf93f946 100644 > --- a/mm/mm_init.c > +++ b/mm/mm_init.c > @@ -2023,18 +2023,21 @@ static unsigned long __init deferred_init_pages(struct zone *zone, > * return false indicating there are no valid ranges left. > */ > static bool __init > -deferred_init_mem_pfn_range_in_zone(u64 *i, struct zone *zone, > +deferred_init_mem_pfn_range_in_zone_from(u64 *i, struct zone *zone, I don't think renaming this function is useful. The comment above it, on the other hand, needs update. > unsigned long *spfn, unsigned long *epfn, > unsigned long first_init_pfn) > { > - u64 j; > + u64 j = *i; > + > + if (j == 0) > + __next_mem_pfn_range_in_zone(&j, zone, spfn, epfn); > > /* > * Start out by walking through the ranges in this zone that have > * already been initialized. We don't need to do anything with them > * so we just need to flush them out of the system. > */ > - for_each_free_mem_pfn_range_in_zone(j, zone, spfn, epfn) { > + for_each_free_mem_pfn_range_in_zone_from(j, zone, spfn, epfn) { > if (*epfn <= first_init_pfn) > continue; > if (*spfn < first_init_pfn) > @@ -2106,9 +2109,9 @@ deferred_init_memmap_chunk(unsigned long start_pfn, unsigned long end_pfn, > { > unsigned long spfn, epfn; > struct zone *zone = arg; > - u64 i; > + u64 i = 0; > > - deferred_init_mem_pfn_range_in_zone(&i, zone, &spfn, &epfn, start_pfn); > + deferred_init_mem_pfn_range_in_zone_from(&i, zone, &spfn, &epfn, start_pfn); > > /* > * Initialize and free pages in MAX_PAGE_ORDER sized increments so that > @@ -2137,7 +2140,7 @@ static int __init deferred_init_memmap(void *data) > unsigned long start = jiffies; > struct zone *zone; > int max_threads; > - u64 i; > + u64 i = 0; > > /* Bind memory initialisation thread to a local node if possible */ > if (!cpumask_empty(cpumask)) > @@ -2168,7 +2171,7 @@ static int __init deferred_init_memmap(void *data) > > max_threads = deferred_page_init_max_threads(cpumask); > > - while (deferred_init_mem_pfn_range_in_zone(&i, zone, &spfn, &epfn, first_init_pfn)) { > + while (deferred_init_mem_pfn_range_in_zone_from(&i, zone, &spfn, &epfn, first_init_pfn)) { > first_init_pfn = ALIGN(epfn, PAGES_PER_SECTION); > struct padata_mt_job job = { > .thread_fn = deferred_init_memmap_chunk, > @@ -2212,7 +2215,7 @@ bool __init deferred_grow_zone(struct zone *zone, unsigned int order) > unsigned long first_deferred_pfn = pgdat->first_deferred_pfn; > unsigned long spfn, epfn, flags; > unsigned long nr_pages = 0; > - u64 i; > + u64 i = 0; > > /* Only the last zone may have deferred pages */ > if (zone_end_pfn(zone) != pgdat_end_pfn(pgdat)) > @@ -2230,7 +2233,7 @@ bool __init deferred_grow_zone(struct zone *zone, unsigned int order) > } > > /* If the zone is empty somebody else may have cleared out the zone */ > - if (!deferred_init_mem_pfn_range_in_zone(&i, zone, &spfn, &epfn, > + if (!deferred_init_mem_pfn_range_in_zone_from(&i, zone, &spfn, &epfn, > first_deferred_pfn)) { > pgdat->first_deferred_pfn = ULONG_MAX; > pgdat_resize_unlock(pgdat, &flags); > -- > 2.34.1 > -- Sincerely yours, Mike.