With the new format strings for flags, we can now provide symbolic page and gfp
flags in the /sys/kernel/debug/page_owner file. This replaces the positional
printing of page flags as single letters, which might have looked nicer, but
was limited to a subset of flags, and required the user to remember the
letters.

Example of the adjusted format:

Page allocated via order 0, mask 
0x24213ca(GFP_HIGHUSER_MOVABLE|GFP_COLD|GFP_NOWARN|GFP_NORETRY)
PFN 674308 type Movable Block 1317 type Movable Flags 
0x1fffff80010068(uptodate|lru|active|mappedtodisk)
 [<ffffffff81164e9a>] __alloc_pages_nodemask+0x15a/0xa30
 [<ffffffff811ab938>] alloc_pages_current+0x88/0x120
 [<ffffffff8115bc46>] __page_cache_alloc+0xe6/0x120
 [<ffffffff81168b9b>] __do_page_cache_readahead+0xdb/0x200
 [<ffffffff81168df5>] ondemand_readahead+0x135/0x260
 [<ffffffff81168f8c>] page_cache_async_readahead+0x6c/0x70
 [<ffffffff8115d5f8>] generic_file_read_iter+0x378/0x590
 [<ffffffff811d12a7>] __vfs_read+0xa7/0xd0
Page has been migrated, last migrate reason: compaction

Signed-off-by: Vlastimil Babka <vba...@suse.cz>
Cc: Rasmus Villemoes <li...@rasmusvillemoes.dk>
Cc: Joonsoo Kim <iamjoonsoo....@lge.com>
Cc: Minchan Kim <minc...@kernel.org>
Cc: Sasha Levin <sasha.le...@oracle.com>
Cc: "Kirill A. Shutemov" <kirill.shute...@linux.intel.com>
Cc: Mel Gorman <mgor...@suse.de>
Cc: Michal Hocko <mho...@suse.cz>
---
 mm/page_owner.c | 20 +++++---------------
 1 file changed, 5 insertions(+), 15 deletions(-)

diff --git a/mm/page_owner.c b/mm/page_owner.c
index 313251f36d86..011377548b4f 100644
--- a/mm/page_owner.c
+++ b/mm/page_owner.c
@@ -135,8 +135,9 @@ print_page_owner(char __user *buf, size_t count, unsigned 
long pfn,
                return -ENOMEM;
 
        ret = snprintf(kbuf, count,
-                       "Page allocated via order %u, mask 0x%x\n",
-                       page_ext->order, page_ext->gfp_mask);
+                       "Page allocated via order %u, mask %#x(%pgg)\n",
+                       page_ext->order, page_ext->gfp_mask,
+                       &page_ext->gfp_mask);
 
        if (ret >= count)
                goto err;
@@ -145,23 +146,12 @@ print_page_owner(char __user *buf, size_t count, unsigned 
long pfn,
        pageblock_mt = get_pfnblock_migratetype(page, pfn);
        page_mt  = gfpflags_to_migratetype(page_ext->gfp_mask);
        ret += snprintf(kbuf + ret, count - ret,
-                       "PFN %lu type %s Block %lu type %s Flags 
%s%s%s%s%s%s%s%s%s%s%s%s\n",
+                       "PFN %lu type %s Block %lu type %s Flags %#lx(%pgp)\n",
                        pfn,
                        migratetype_names[page_mt],
                        pfn >> pageblock_order,
                        migratetype_names[pageblock_mt],
-                       PageLocked(page)        ? "K" : " ",
-                       PageError(page)         ? "E" : " ",
-                       PageReferenced(page)    ? "R" : " ",
-                       PageUptodate(page)      ? "U" : " ",
-                       PageDirty(page)         ? "D" : " ",
-                       PageLRU(page)           ? "L" : " ",
-                       PageActive(page)        ? "A" : " ",
-                       PageSlab(page)          ? "S" : " ",
-                       PageWriteback(page)     ? "W" : " ",
-                       PageCompound(page)      ? "C" : " ",
-                       PageSwapCache(page)     ? "B" : " ",
-                       PageMappedToDisk(page)  ? "M" : " ");
+                       page->flags, &page->flags);
 
        if (ret >= count)
                goto err;
-- 
2.6.3

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to