]> git.itanic.dy.fi Git - scan-pagemap/blobdiff - pagemap.h
pagemap.h: Implement kpageflag handling code
[scan-pagemap] / pagemap.h
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;