]> git.itanic.dy.fi Git - scan-pagemap/commitdiff
pagemap.h: Implement kpageflag handling code
authorTimo Kokkonen <kaapeli@itanic.dy.fi>
Sun, 29 Aug 2010 10:29:30 +0000 (13:29 +0300)
committerTimo Kokkonen <kaapeli@itanic.dy.fi>
Sun, 29 Aug 2010 10:29:30 +0000 (13:29 +0300)
This code is needed for convenient kpageflag handling.

Signed-off-by: Timo Kokkonen <kaapeli@itanic.dy.fi>
analyze.c
pagemap.h

index fb66dcf95c665bc4d0b1d9271879e5ab5dc3d4f2..1625a24c9cbdabaa7167cb78d0b226b4456d8378 100644 (file)
--- 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)
index ffc55efd5ffb2f60da6b91b6233234968148a3a1..34c5d9483715c9dd2e6a64ce07ef34b8b7d9fd0f 100644 (file)
--- 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;