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 mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 515D5C433F5 for ; Mon, 18 Oct 2021 06:13:53 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id CAC7C60F9E for ; Mon, 18 Oct 2021 06:13:52 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org CAC7C60F9E Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=arm.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=kvack.org Received: by kanga.kvack.org (Postfix) id 62751900002; Mon, 18 Oct 2021 02:13:52 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 5D7BA6B0071; Mon, 18 Oct 2021 02:13:52 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 4C5E1900002; Mon, 18 Oct 2021 02:13:52 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0019.hostedemail.com [216.40.44.19]) by kanga.kvack.org (Postfix) with ESMTP id 3CA006B006C for ; Mon, 18 Oct 2021 02:13:52 -0400 (EDT) Received: from smtpin26.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay04.hostedemail.com (Postfix) with ESMTP id D3DCB31EDE for ; Mon, 18 Oct 2021 06:13:51 +0000 (UTC) X-FDA: 78708542262.26.EB2D7D7 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by imf01.hostedemail.com (Postfix) with ESMTP id 141045080CA1 for ; Mon, 18 Oct 2021 06:13:47 +0000 (UTC) Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 77A73106F; Sun, 17 Oct 2021 23:13:50 -0700 (PDT) Received: from [10.163.74.6] (unknown [10.163.74.6]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 1A7783F73D; Sun, 17 Oct 2021 23:13:47 -0700 (PDT) Subject: Re: [PATCH 5/5] vsprintf: Make %pGp print the hex value To: "Matthew Wilcox (Oracle)" , Yafang Shao Cc: Sergey Senozhatsky , Petr Mladek , linux-mm@kvack.org, Vlastimil Babka , Rasmus Villemoes References: <20211012182647.1605095-1-willy@infradead.org> <20211012182647.1605095-6-willy@infradead.org> From: Anshuman Khandual Message-ID: <5c3ac9b8-08d2-00f8-cdfd-79d4f2d29daf@arm.com> Date: Mon, 18 Oct 2021 11:43:46 +0530 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.10.0 MIME-Version: 1.0 In-Reply-To: <20211012182647.1605095-6-willy@infradead.org> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit X-Rspamd-Server: rspam03 X-Rspamd-Queue-Id: 141045080CA1 X-Stat-Signature: 1ft4zecctjn97ikxcizuz65zau1q5qy5 Authentication-Results: imf01.hostedemail.com; dkim=none; dmarc=pass (policy=none) header.from=arm.com; spf=pass (imf01.hostedemail.com: domain of anshuman.khandual@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=anshuman.khandual@arm.com X-HE-Tag: 1634537627-193244 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 10/12/21 11:56 PM, Matthew Wilcox (Oracle) wrote: > All existing users of %pGp want the hex value as well as the decoded > flag names. This looks awkward (passing the same parameter to printf Agreed, it is awkward. Always thought about this, passing the exact same parameter twice for the print functions. > twice), so move that functionality into the core. If we want, we > can make that optional with flag arguments to %pGp in the future. > > Signed-off-by: Matthew Wilcox (Oracle) > --- > lib/test_printf.c | 10 +++++++++- > lib/vsprintf.c | 8 ++++++++ > mm/debug.c | 2 +- > mm/memory-failure.c | 8 ++++---- > mm/page_owner.c | 4 ++-- > mm/slub.c | 4 ++-- > 6 files changed, 26 insertions(+), 10 deletions(-) > > diff --git a/lib/test_printf.c b/lib/test_printf.c > index 662c3785aa57..a60b1a749e87 100644 > --- a/lib/test_printf.c > +++ b/lib/test_printf.c > @@ -613,6 +613,10 @@ page_flags_test(int section, int node, int zone, int last_cpupid, > bool append = false; > int i; > > + for (i = 0; i < ARRAY_SIZE(values); i++) > + page_flags |= (values[i] & pft[i].mask) << pft[i].shift; > + snprintf(cmp_buf + size, BUF_SIZE - size, "%#lx(", page_flags); > + size = strlen(cmp_buf); > if (flags & PAGEFLAGS_MASK) { > snprintf(cmp_buf + size, BUF_SIZE - size, "%s", name); > size = strlen(cmp_buf); > @@ -628,7 +632,6 @@ page_flags_test(int section, int node, int zone, int last_cpupid, > cmp_buf[size] = '\0'; > } > > - page_flags |= (values[i] & pft[i].mask) << pft[i].shift; > snprintf(cmp_buf + size, BUF_SIZE - size, "%s=", pft[i].name); > size = strlen(cmp_buf); > snprintf(cmp_buf + size, BUF_SIZE - size, pft[i].fmt, > @@ -637,6 +640,11 @@ page_flags_test(int section, int node, int zone, int last_cpupid, > append = true; > } > > + if (size < BUF_SIZE) { Should be BUF_SIZE - 1 instead ? But seems like it is still inconclusive whether writing these directly into the buffer, instead of snprintf() is better or not. > + cmp_buf[size++] = ')'; > + cmp_buf[size] = '\0'; > + } > + > test(cmp_buf, "%pGp", &page_flags); > } > > diff --git a/lib/vsprintf.c b/lib/vsprintf.c > index d7ad44f2c8f5..214098248610 100644 > --- a/lib/vsprintf.c > +++ b/lib/vsprintf.c > @@ -2023,6 +2023,11 @@ char *format_page_flags(char *buf, char *end, unsigned long flags) > bool append = false; > int i; > > + buf = number(buf, end, flags, default_flag_spec); > + if (buf < end) > + *buf = '('; > + buf++; > + > /* Page flags from the main area. */ > if (main_flags) { > buf = format_flags(buf, end, main_flags, pageflag_names); > @@ -2051,6 +2056,9 @@ char *format_page_flags(char *buf, char *end, unsigned long flags) > > append = true; > } > + if (buf < end) > + *buf = ')'; > + buf++; > > return buf; > } > diff --git a/mm/debug.c b/mm/debug.c > index fae0f81ad831..714be101dec9 100644 > --- a/mm/debug.c > +++ b/mm/debug.c > @@ -162,7 +162,7 @@ static void __dump_page(struct page *page) > out_mapping: > BUILD_BUG_ON(ARRAY_SIZE(pageflag_names) != __NR_PAGEFLAGS + 1); > > - pr_warn("%sflags: %#lx(%pGp)%s\n", type, head->flags, &head->flags, > + pr_warn("%sflags: %pGp%s\n", type, &head->flags, > page_cma ? " CMA" : ""); > print_hex_dump(KERN_WARNING, "raw: ", DUMP_PREFIX_NONE, 32, > sizeof(unsigned long), page, > diff --git a/mm/memory-failure.c b/mm/memory-failure.c > index 3e6449f2102a..e4e122a2e9b1 100644 > --- a/mm/memory-failure.c > +++ b/mm/memory-failure.c > @@ -2109,14 +2109,14 @@ static int __soft_offline_page(struct page *page) > if (!list_empty(&pagelist)) > putback_movable_pages(&pagelist); > > - pr_info("soft offline: %#lx: %s migration failed %d, type %lx (%pGp)\n", > - pfn, msg_page[huge], ret, page->flags, &page->flags); > + pr_info("soft offline: %#lx: %s migration failed %d, type %pGp\n", > + pfn, msg_page[huge], ret, &page->flags); > if (ret > 0) > ret = -EBUSY; > } > } else { > - pr_info("soft offline: %#lx: %s isolation failed, page count %d, type %lx (%pGp)\n", > - pfn, msg_page[huge], page_count(page), page->flags, &page->flags); > + pr_info("soft offline: %#lx: %s isolation failed, page count %d, type %pGp\n", > + pfn, msg_page[huge], page_count(page), &page->flags); > ret = -EBUSY; > } > return ret; > diff --git a/mm/page_owner.c b/mm/page_owner.c > index 62402d22539b..4afc713ca525 100644 > --- a/mm/page_owner.c > +++ b/mm/page_owner.c > @@ -351,12 +351,12 @@ print_page_owner(char __user *buf, size_t count, unsigned long pfn, > pageblock_mt = get_pageblock_migratetype(page); > page_mt = gfp_migratetype(page_owner->gfp_mask); > ret += snprintf(kbuf + ret, count - ret, > - "PFN %lu type %s Block %lu type %s Flags %#lx(%pGp)\n", > + "PFN %lu type %s Block %lu type %s Flags %pGp\n", > pfn, > migratetype_names[page_mt], > pfn >> pageblock_order, > migratetype_names[pageblock_mt], > - page->flags, &page->flags); > + &page->flags); > > if (ret >= count) > goto err; > diff --git a/mm/slub.c b/mm/slub.c > index 3d2025f7163b..f7ac28646580 100644 > --- a/mm/slub.c > +++ b/mm/slub.c > @@ -763,9 +763,9 @@ void print_tracking(struct kmem_cache *s, void *object) > > static void print_page_info(struct page *page) > { > - pr_err("Slab 0x%p objects=%u used=%u fp=0x%p flags=%#lx(%pGp)\n", > + pr_err("Slab 0x%p objects=%u used=%u fp=0x%p flags=%pGp\n", > page, page->objects, page->inuse, page->freelist, > - page->flags, &page->flags); > + &page->flags); > > } Otherwise this change LGTM.