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;