]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
printf: remove %pGt support
authorMatthew Wilcox (Oracle) <willy@infradead.org>
Wed, 21 Aug 2024 17:39:09 +0000 (18:39 +0100)
committerAndrew Morton <akpm@linux-foundation.org>
Wed, 4 Sep 2024 04:15:42 +0000 (21:15 -0700)
Patch series "Increase the number of bits available in page_type".

Kent wants more than 16 bits in page_type, so I resurrected this old patch
and expanded it a bit.  It's a bit more efficient than our current scheme
(1 4-byte insn vs 3 insns of 13 bytes total) to test a single page type.

This patch (of 4):

An upcoming patch will convert page type from being a bitfield to a
single byte, so we will not be able to use %pG to print the page type
any more.  The printing of the symbolic name will be restored in that
patch.

Link: https://lkml.kernel.org/r/20240821173914.2270383-1-willy@infradead.org
Link: https://lkml.kernel.org/r/20240821173914.2270383-2-willy@infradead.org
Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
Acked-by: David Hildenbrand <david@redhat.com>
Cc: Hyeonggon Yoo <42.hyeyoo@gmail.com>
Cc: Kent Overstreet <kent.overstreet@linux.dev>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Documentation/core-api/printk-formats.rst
include/trace/events/mmflags.h
lib/test_printf.c
lib/vsprintf.c
mm/debug.c
mm/internal.h

index 4451ef501936133998b059d5b0482328845e02ba..14e093da3ccd934230d89fd4a69800d1e6b3edcd 100644 (file)
@@ -576,13 +576,12 @@ The field width is passed by value, the bitmap is passed by reference.
 Helper macros cpumask_pr_args() and nodemask_pr_args() are available to ease
 printing cpumask and nodemask.
 
-Flags bitfields such as page flags, page_type, gfp_flags
+Flags bitfields such as page flags and gfp_flags
 --------------------------------------------------------
 
 ::
 
        %pGp    0x17ffffc0002036(referenced|uptodate|lru|active|private|node=0|zone=2|lastcpupid=0x1fffff)
-       %pGt    0xffffff7f(buddy)
        %pGg    GFP_USER|GFP_DMA32|GFP_NOWARN
        %pGv    read|exec|mayread|maywrite|mayexec|denywrite
 
@@ -591,7 +590,6 @@ would construct the value. The type of flags is given by the third
 character. Currently supported are:
 
         - p - [p]age flags, expects value of type (``unsigned long *``)
-        - t - page [t]ype, expects value of type (``unsigned int *``)
         - v - [v]ma_flags, expects value of type (``unsigned long *``)
         - g - [g]fp_flags, expects value of type (``gfp_t *``)
 
index b5c4da370a50109fc4f9b80d5707a33b0d56ca04..c151cc21d367a723d5e005183596762b7c5f445f 100644 (file)
@@ -130,16 +130,6 @@ IF_HAVE_PG_ARCH_X(arch_3)
        __def_pageflag_names                                            \
        ) : "none"
 
-#define DEF_PAGETYPE_NAME(_name) { PG_##_name, __stringify(_name) }
-
-#define __def_pagetype_names                                           \
-       DEF_PAGETYPE_NAME(slab),                                        \
-       DEF_PAGETYPE_NAME(hugetlb),                                     \
-       DEF_PAGETYPE_NAME(offline),                                     \
-       DEF_PAGETYPE_NAME(guard),                                       \
-       DEF_PAGETYPE_NAME(table),                                       \
-       DEF_PAGETYPE_NAME(buddy)
-
 #if defined(CONFIG_X86)
 #define __VM_ARCH_SPECIFIC_1 {VM_PAT,     "pat"           }
 #elif defined(CONFIG_PPC)
index 965cb6f2852722d01f59b93c5c3c5c7fd5f87a7d..8448b6d02bd96741078c82c6a99282dadb651e05 100644 (file)
@@ -641,26 +641,12 @@ page_flags_test(int section, int node, int zone, int last_cpupid,
        test(cmp_buf, "%pGp", &flags);
 }
 
