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 933EEC77B7E for ; Sat, 27 May 2023 10:32:48 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 007146B0072; Sat, 27 May 2023 06:32:48 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id EF9F16B0074; Sat, 27 May 2023 06:32:47 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id DE8FB900003; Sat, 27 May 2023 06:32:47 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0014.hostedemail.com [216.40.44.14]) by kanga.kvack.org (Postfix) with ESMTP id CE5D16B0072 for ; Sat, 27 May 2023 06:32:47 -0400 (EDT) Received: from smtpin04.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id 8F4AB1A022B for ; Sat, 27 May 2023 10:32:47 +0000 (UTC) X-FDA: 80835671574.04.324AFC8 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by imf09.hostedemail.com (Postfix) with ESMTP id DA1A2140009 for ; Sat, 27 May 2023 10:32:45 +0000 (UTC) Authentication-Results: imf09.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=ltrf6ZIR; dmarc=pass (policy=none) header.from=kernel.org; spf=pass (imf09.hostedemail.com: domain of rppt@kernel.org designates 139.178.84.217 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=1685183566; 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=nllHXH6wcdA8cDwxIfBM1TlQTDDmP/34oQ3RYv+XOCE=; b=XqmdxfrCSAbkCk0gR/Utmggfzfi9cPDC1NaeNHBxV5i7guXtimVb0rYnF4RzGRBojfrt1+ UsXNYaDrWQ3hvqowJ3y45T3tQ0ucccqc9hELr4aZcvZms0DgMZO3kLn811kqZaRqZ9X6zj 6OzlAkMJD7pUc+ptBFvTIUpyPG1MtxQ= ARC-Authentication-Results: i=1; imf09.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=ltrf6ZIR; dmarc=pass (policy=none) header.from=kernel.org; spf=pass (imf09.hostedemail.com: domain of rppt@kernel.org designates 139.178.84.217 as permitted sender) smtp.mailfrom=rppt@kernel.org ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1685183566; a=rsa-sha256; cv=none; b=D87u06zj5gQ+k5DY3FiXxrQIsjRMgvoi5ai7FYvESCx00lAgMW61fdwI1W1ndgqIgm0yj/ Nj3AWUlXcwJe/gjgEWL6EBjuQ2Xpznq1ZP5PQgiATvtayNW+/JNTitTsoQIbtSkWEOZcrb 8Se79+4RC+hVfsS5SX+lYLpYZGz7yY0= 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 dfw.source.kernel.org (Postfix) with ESMTPS id E1A8960C6D; Sat, 27 May 2023 10:32:44 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 9329AC433EF; Sat, 27 May 2023 10:32:41 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1685183564; bh=dZMArKxP+hfUf5rC1dPqtfwwexQWV16dB2UKVfY1icU=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=ltrf6ZIRLZS/+qei3MCLojOf30hqfmkXcGenQJCW4RGGbwNJQVolarYoHQRCHYJoQ B9vnj6FYa9D2ItKHPxa3ydYe0xbBnQc0fpwEj8zduc4dY6L76vUlQHNppv5EHrRgTi zIG1bY5CMPtL0BCfQMfSx/WXBgyxs3gXq8g6kblg47fH85QVxflNCVAUGKvN6ppTwh 0DG3ziBUErQZ/KHHc219fCSOKsumpDKZmkBRtlKKIx+m+gldvu8WTKd42+2PJNYiNG m5xLyjPzfq0pOnOx+vbBV26H8zXaTm1/WrAYhUdDwG4RGdfDZjNWeqAmR0s3aRzpsR yc2p2WVoIvzDA== Date: Sat, 27 May 2023 13:32:22 +0300 From: Mike Rapoport To: Kefeng Wang Cc: Andrew Morton , linux-mm@kvack.org, linux-kernel@vger.kernel.org, tsahu@linux.ibm.com, anshuman.khandual@arm.com, ssawgyw@gmail.com Subject: Re: [PATCH -next v2] memblock: unify memblock dump and debugfs show Message-ID: <20230527103222.GF4967@kernel.org> References: <20230526120505.123693-1-wangkefeng.wang@huawei.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20230526120505.123693-1-wangkefeng.wang@huawei.com> X-Rspamd-Queue-Id: DA1A2140009 X-Rspam-User: X-Rspamd-Server: rspam05 X-Stat-Signature: hrjpjxr4ohqanq974yerz8tc6n8jamdn X-HE-Tag: 1685183565-316096 X-HE-Meta: U2FsdGVkX19lCglSaW5p6Gwe2MSvezyKbvRR/4Vw6Vt1Iz5JIcIbZ416y5Q3/zjzAvp/SgXojgRX347H1KLnLCDDwmRu1doOzFGsX1E/qwboE7swDwR1hxu4HnxEbdXGoVq4WBg9hNDHKScZGnq5RLXg3JZB1GbB4rNEgyy08b63pGD41qHcqIkyR+hKKp4B1Kf54HchkP1eXU7YUEj4qZNORMH3i9SnTOuhR+2WTW+sUtTIDwoKGV1nJbKXTirNS+JduhV4rs40+KyPvCys5bQ+0mlSr+9oFn+9mMNH9vTnrFU87QCKsIATSx1Z4uDhOrHdCCsnuUDJaQQhW3FXSYN6VPIW3T6h7j+UCO36Cm6858RZgi0YHuzq3a687qKGT35VmFk4Gck9rMbGZsyLy9ksWLvYJ6sDgZtFdqwPs66MasFq9SE4ssOo7rRQHnOTWBLZtudAE8gTFRIjiKpQiem0OTgYEovGzQxqgRR6jkfDGEOkj1Dqv2GFAICzQ3fXiIEp/CI8WtZjvYK0/tKmg3+ZpOyuS727IkBGQZHqDmL0EIuGbLzqZsttiWUaVg/h3A9yXvmYcDfuNDhVrQOKxb134UPXdd1h1d7sQdQ7VjJH9DoE3Wv9kbpbhafaO7Bf/XQl6dhX3ELwnfNX4LL75SiFAWb7VtxixGzVf/Z4QkFIs5wzXmUMEjaOVoCtNYIFQIP5fMJX0RAK+vo84zFRZ7xthKGtzTq/pnMJdtX+arhyMmeDRTbavOQq05KzJgH7xRXd3fpOh5ePj2If+E2naib7Mg7Hnw+HUtCFMszn8GDBxbODf/U3zd+LUKkbvp+3fC5ZC55o1JbpTOTg5CZLJbKIl/dnOFYJuXXh2PjEQvBAs2c6MlATZC/aRL1aQcBMAK5loJHY0fsp6F7P7WZFOEkqefiClvk6lacwGuexKr3zoj+pLvCHdDH1OI+/SH7YY9KSmti0ke+LnPbRdjP q13omA3a 5fmo8GHGs7ZqbFrPuun2xFHj3kYqTUdy5UfQ4CKSzTWMknNZazSzMotFHZiG4/lu9Q6j5gUPhIZa6q6n2FmOxtOxlrAO/ceh3U4hKcOrNFCBE4cMLBSwtkeN85PzHndKDX4YoCWTJ7jYHxETM7vZnCMfiTRumseyOiljeh/PN1ORSafpsIOgi4OPTULkSYM91ytsEg0FOmDv3tfyj0c2SzTYO7RCw+s5zI0KhnVci3bSa6PMSPTn9cA2fbBNxl8anJPtiKAfMgFuRjM5D4hzB9rySbNGT4r5TS0D+Jtzd12j3+fPa20duQk10Dw== 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: Hi Kefeng, On Fri, May 26, 2023 at 08:05:05PM +0800, Kefeng Wang wrote: > There are two interfaces to show the memblock information, memblock_dump_all() > and /sys/kernel/debug/memblock/, but the content is displayed separately, > let's unify them in case of more different changes over time. I don't see much value in this unifications, especially as it must change the format of one of the dumps. Although these are not ABIs, keeping the existing formats seems more important to me that having a single dump function. > Signed-off-by: Kefeng Wang > --- > v2: > - fix wrong count since we add MEMBLOCK_MAX_UNKNOWN > - drop __initdata_memblock for flagname > > include/linux/memblock.h | 1 + > mm/memblock.c | 80 ++++++++++++++++++++-------------------- > 2 files changed, 42 insertions(+), 39 deletions(-) > > diff --git a/include/linux/memblock.h b/include/linux/memblock.h > index f82ee3fac1cd..d68826e8c97b 100644 > --- a/include/linux/memblock.h > +++ b/include/linux/memblock.h > @@ -47,6 +47,7 @@ enum memblock_flags { > MEMBLOCK_MIRROR = 0x2, /* mirrored region */ > MEMBLOCK_NOMAP = 0x4, /* don't add to kernel direct mapping */ > MEMBLOCK_DRIVER_MANAGED = 0x8, /* always detected via a driver */ > + MEMBLOCK_MAX_UNKNOWN = 0x10, /* unknow flags */ > }; > > /** > diff --git a/mm/memblock.c b/mm/memblock.c > index c5c80d9bcea3..04eb7c665026 100644 > --- a/mm/memblock.c > +++ b/mm/memblock.c > @@ -1899,16 +1899,35 @@ phys_addr_t __init_memblock memblock_get_current_limit(void) > return memblock.current_limit; > } > > -static void __init_memblock memblock_dump(struct memblock_type *type) > +#define memblock_printf(m, to_dmesg, fmt, args...) \ > +({ \ > + if (to_dmesg) \ > + pr_info(fmt, ##args); \ > + else \ > + seq_printf(m, fmt, ##args); \ > +}) > + > +static const char * const flagname[] = { > + [ilog2(MEMBLOCK_HOTPLUG)] = "HOTPLUG", > + [ilog2(MEMBLOCK_MIRROR)] = "MIRROR", > + [ilog2(MEMBLOCK_NOMAP)] = "NOMAP", > + [ilog2(MEMBLOCK_DRIVER_MANAGED)] = "DRV_MNG", > + [ilog2(MEMBLOCK_MAX_UNKNOWN)] = "UNKNOWN", > +}; > + > +static void __init_memblock memblock_dump(struct memblock_type *type, > + struct seq_file *m, bool to_dmesg) > { > + unsigned count = ARRAY_SIZE(flagname) - 1; > phys_addr_t base, end, size; > enum memblock_flags flags; > - int idx; > struct memblock_region *rgn; > + int idx, i; > > - pr_info(" %s.cnt = 0x%lx\n", type->name, type->cnt); > + memblock_printf(m, to_dmesg, " %s.cnt = 0x%lx\n", type->name, type->cnt); > > for_each_memblock_type(idx, type, rgn) { > + const char *fp = "NONE"; > char nid_buf[32] = ""; > > base = rgn->base; > @@ -1920,8 +1939,19 @@ static void __init_memblock memblock_dump(struct memblock_type *type) > snprintf(nid_buf, sizeof(nid_buf), " on node %d", > memblock_get_region_node(rgn)); > #endif > - pr_info(" %s[%#x]\t[%pa-%pa], %pa bytes%s flags: %#x\n", > - type->name, idx, &base, &end, &size, nid_buf, flags); > + if (flags) { > + fp = flagname[count]; > + > + for (i = 0; i < count; i++) { > + if (flags & (1U << i)) { > + fp = flagname[i]; > + break; > + } > + } > + } > + > + memblock_printf(m, to_dmesg, " %s[%#x]\t[%pa-%pa], %pa bytes%s flags: %s\n", > + type->name, idx, &base, &end, &size, nid_buf, fp); > } > } > > @@ -1932,10 +1962,10 @@ static void __init_memblock __memblock_dump_all(void) > &memblock.memory.total_size, > &memblock.reserved.total_size); > > - memblock_dump(&memblock.memory); > - memblock_dump(&memblock.reserved); > + memblock_dump(&memblock.memory, NULL, true); > + memblock_dump(&memblock.reserved, NULL, true); > #ifdef CONFIG_HAVE_MEMBLOCK_PHYS_MAP > - memblock_dump(&physmem); > + memblock_dump(&physmem, NULL, true); > #endif > } > > @@ -2158,41 +2188,13 @@ void __init memblock_free_all(void) > } > > #if defined(CONFIG_DEBUG_FS) && defined(CONFIG_ARCH_KEEP_MEMBLOCK) > -static const char * const flagname[] = { > - [ilog2(MEMBLOCK_HOTPLUG)] = "HOTPLUG", > - [ilog2(MEMBLOCK_MIRROR)] = "MIRROR", > - [ilog2(MEMBLOCK_NOMAP)] = "NOMAP", > - [ilog2(MEMBLOCK_DRIVER_MANAGED)] = "DRV_MNG", > -}; > > static int memblock_debug_show(struct seq_file *m, void *private) > { > struct memblock_type *type = m->private; > - struct memblock_region *reg; > - int i, j; > - unsigned int count = ARRAY_SIZE(flagname); > - phys_addr_t end; > - > - for (i = 0; i < type->cnt; i++) { > - reg = &type->regions[i]; > - end = reg->base + reg->size - 1; > - > - seq_printf(m, "%4d: ", i); > - seq_printf(m, "%pa..%pa ", ®->base, &end); > - seq_printf(m, "%4d ", memblock_get_region_node(reg)); > - if (reg->flags) { > - for (j = 0; j < count; j++) { > - if (reg->flags & (1U << j)) { > - seq_printf(m, "%s\n", flagname[j]); > - break; > - } > - } > - if (j == count) > - seq_printf(m, "%s\n", "UNKNOWN"); > - } else { > - seq_printf(m, "%s\n", "NONE"); > - } > - } > + > + memblock_dump(type, m, false); > + > return 0; > } > DEFINE_SHOW_ATTRIBUTE(memblock_debug); > -- > 2.35.3 > -- Sincerely yours, Mike.