From 22caef07f89d1291ae8b297c60d47bdc1193644d Mon Sep 17 00:00:00 2001 From: Timo Kokkonen Date: Sun, 29 Aug 2010 13:29:30 +0300 Subject: [PATCH] pagemap.h: Implement kpageflag handling code This code is needed for convenient kpageflag handling. Signed-off-by: Timo Kokkonen --- analyze.c | 25 +++++++++++++++++++++++++ pagemap.h | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 75 insertions(+) diff --git a/analyze.c b/analyze.c index fb66dcf..1625a24 100644 --- a/analyze.c +++ b/analyze.c @@ -5,6 +5,31 @@ #include "utils.h" #include "bintree.h" +struct kpageflag_str kpageflag_str[] = { + { .flag = LOCKED, .str = "locked", }, + { .flag = ERROR, .str = "error", }, + { .flag = REFERENCED, .str = "referenced", }, + { .flag = UPTODATE, .str = "uptodate", }, + { .flag = DIRTY, .str = "dirty", }, + { .flag = LRU, .str = "lru", }, + { .flag = ACTIVE, .str = "active", }, + { .flag = SLAB, .str = "slab", }, + { .flag = WRITEBACK, .str = "writeback", }, + { .flag = RECLAIM, .str = "reclaim", }, + { .flag = BUDDY, .str = "buddy", }, + { .flag = MMAP, .str = "mmap", }, + { .flag = ANON, .str = "anon", }, + { .flag = SWAPCACHE, .str = "swapcache", }, + { .flag = SWAPBACKED, .str = "swapbacked", }, + { .flag = COMPOUND_HEAD, .str = "compound_head", }, + { .flag = COMPOUND_TAIL, .str = "compound_tail", }, + { .flag = HUGE, .str = "huge", }, + { .flag = UNEVICTABLE, .str = "unevictable", }, + { .flag = HWPOISON, .str = "hwpoison", }, + { .flag = NOPAGE, .str = "nopage", }, + { .flag = KSM, .str = "ksm", }, +}; + #define SI_k 1024ll #define SI_M (SI_k * SI_k) #define SI_G (SI_M * SI_k) diff --git a/pagemap.h b/pagemap.h index ffc55ef..34c5d94 100644 --- a/pagemap.h +++ b/pagemap.h @@ -71,6 +71,56 @@ static inline int swap_offset(struct pageframe *p) return (BITRANGE(5, 54) & p->pf) >> 5; } +#define KPAGEFLAGS_NUM 22 + +enum kpageflags { + LOCKED, + ERROR, + REFERENCED, + UPTODATE, + DIRTY, + LRU, + ACTIVE, + SLAB, + WRITEBACK, + RECLAIM, + BUDDY, + MMAP, + ANON, + SWAPCACHE, + SWAPBACKED, + COMPOUND_HEAD, + COMPOUND_TAIL, + HUGE, + UNEVICTABLE, + HWPOISON, + NOPAGE, + KSM, +}; + +struct kpageflag_str { + int flag; + char *str; +}; + +extern struct kpageflag_str kpageflag_str[]; + +static inline int kpageflag_is_set(struct pageframe *p, int flag) +{ + return !!(BITRANGE(flag, flag) & p->kpageflags); +} + +static inline char *kpageflag_to_str(int flag) +{ + int i; + + for (i = 0; i < KPAGEFLAGS_NUM; i++) + if (kpageflag_str[i].flag == flag) + return kpageflag_str[i].str; + + return NULL; +} + struct maps { struct list_head list; -- 2.45.0