Merge branch 'omap-for-v3.17/dt' into omap-for-v3.18/dt
[sfrench/cifs-2.6.git] / include / linux / page_cgroup.h
index 777a524716db9364d3f9a06f9357cacf36b2b418..5c831f1eca798d06e35c02c32e29353cc511d74e 100644 (file)
@@ -3,17 +3,15 @@
 
 enum {
        /* flags for mem_cgroup */
-       PCG_LOCK,  /* Lock for pc->mem_cgroup and following bits. */
-       PCG_USED, /* this object is in use. */
-       PCG_MIGRATION, /* under page migration */
-       __NR_PCG_FLAGS,
+       PCG_USED = 0x01,        /* This page is charged to a memcg */
+       PCG_MEM = 0x02,         /* This page holds a memory charge */
+       PCG_MEMSW = 0x04,       /* This page holds a memory+swap charge */
 };
 
-#ifndef __GENERATING_BOUNDS_H
-#include <generated/bounds.h>
+struct pglist_data;
 
 #ifdef CONFIG_MEMCG
-#include <linux/bit_spinlock.h>
+struct mem_cgroup;
 
 /*
  * Page Cgroup can be considered as an extended mem_map.
@@ -27,65 +25,30 @@ struct page_cgroup {
        struct mem_cgroup *mem_cgroup;
 };
 
-void __meminit pgdat_page_cgroup_init(struct pglist_data *pgdat);
+extern void pgdat_page_cgroup_init(struct pglist_data *pgdat);
 
 #ifdef CONFIG_SPARSEMEM
-static inline void __init page_cgroup_init_flatmem(void)
+static inline void page_cgroup_init_flatmem(void)
 {
 }
-extern void __init page_cgroup_init(void);
+extern void page_cgroup_init(void);
 #else
-void __init page_cgroup_init_flatmem(void);
-static inline void __init page_cgroup_init(void)
+extern void page_cgroup_init_flatmem(void);
+static inline void page_cgroup_init(void)
 {
 }
 #endif
 
 struct page_cgroup *lookup_page_cgroup(struct page *page);
-struct page *lookup_cgroup_page(struct page_cgroup *pc);
-
-#define TESTPCGFLAG(uname, lname)                      \
-static inline int PageCgroup##uname(struct page_cgroup *pc)    \
-       { return test_bit(PCG_##lname, &pc->flags); }
-
-#define SETPCGFLAG(uname, lname)                       \
-static inline void SetPageCgroup##uname(struct page_cgroup *pc)\
-       { set_bit(PCG_##lname, &pc->flags);  }
-
-#define CLEARPCGFLAG(uname, lname)                     \
-static inline void ClearPageCgroup##uname(struct page_cgroup *pc)      \
-       { clear_bit(PCG_##lname, &pc->flags);  }
-
-#define TESTCLEARPCGFLAG(uname, lname)                 \
-static inline int TestClearPageCgroup##uname(struct page_cgroup *pc)   \
-       { return test_and_clear_bit(PCG_##lname, &pc->flags);  }
-
-TESTPCGFLAG(Used, USED)
-CLEARPCGFLAG(Used, USED)
-SETPCGFLAG(Used, USED)
-
-SETPCGFLAG(Migration, MIGRATION)
-CLEARPCGFLAG(Migration, MIGRATION)
-TESTPCGFLAG(Migration, MIGRATION)
 
-static inline void lock_page_cgroup(struct page_cgroup *pc)
+static inline int PageCgroupUsed(struct page_cgroup *pc)
 {
-       /*
-        * Don't take this lock in IRQ context.
-        * This lock is for pc->mem_cgroup, USED, MIGRATION
-        */
-       bit_spin_lock(PCG_LOCK, &pc->flags);
+       return !!(pc->flags & PCG_USED);
 }
-
-static inline void unlock_page_cgroup(struct page_cgroup *pc)
-{
-       bit_spin_unlock(PCG_LOCK, &pc->flags);
-}
-
-#else /* CONFIG_MEMCG */
+#else /* !CONFIG_MEMCG */
 struct page_cgroup;
 
-static inline void __meminit pgdat_page_cgroup_init(struct pglist_data *pgdat)
+static inline void pgdat_page_cgroup_init(struct pglist_data *pgdat)
 {
 }
 
@@ -98,10 +61,9 @@ static inline void page_cgroup_init(void)
 {
 }
 
-static inline void __init page_cgroup_init_flatmem(void)
+static inline void page_cgroup_init_flatmem(void)
 {
 }
-
 #endif /* CONFIG_MEMCG */
 
 #include <linux/swap.h>
@@ -140,6 +102,4 @@ static inline void swap_cgroup_swapoff(int type)
 
 #endif /* CONFIG_MEMCG_SWAP */
 
-#endif /* !__GENERATING_BOUNDS_H */
-
 #endif /* __LINUX_PAGE_CGROUP_H */