mmflags.h: use less error prone method to define pageflag_names
Patch series "mm, printk: introduce new format for page_type", v4. This series moves PG_slab page flag to page_type, freeing one bit in page->flags and introduces %pGt format that prints human-readable page_type like %pGp for printing page flags. See changelog of patch 2 for more implementation details. Thanks everyone that gave valuable comments. This patch (of 3): Use helper macro to decrease chances of typo when defining pageflag_names. Link: https://lkml.kernel.org/r/20230130042514.2418-1-42.hyeyoo@gmail.com Link: https://lore.kernel.org/lkml/Y6AycLbpjVzXM5I9@smile.fi.intel.com Link: https://lkml.kernel.org/r/20230130042514.2418-2-42.hyeyoo@gmail.com Signed-off-by: Hyeonggon Yoo <42.hyeyoo@gmail.com> Suggested-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> Cc: David Hildenbrand <david@redhat.com> Cc: Joe Perches <joe@perches.com> Cc: Matthew Wilcox <willy@infradead.org> Cc: Petr Mladek <pmladek@suse.com> Cc: Steven Rostedt (Google) <rostedt@goodmis.org> Cc: Vlastimil Babka <vbabka@suse.cz> Cc: Sergey Senozhatsky <senozhatsky@chromium.org> Cc: Steven Rostedt <rostedt@goodmis.org> Cc: John Ogness <john.ogness@linutronix.de> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
parent
739100c88f
commit
e26fcc02c7
|
@ -67,71 +67,74 @@
|
|||
) : "none"
|
||||
|
||||
#ifdef CONFIG_MMU
|
||||
#define IF_HAVE_PG_MLOCK(flag,string) ,{1UL << flag, string}
|
||||
#define IF_HAVE_PG_MLOCK(_name) ,{1UL << PG_##_name, __stringify(_name)}
|
||||
#else
|
||||
#define IF_HAVE_PG_MLOCK(flag,string)
|
||||
#define IF_HAVE_PG_MLOCK(_name)
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_ARCH_USES_PG_UNCACHED
|
||||
#define IF_HAVE_PG_UNCACHED(flag,string) ,{1UL << flag, string}
|
||||
#define IF_HAVE_PG_UNCACHED(_name) ,{1UL << PG_##_name, __stringify(_name)}
|
||||
#else
|
||||
#define IF_HAVE_PG_UNCACHED(flag,string)
|
||||
#define IF_HAVE_PG_UNCACHED(_name)
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_MEMORY_FAILURE
|
||||
#define IF_HAVE_PG_HWPOISON(flag,string) ,{1UL << flag, string}
|
||||
#define IF_HAVE_PG_HWPOISON(_name) ,{1UL << PG_##_name, __stringify(_name)}
|
||||
#else
|
||||
#define IF_HAVE_PG_HWPOISON(flag,string)
|
||||
#define IF_HAVE_PG_HWPOISON(_name)
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_PAGE_IDLE_FLAG) && defined(CONFIG_64BIT)
|
||||
#define IF_HAVE_PG_IDLE(flag,string) ,{1UL << flag, string}
|
||||
#define IF_HAVE_PG_IDLE(_name) ,{1UL << PG_##_name, __stringify(_name)}
|
||||
#else
|
||||
#define IF_HAVE_PG_IDLE(flag,string)
|
||||
#define IF_HAVE_PG_IDLE(_name)
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_ARCH_USES_PG_ARCH_X
|
||||
#define IF_HAVE_PG_ARCH_X(flag,string) ,{1UL << flag, string}
|
||||
#define IF_HAVE_PG_ARCH_X(_name) ,{1UL << PG_##_name, __stringify(_name)}
|
||||
#else
|
||||
#define IF_HAVE_PG_ARCH_X(flag,string)
|
||||
#define IF_HAVE_PG_ARCH_X(_name)
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_KASAN_HW_TAGS
|
||||
#define IF_HAVE_PG_SKIP_KASAN_POISON(flag,string) ,{1UL << flag, string}
|
||||
#define IF_HAVE_PG_SKIP_KASAN_POISON(_name) \
|
||||
,{1UL << PG_##_name, __stringify(_name)}
|
||||
#else
|
||||
#define IF_HAVE_PG_SKIP_KASAN_POISON(flag,string)
|
||||
#define IF_HAVE_PG_SKIP_KASAN_POISON(_name)
|
||||
#endif
|
||||
|
||||
#define DEF_PAGEFLAG_NAME(_name) { 1UL << PG_##_name, __stringify(_name) }
|
||||
|
||||
#define __def_pageflag_names \
|
||||
{1UL << PG_locked, "locked" }, \
|
||||
{1UL << PG_waiters, "waiters" }, \
|
||||
{1UL << PG_error, "error" }, \
|
||||
{1UL << PG_referenced, "referenced" }, \
|
||||
{1UL << PG_uptodate, "uptodate" }, \
|
||||
{1UL << PG_dirty, "dirty" }, \
|
||||
{1UL << PG_lru, "lru" }, \
|
||||
{1UL << PG_active, "active" }, \
|
||||
{1UL << PG_workingset, "workingset" }, \
|
||||
{1UL << PG_slab, "slab" }, \
|
||||
{1UL << PG_owner_priv_1, "owner_priv_1" }, \
|
||||
{1UL << PG_arch_1, "arch_1" }, \
|
||||
{1UL << PG_reserved, "reserved" }, \
|
||||
{1UL << PG_private, "private" }, \
|
||||
{1UL << PG_private_2, "private_2" }, \
|
||||
{1UL << PG_writeback, "writeback" }, \
|
||||
{1UL << PG_head, "head" }, \
|
||||
{1UL << PG_mappedtodisk, "mappedtodisk" }, \
|
||||
{1UL << PG_reclaim, "reclaim" }, \
|
||||
{1UL << PG_swapbacked, "swapbacked" }, \
|
||||
{1UL << PG_unevictable, "unevictable" } \
|
||||
IF_HAVE_PG_MLOCK(PG_mlocked, "mlocked" ) \
|
||||
IF_HAVE_PG_UNCACHED(PG_uncached, "uncached" ) \
|
||||
IF_HAVE_PG_HWPOISON(PG_hwpoison, "hwpoison" ) \
|
||||
IF_HAVE_PG_IDLE(PG_young, "young" ) \
|
||||
IF_HAVE_PG_IDLE(PG_idle, "idle" ) \
|
||||
IF_HAVE_PG_ARCH_X(PG_arch_2, "arch_2" ) \
|
||||
IF_HAVE_PG_ARCH_X(PG_arch_3, "arch_3" ) \
|
||||
IF_HAVE_PG_SKIP_KASAN_POISON(PG_skip_kasan_poison, "skip_kasan_poison")
|
||||
DEF_PAGEFLAG_NAME(locked), \
|
||||
DEF_PAGEFLAG_NAME(waiters), \
|
||||
DEF_PAGEFLAG_NAME(error), \
|
||||
DEF_PAGEFLAG_NAME(referenced), \
|
||||
DEF_PAGEFLAG_NAME(uptodate), \
|
||||
DEF_PAGEFLAG_NAME(dirty), \
|
||||
DEF_PAGEFLAG_NAME(lru), \
|
||||
DEF_PAGEFLAG_NAME(active), \
|
||||
DEF_PAGEFLAG_NAME(workingset), \
|
||||
DEF_PAGEFLAG_NAME(slab), \
|
||||
DEF_PAGEFLAG_NAME(owner_priv_1), \
|
||||
DEF_PAGEFLAG_NAME(arch_1), \
|
||||
DEF_PAGEFLAG_NAME(reserved), \
|
||||
DEF_PAGEFLAG_NAME(private), \
|
||||
DEF_PAGEFLAG_NAME(private_2), \
|
||||
DEF_PAGEFLAG_NAME(writeback), \
|
||||
DEF_PAGEFLAG_NAME(head), \
|
||||
DEF_PAGEFLAG_NAME(mappedtodisk), \
|
||||
DEF_PAGEFLAG_NAME(reclaim), \
|
||||
DEF_PAGEFLAG_NAME(swapbacked), \
|
||||
DEF_PAGEFLAG_NAME(unevictable) \
|
||||
IF_HAVE_PG_MLOCK(mlocked) \
|
||||
IF_HAVE_PG_UNCACHED(uncached) \
|
||||
IF_HAVE_PG_HWPOISON(hwpoison) \
|
||||
IF_HAVE_PG_IDLE(idle) \
|
||||
IF_HAVE_PG_IDLE(young) \
|
||||
IF_HAVE_PG_ARCH_X(arch_2) \
|
||||
IF_HAVE_PG_ARCH_X(arch_3) \
|
||||
IF_HAVE_PG_SKIP_KASAN_POISON(skip_kasan_poison)
|
||||
|
||||
#define show_page_flags(flags) \
|
||||
(flags) ? __print_flags(flags, "|", \
|
||||
|
|
Loading…
Reference in New Issue