-static void __init page_type_test(unsigned int page_type, const char *name,
-                                 char *cmp_buf)
-{
-       unsigned long size;
-
-       size = scnprintf(cmp_buf, BUF_SIZE, "%#x(", page_type);
-       if (page_type_has_type(page_type))
-               size += scnprintf(cmp_buf + size, BUF_SIZE - size, "%s", name);
-
-       snprintf(cmp_buf + size, BUF_SIZE - size, ")");
-       test(cmp_buf, "%pGt", &page_type);
-}
-
 static void __init
 flags(void)
 {
        unsigned long flags;
        char *cmp_buffer;
        gfp_t gfp;
-       unsigned int page_type;
 
        cmp_buffer = kmalloc(BUF_SIZE, GFP_KERNEL);
        if (!cmp_buffer)
@@ -700,18 +686,6 @@ flags(void)
        gfp |= __GFP_HIGH;
        test(cmp_buffer, "%pGg", &gfp);
 
-       page_type = ~0;
-       page_type_test(page_type, "", cmp_buffer);
-
-       page_type = 10;
-       page_type_test(page_type, "", cmp_buffer);
-
-       page_type = ~PG_buddy;
-       page_type_test(page_type, "buddy", cmp_buffer);
-
-       page_type = ~(PG_table | PG_buddy);
-       page_type_test(page_type, "table|buddy", cmp_buffer);
-
        kfree(cmp_buffer);
 }
 
index 2d71b11159161b122bceb4131c46ca9ac37f282f..09f022ba1c0538b459fc5e3563b3d6f63e4621ae 100644 (file)
@@ -2054,25 +2054,6 @@ char *format_page_flags(char *buf, char *end, unsigned long flags)
        return buf;
 }
 
-static
-char *format_page_type(char *buf, char *end, unsigned int page_type)
-{
-       buf = number(buf, end, page_type, default_flag_spec);
-
-       if (buf < end)
-               *buf = '(';
-       buf++;
-
-       if (page_type_has_type(page_type))
-               buf = format_flags(buf, end, ~page_type, pagetype_names);
-
-       if (buf < end)
-               *buf = ')';
-       buf++;
-
-       return buf;
-}
-
 static noinline_for_stack
 char *flags_string(char *buf, char *end, void *flags_ptr,
                   struct printf_spec spec, const char *fmt)
@@ -2086,8 +2067,6 @@ char *flags_string(char *buf, char *end, void *flags_ptr,
        switch (fmt[1]) {
        case 'p':
                return format_page_flags(buf, end, *(unsigned long *)flags_ptr);
-       case 't':
-               return format_page_type(buf, end, *(unsigned int *)flags_ptr);
        case 'v':
                flags = *(unsigned long *)flags_ptr;
                names = vmaflag_names;
index 69e524c3e6012ee78773730f3dd6bbabd9b2cb5a..9f8e345379577b461b2a175cae1571a0911e30dc 100644 (file)
@@ -92,7 +92,7 @@ static void __dump_folio(struct folio *folio, struct page *page,
        pr_warn("%sflags: %pGp%s\n", type, &folio->flags,
                is_migrate_cma_folio(folio, pfn) ? " CMA" : "");
        if (page_has_type(&folio->page))
-               pr_warn("page_type: %pGt\n", &folio->page.page_type);
+               pr_warn("page_type: %x\n", folio->page.page_type);
 
        print_hex_dump(KERN_WARNING, "raw: ", DUMP_PREFIX_NONE, 32,
                        sizeof(unsigned long), page,
index 82fb9f1b0cd4f9d23f261acb14a109325f6d576f..5e6f2abcea28e2bc055321842f5ef8a2240b5d50 100644 (file)
@@ -1144,7 +1144,6 @@ static inline void flush_tlb_batched_pending(struct mm_struct *mm)
 #endif /* CONFIG_ARCH_WANT_BATCHED_UNMAP_TLB_FLUSH */
 
 extern const struct trace_print_flags pageflag_names[];
-extern const struct trace_print_flags pagetype_names[];
 extern const struct trace_print_flags vmaflag_names[];
 extern const struct trace_print_flags gfpflag_names[];