From patchwork Fri Jan 13 08:26:59 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peng Zhang X-Patchwork-Id: 13100246 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 D9E8CC678D8 for ; Fri, 13 Jan 2023 08:27:19 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 6835B8E0006; Fri, 13 Jan 2023 03:27:19 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 6332D8E0001; Fri, 13 Jan 2023 03:27:19 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 4FAA48E0006; Fri, 13 Jan 2023 03:27:19 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id 42FDB8E0001 for ; Fri, 13 Jan 2023 03:27:19 -0500 (EST) Received: from smtpin14.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id 223B11C5C10 for ; Fri, 13 Jan 2023 08:27:19 +0000 (UTC) X-FDA: 80349096198.14.C885791 Received: from mail-pl1-f174.google.com (mail-pl1-f174.google.com [209.85.214.174]) by imf11.hostedemail.com (Postfix) with ESMTP id 7A31B40002 for ; Fri, 13 Jan 2023 08:27:17 +0000 (UTC) Authentication-Results: imf11.hostedemail.com; dkim=pass header.d=bytedance-com.20210112.gappssmtp.com header.s=20210112 header.b=MpnWYaJF; dmarc=pass (policy=none) header.from=bytedance.com; spf=pass (imf11.hostedemail.com: domain of zhangpeng.00@bytedance.com designates 209.85.214.174 as permitted sender) smtp.mailfrom=zhangpeng.00@bytedance.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1673598437; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=Q4Az0GQIpAo5qLK4eslBRX7WJSl1cxutE/mioG/uZxc=; b=1IyRgvzIsO/ZeD1hSkOPgXHgeEHlmhN5DCGxt20QDabpDmV0m1SNTHoO8kbxYJYMGVIcXv ViTVZkFne5oV/DUxo5yruw0cnDe/7A3DTZmTTVGu1A9GOV+48jmifGzHirQ1+zfhkl7x78 gYjjJttkHDqsPVpZky/iinmspizukXQ= ARC-Authentication-Results: i=1; imf11.hostedemail.com; dkim=pass header.d=bytedance-com.20210112.gappssmtp.com header.s=20210112 header.b=MpnWYaJF; dmarc=pass (policy=none) header.from=bytedance.com; spf=pass (imf11.hostedemail.com: domain of zhangpeng.00@bytedance.com designates 209.85.214.174 as permitted sender) smtp.mailfrom=zhangpeng.00@bytedance.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1673598437; a=rsa-sha256; cv=none; b=uBkKlCU7OKtQuPbVtb2VNILGEzk7Ts3WJxpmDRbzMdZ0fxUWSTd/4Skuwbu/f7stTcgEb7 DEBn6Bf+fXtbCBSjCgcVd1XHanzO7RvrSz+WalIGJV3zhLLZ1bXQUItK7Ljv4m9tmXtUnu IlhmQtG6jxHiAcmwYaHsW2oAH4TeIUU= Received: by mail-pl1-f174.google.com with SMTP id d9so22733423pll.9 for ; Fri, 13 Jan 2023 00:27:17 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance-com.20210112.gappssmtp.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=Q4Az0GQIpAo5qLK4eslBRX7WJSl1cxutE/mioG/uZxc=; b=MpnWYaJF2T4qlC9e913gYzl9AiD8aMnsvQKAqLMg1yjsF0soBswn5aF6VSp72MhgAY 2g1ioFdZFpeEptHS5Sm2x3Qgtz45T3zAYavuNbvTxLAbmG/8Up0DSPdD6FjIMBbuf++z dD5W8xWo6PA1QZ67Tit3KfPwWe/sqvW96xIpG/jn+owrIeO3WTd3MetvHFgZ7sDV1+XV owF5gECfqxzfyOuGrjseOKHUtJEzOhq02ccaTKLB5WdzfWOYT3DnaniY/u5eJALne30V 10JMG9ugSSxV3R/E/LOj1nLFQefTA2CuZIUEfsE/GV68ojR8OnoK2zg8HWRRwTnyD2+X KyaQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Q4Az0GQIpAo5qLK4eslBRX7WJSl1cxutE/mioG/uZxc=; b=B1IaLww+JGRxWhdSsC5SCGfuD5lBNvRLh6Dc8DUaww4gO/Mauwbg28hu+RGr3zlnqf uTJsMWLtnmU7cVZZjoIVZ6y0cuezrEZQ2xj99nsVf1UBOCSwWmQO9CisKsFEgVeyu75W /4qjxnmUVeU7n8fxPHcv+sFtCplq/qdZWoReIik9Xs5frMNvvm4pYv5VhIYVCCBt40es ABpMITMPg6BWeH6QNNqZYek1EdvAdfI7o+n5qDamXFZ3Fl7qIXP1bgY/SvkKkxAbDwY7 oLTpo9WHV8XtiFhVwvT/UaucseB9VSrxUeo9ZVj+HRq4LFXhsFLeLnNHA1NLWqF+XRsZ JCPg== X-Gm-Message-State: AFqh2kqaVBn/FSmHloWTdXnj7n4JhOH8fTaXop3TOq1l8g8QjQ2h/am+ gKAgcON+lWMzMud9UJhs0WFAQQ== X-Google-Smtp-Source: AMrXdXvRnSFAvuVDnwL5a9P9gCpjSMEYNO2QmBFJKhOEtNTetuC8pqV8Qm9f2UXHHySTaHSwQvLUag== X-Received: by 2002:a05:6a20:9f48:b0:ac:29b6:a235 with SMTP id ml8-20020a056a209f4800b000ac29b6a235mr91778538pzb.54.1673598436328; Fri, 13 Jan 2023 00:27:16 -0800 (PST) Received: from GL4FX4PXWL.bytedance.net ([139.177.225.251]) by smtp.gmail.com with ESMTPSA id l123-20020a622581000000b005818d429d98sm13092738pfl.136.2023.01.13.00.27.13 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Fri, 13 Jan 2023 00:27:16 -0800 (PST) From: Peng Zhang To: rppt@kernel.org, akpm@linux-foundation.org Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org, Peng Zhang Subject: [PATCH 3/3] memblock: Avoid useless checks in memblock_merge_regions(). Date: Fri, 13 Jan 2023 16:26:59 +0800 Message-Id: <20230113082659.65276-4-zhangpeng.00@bytedance.com> X-Mailer: git-send-email 2.37.0 (Apple Git-136) In-Reply-To: <20230113082659.65276-1-zhangpeng.00@bytedance.com> References: <20230113082659.65276-1-zhangpeng.00@bytedance.com> MIME-Version: 1.0 X-Rspamd-Queue-Id: 7A31B40002 X-Rspamd-Server: rspam09 X-Rspam-User: X-Stat-Signature: iwoqefwcryjpdw1c73gfnrxpobd8r7fz X-HE-Tag: 1673598437-355427 X-HE-Meta: U2FsdGVkX1/w9KbA9VylYWrTwSvPwabRECVwdD++CqofRcWcptFFVWHN69lVGzsKABj/P8U4xdET2wwPitOwMW1wujKpfHl7fvoPglw/uqjr0QmbOW64vU+RmTnU0JF+xpJY5Tv+D+f0Ygv8aaOKKTJpafed4XIzERIoEoWO7lUqgvdOae+HQrJnrKfaCeLPna5BHG5NdvXBTelS4qaDcE0TjgQLuDfTfVHmqKaUj95Wfbo5MUyMfc1+9iVCpuHMLsMEdKlsdQ0O4K9Hid78WpZcm41pqElJa6ORS2rZpn+SXU4qTnNAynx+k/3XauvbrmtQSNiZAOMMtVN/zX/6Gf0tZr03Ma/8FIzTRmwpxTedaaZmUj1BA0+49zs2bBKz82QTYXjYsG2SfJdSNvOFplr/mhPRSFY8Z37ofXbGAPSXDhXJ8z+IZ3JFdTdJg9O5qIADi7qQMdxiALTwkqTQFLJgy91xVmiadLKSUx1ak7r3naLVr6ZT9cU2DRjfogbj8UbO1yGY4lGK0Zi3LVBlBkAiqFMxudhJ4QAinSqqZX80huxdMejP+IxoOHnRE1C8aYb1WTly5Jls0gAptwIWvTt2HjK5PymPKQi05DhUgJAGFuBz2L4PV+qrv9Y9CbA2EKr901pL+4Yw1NBc14i+Im7W0qaw9cbiJr/Bhrpe2QY9fAEz//s/4EMlCLI339MKIVeZcUQsQsIMH7t+F/VCOUIYF09XNxMJHEvZWLCJwB6BRLZzU3mbHH30eGrEJey1X7F9n3jRUO5n+LsghiQuCDx8sY2Y8KzIvf3KJCZsFFmQWMX+pl1C10cHuC7DE5Q3gjG+NH8TqZlxZ0jy69q94D3TyVCvs5Bcnsb7n6PGe03QM/0C+947PKRfxy7fW7yWPLQXNMyPUMH3H8UkBT5IQgVvLY2UEYaQ3kRj13SiF2dHYQfPI70i86vezNBN8Tf7vH2dKgEv9juWzLSRkkr mBD8urNv QDLj2XtvK7AQTbqTPbEoeR5Ymm1V5LO7W2AheSVrC5sj+sYLOCuUCpc6ruVI2SWbF8rMFaDHZDJTNDI/C58qGuLYsw15ctYCvjbg5tDYZCfKY11WQnZYE5vHb+5AbGFrUCBXY/op2krqGuxtr2qjbn3bvpJtrBpaYq1MqnXHru1iRMYamX1NcBbRYdxK11Am70uZGH/Ha20Kz+KjXYHgc4r9AVGfA958nJvY+UsGVLI9ouImTNeYQbL3gzA== X-Bogosity: Ham, tests=bogofilter, spamicity=0.006505, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: 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) { - int i = 0; + int i = max(start_rgn - 1, 0); - /* cnt never goes below 1 */ - while (i < type->cnt - 1) { + end_rgn = min(end_rgn, (int)type->cnt - 1); + 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) + 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) + 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; }