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 3BD3FC00A5A for ; Thu, 19 Jan 2023 13:05:03 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id CE0E76B0078; Thu, 19 Jan 2023 08:05:02 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id C90CB6B007B; Thu, 19 Jan 2023 08:05:02 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id B7FEC6B007D; Thu, 19 Jan 2023 08:05:02 -0500 (EST) 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 A704D6B0078 for ; Thu, 19 Jan 2023 08:05:02 -0500 (EST) Received: from smtpin16.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id 77F01801C6 for ; Thu, 19 Jan 2023 13:05:02 +0000 (UTC) X-FDA: 80371568844.16.4FB2D50 Received: from ams.source.kernel.org (ams.source.kernel.org [145.40.68.75]) by imf12.hostedemail.com (Postfix) with ESMTP id A2F1A40005 for ; Thu, 19 Jan 2023 13:05:00 +0000 (UTC) Authentication-Results: imf12.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=urzKR+0U; dmarc=pass (policy=none) header.from=kernel.org; spf=pass (imf12.hostedemail.com: domain of rppt@kernel.org designates 145.40.68.75 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=1674133500; 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=uFAbP12JazbGueWr0+o4UE1LDRvdfT0XxXqtJ6wtdB0=; b=Tz0TKKBmdP2dZAksXbOcnH6EpdJ9iAFWJTT40ZYBEKzlbKOL/GCn1xzYanBcjku2wU9R3T G4L7ERndjgTkY2m1BdmWu6BqJSRr07dCA8StpCLAEOexnZyfIrtbNb+Yb3DjhFBPRQEnZw XLlRoFLCEqOvRpazuwkIHIUhG7L9V40= ARC-Authentication-Results: i=1; imf12.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=urzKR+0U; dmarc=pass (policy=none) header.from=kernel.org; spf=pass (imf12.hostedemail.com: domain of rppt@kernel.org designates 145.40.68.75 as permitted sender) smtp.mailfrom=rppt@kernel.org ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1674133500; a=rsa-sha256; cv=none; b=vDE+/YrNBIoeLisIQcNqYjXgEEcQ5ooh4uhLFp42hOWmCpJ4/nst6RXsIlin92dnmEbK27 4U9DBDbKTLVWy4tGMQIF7uxcNsanwmzcsipOvS8LfAiG4z09DAgSpK85YZlc4ZmGc7K845 +9WMugl+SRTCvJRXo0F9IN9PG9Ec4+c= Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ams.source.kernel.org (Postfix) with ESMTPS id 11795B82336; Thu, 19 Jan 2023 13:04:59 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 7B790C433F0; Thu, 19 Jan 2023 13:04:56 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1674133497; bh=zviOFyfevw+hoK5UnH3O85aVKCM479kmlJkkL5nCyR4=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=urzKR+0UZ7gVDXdL14hB7vWE6Ggp+20+f0u1wy7CObyWRyhDoydEv6i96o14OKwtY 3TaJiuco1X3O/jLrRP8suGd33FCp4eNt3TtIOkE7QV59HPC1rS6kXh/exNwOHA1PWC GSce4S4hDim28G7qglyDJRFDb1BD1d/dlK8N0ab7GzMP0YPqtfVuEyUTz+dGSRnE5i KTldWtiGlgDikxAmbSRoYlwr/+swX3gi0satCer4JoyhG/EVYITrYd6klviiX59iZL fSualy8+je3AIMqXDRDRDQLB/8WT6pJA5lIKe+qzqH0LSnVyKgBUwlFRquONanpMz5 KDGv3V7YfXCmw== Date: Thu, 19 Jan 2023 15:04:46 +0200 From: Mike Rapoport To: Peng Zhang Cc: akpm@linux-foundation.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH 3/3] memblock: Avoid useless checks in memblock_merge_regions(). Message-ID: References: <20230113082659.65276-1-zhangpeng.00@bytedance.com> <20230113082659.65276-4-zhangpeng.00@bytedance.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20230113082659.65276-4-zhangpeng.00@bytedance.com> X-Rspamd-Queue-Id: A2F1A40005 X-Rspamd-Server: rspam09 X-Rspam-User: X-Stat-Signature: bugzhf3jch4fegsoygwhfodap9an5rrg X-HE-Tag: 1674133500-692949 X-HE-Meta: U2FsdGVkX19+xD/pDkeb/rxwsD3WrMMts5jgnGH18XafVJGVeKqROY9OC5RI0JLnyfd+Bq0u3DTFElC07SUKqqkdYX2sy5eM2CG7QBhJsveVB1SJAvYe6XMfArS2LHwQspjgtTDP+y97CwlMKLKIGRh93bigoVRVWCLeDPAER85MFQaw7Hslv01y292WP2Wz2W7CYWb7hz82xb+WuDykwR1LYNLmlTdHoQ7cv7kvQTpa64kV+s6Tn86PhEwd78np6VmVRUBhYjlk7UAi/6hX/v1sgt1mdWHprdTvzrJasNDlv1RBBct4p1p8juJBnCeGdIoCuRbN+qTromt/gCdzuAocURlYf04RRya6GA502KM3eaD1lBYkKr0rIp3G6Ris5r7SEDh2hFa26Xr++/ZxhlDDmOGpH2QY9hMo/2nwwTmC/EGbEXkNJfO931Vm1gtDlWDvHleUIQnWbgTCSG14ruVomZJy76eBE4N2V/aVnXkj5awcpV5I0SVi/Ieo2JAlMnFLdmwSnVfqHfImpYrL3DF2tYCtmEVkbxs/d+9mVlMJTnjAiZrwGfFI8eGc+Y4Z+eF/VCy7TIxQiJuQYDSiGccIGl30fMW8EAsnJOfHrT9ub8pYhI/4AdjXsg2IbtCQ8gfEpyiriZWvYWSnxduJc0tU3cFAL8Bs2wv0m30TeeNtmbvFG/BLeGW7OhzVuonaNqJNRT8Fzj9fDgL3tC5hsESxNIGOemu+kT4FADFgo6f7Z25ghGBjgVPHQknAlYu+ZZCF2L9XCntnptlnjqsnIZu9nodRR323+h+lfBIIbXyH2lhpsVlGjm1DprZJESvv22GNSRE2j+xplWWgxai13+26ictPBfrhNWE6uBmiAZ1dxxJI5hvfHhs4IRHPd+9oW6KxopM6dooxUoYiIVVZEZNw0uurzfdXPiA+ZDwrnDhHWfq9EfTWj2P/ShPqH+yF5enY1qwkrZpvaUiic7e B/Ushfcb PcaZVJxkfm4V20OJx4jMTYoEXqjxZ+GQBeKS3lPe5gHV/wAGd7pz11R+gHPvWaa2G0DYkWd4TBy9NXM8= 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: On Fri, Jan 13, 2023 at 04:26:59PM +0800, Peng Zhang wrote: > memblock_merge_regions() is called after regions have been modified to > merge the neighboring compatible regions. That will check all regions > but most checks is useless. > > Most of the time we only insert one or a few new regions, or modify one > or a few regions. At this time, we don't need to check all regions. We > only need to check the changed regions, because other not related > regions cannot be merged. So this patch add two parameters to > memblock_merge_regions() to indicate the lower and upper boundary to scan. > > Signed-off-by: Peng Zhang > --- > mm/memblock.c | 36 ++++++++++++++++++++++++------------ > 1 file changed, 24 insertions(+), 12 deletions(-) > > diff --git a/mm/memblock.c b/mm/memblock.c > index cb92770ac22e..e19eb08efc73 100644 > --- a/mm/memblock.c > +++ b/mm/memblock.c > @@ -523,15 +523,18 @@ static int __init_memblock memblock_double_array(struct memblock_type *type, > /** > * memblock_merge_regions - merge neighboring compatible regions > * @type: memblock type to scan > - * > - * Scan @type and merge neighboring compatible regions. > + * @start_rgn: start scanning from (@start_rgn - 1) > + * @end_rgn: end scanning at (@end_rgn - 1) > + * Scan @type and merge neighboring compatible regions in [@start_rgn - 1, @end_rgn) > */ > -static void __init_memblock memblock_merge_regions(struct memblock_type *type) > +static void __init_memblock memblock_merge_regions(struct memblock_type *type, > + int start_rgn, > + int end_rgn) Make start_rgn and end_rgn unsigned longs and ... > { > - int i = 0; > + int i = max(start_rgn - 1, 0); ... open code max() as if (start_rgn) i = start_rgn; > - /* cnt never goes below 1 */ > - while (i < type->cnt - 1) { > + end_rgn = min(end_rgn, (int)type->cnt - 1); ... and drop the casting here. > + while (i < end_rgn) { > struct memblock_region *this = &type->regions[i]; > struct memblock_region *next = &type->regions[i + 1]; > > @@ -548,6 +551,7 @@ static void __init_memblock memblock_merge_regions(struct memblock_type *type) > /* move forward from next + 1, index of which is i + 2 */ > memmove(next, next + 1, (type->cnt - (i + 2)) * sizeof(*next)); > type->cnt--; > + end_rgn--; > } > } > > @@ -604,7 +608,7 @@ static int __init_memblock memblock_add_range(struct memblock_type *type, > bool insert = false; > phys_addr_t obase = base; > phys_addr_t end = base + memblock_cap_size(base, &size); > - int idx, start_idx, nr_new; > + int idx, start_idx, nr_new, start_rgn = -1, end_rgn; > struct memblock_region *rgn; > > if (!size) > @@ -659,10 +663,14 @@ static int __init_memblock memblock_add_range(struct memblock_type *type, > #endif > WARN_ON(flags != rgn->flags); > nr_new++; > - if (insert) > + if (insert) { > + if (start_rgn == -1) you can initialize start_rgn with 0 and use if(!start_rgn) here. > + start_rgn = idx; > + end_rgn = idx + 1; > memblock_insert_region(type, idx++, base, > rbase - base, nid, > flags); > + } > } > /* area below @rend is dealt with, forget about it */ > base = min(rend, end); > @@ -671,9 +679,13 @@ static int __init_memblock memblock_add_range(struct memblock_type *type, > /* insert the remaining portion */ > if (base < end) { > nr_new++; > - if (insert) > + if (insert) { > + if (start_rgn == -1) Ditto. > + start_rgn = idx; > + end_rgn = idx + 1; > memblock_insert_region(type, idx, base, end - base, > nid, flags); > + } > } > > if (!nr_new) > @@ -690,7 +702,7 @@ static int __init_memblock memblock_add_range(struct memblock_type *type, > insert = true; > goto repeat; > } else { > - memblock_merge_regions(type); > + memblock_merge_regions(type, start_rgn, end_rgn); > return 0; > } > } > @@ -927,7 +939,7 @@ static int __init_memblock memblock_setclr_flag(phys_addr_t base, > r->flags &= ~flag; > } > > - memblock_merge_regions(type); > + memblock_merge_regions(type, start_rgn, end_rgn); > return 0; > } > > @@ -1300,7 +1312,7 @@ int __init_memblock memblock_set_node(phys_addr_t base, phys_addr_t size, > for (i = start_rgn; i < end_rgn; i++) > memblock_set_region_node(&type->regions[i], nid); > > - memblock_merge_regions(type); > + memblock_merge_regions(type, start_rgn, end_rgn); > #endif > return 0; > } > -- > 2.20.1 > -- Sincerely yours, Mike.