#define KPF_BYTES 8 #define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) /* copied from kpageflags_read() */ enum { KPF_LOCKED, /* 0 */ KPF_ERROR, /* 1 */ KPF_REFERENCED, /* 2 */ KPF_UPTODATE, /* 3 */ KPF_DIRTY, /* 4 */ KPF_LRU, /* 5 */ KPF_ACTIVE, /* 6 */ KPF_SLAB, /* 7 */ KPF_WRITEBACK, /* 8 */ KPF_RECLAIM, /* 9 */ KPF_BUDDY, /* 10 */ KPF_MMAP, /* 11 */ KPF_SWAPCACHE, /* 12 */ KPF_SWAPBACKED, /* 13 */ KPF_MAPPEDTODISK, /* 14 */ KPF_RESERVED, /* 15 */ KPF_PRIVATE, /* 16 */ KPF_PRIVATE2, /* 17 */ KPF_OWNER_PRIVATE, /* 18 */ KPF_COMPOUND_HEAD, /* 19 */ KPF_COMPOUND_TAIL, /* 20 */ KPF_UNEVICTABLE, /* 21 */ KPF_MLOCKED, /* 22 */ KPF_POISON, /* 23 */ KPF_NOPAGE, /* 24 */ KPF_NUM }; static char *page_flag_names[] = { [KPF_LOCKED] = "L:locked", [KPF_ERROR] = "E:error", [KPF_REFERENCED] = "R:referenced", [KPF_UPTODATE] = "U:uptodate", [KPF_DIRTY] = "D:dirty", [KPF_LRU] = "l:lru", [KPF_ACTIVE] = "A:active", [KPF_SLAB] = "S:slab", [KPF_WRITEBACK] = "W:writeback", [KPF_RECLAIM] = "x:reclaim", [KPF_BUDDY] = "B:buddy", [KPF_RESERVED] = "r:reserved", [KPF_SWAPCACHE] = "c:swapcache", [KPF_SWAPBACKED] = "b:swapbacked", [KPF_MAPPEDTODISK] = "d:mappedtodisk", [KPF_PRIVATE] = "P:private", [KPF_PRIVATE2] = "p:private_2", [KPF_OWNER_PRIVATE] = "O:owner_private", [KPF_COMPOUND_HEAD] = "H:head", [KPF_COMPOUND_TAIL] = "T:tail", [KPF_UNEVICTABLE] = "u:unevictable", [KPF_MLOCKED] = "M:mlocked", [KPF_MMAP] = "m:mmap", [KPF_POISON] = "X:poison", [KPF_NOPAGE] = "n:nopage", }; static unsigned long page_count[(1 << KPF_NUM)]; static unsigned long nr_pages; static uint64_t kpageflags[KPF_BYTES * (16<<20)]; /* 64GB */ char *page_flag_name(uint64_t flags) { int i; static char buf[64]; for (i = 0; i < ARRAY_SIZE(page_flag_names); i++) buf[i] = (flags & (1 << i)) ? page_flag_names[i][0] : '_'; return buf; } char *page_flag_longname(uint64_t flags) { int i, n; static char buf[1024]; for (i = 0, n = 0; i < ARRAY_SIZE(page_flag_names); i++) if (flags & (1<> 10; } static unsigned long pages2mb(unsigned long pages) { return (pages * getpagesize()) >> 20; }