Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at 334656f33c43921cf383dfd0220dfd34376bcd98 159 lines 3.8 kB view raw
1#ifndef __LINUX_PAGE_CGROUP_H 2#define __LINUX_PAGE_CGROUP_H 3 4#ifdef CONFIG_CGROUP_MEM_RES_CTLR 5#include <linux/bit_spinlock.h> 6/* 7 * Page Cgroup can be considered as an extended mem_map. 8 * A page_cgroup page is associated with every page descriptor. The 9 * page_cgroup helps us identify information about the cgroup 10 * All page cgroups are allocated at boot or memory hotplug event, 11 * then the page cgroup for pfn always exists. 12 */ 13struct page_cgroup { 14 unsigned long flags; 15 struct mem_cgroup *mem_cgroup; 16 struct page *page; 17 struct list_head lru; /* per cgroup LRU list */ 18}; 19 20void __meminit pgdat_page_cgroup_init(struct pglist_data *pgdat); 21 22#ifdef CONFIG_SPARSEMEM 23static inline void __init page_cgroup_init_flatmem(void) 24{ 25} 26extern void __init page_cgroup_init(void); 27#else 28void __init page_cgroup_init_flatmem(void); 29static inline void __init page_cgroup_init(void) 30{ 31} 32#endif 33 34struct page_cgroup *lookup_page_cgroup(struct page *page); 35 36enum { 37 /* flags for mem_cgroup */ 38 PCG_LOCK, /* page cgroup is locked */ 39 PCG_CACHE, /* charged as cache */ 40 PCG_USED, /* this object is in use. */ 41 PCG_ACCT_LRU, /* page has been accounted for */ 42 PCG_FILE_MAPPED, /* page is accounted as "mapped" */ 43}; 44 45#define TESTPCGFLAG(uname, lname) \ 46static inline int PageCgroup##uname(struct page_cgroup *pc) \ 47 { return test_bit(PCG_##lname, &pc->flags); } 48 49#define SETPCGFLAG(uname, lname) \ 50static inline void SetPageCgroup##uname(struct page_cgroup *pc)\ 51 { set_bit(PCG_##lname, &pc->flags); } 52 53#define CLEARPCGFLAG(uname, lname) \ 54static inline void ClearPageCgroup##uname(struct page_cgroup *pc) \ 55 { clear_bit(PCG_##lname, &pc->flags); } 56 57#define TESTCLEARPCGFLAG(uname, lname) \ 58static inline int TestClearPageCgroup##uname(struct page_cgroup *pc) \ 59 { return test_and_clear_bit(PCG_##lname, &pc->flags); } 60 61TESTPCGFLAG(Locked, LOCK) 62 63/* Cache flag is set only once (at allocation) */ 64TESTPCGFLAG(Cache, CACHE) 65CLEARPCGFLAG(Cache, CACHE) 66SETPCGFLAG(Cache, CACHE) 67 68TESTPCGFLAG(Used, USED) 69CLEARPCGFLAG(Used, USED) 70SETPCGFLAG(Used, USED) 71 72SETPCGFLAG(AcctLRU, ACCT_LRU) 73CLEARPCGFLAG(AcctLRU, ACCT_LRU) 74TESTPCGFLAG(AcctLRU, ACCT_LRU) 75TESTCLEARPCGFLAG(AcctLRU, ACCT_LRU) 76 77 78SETPCGFLAG(FileMapped, FILE_MAPPED) 79CLEARPCGFLAG(FileMapped, FILE_MAPPED) 80TESTPCGFLAG(FileMapped, FILE_MAPPED) 81 82static inline int page_cgroup_nid(struct page_cgroup *pc) 83{ 84 return page_to_nid(pc->page); 85} 86 87static inline enum zone_type page_cgroup_zid(struct page_cgroup *pc) 88{ 89 return page_zonenum(pc->page); 90} 91 92static inline void lock_page_cgroup(struct page_cgroup *pc) 93{ 94 bit_spin_lock(PCG_LOCK, &pc->flags); 95} 96 97static inline void unlock_page_cgroup(struct page_cgroup *pc) 98{ 99 bit_spin_unlock(PCG_LOCK, &pc->flags); 100} 101 102#else /* CONFIG_CGROUP_MEM_RES_CTLR */ 103struct page_cgroup; 104 105static inline void __meminit pgdat_page_cgroup_init(struct pglist_data *pgdat) 106{ 107} 108 109static inline struct page_cgroup *lookup_page_cgroup(struct page *page) 110{ 111 return NULL; 112} 113 114static inline void page_cgroup_init(void) 115{ 116} 117 118static inline void __init page_cgroup_init_flatmem(void) 119{ 120} 121 122#endif 123 124#include <linux/swap.h> 125 126#ifdef CONFIG_CGROUP_MEM_RES_CTLR_SWAP 127extern unsigned short swap_cgroup_cmpxchg(swp_entry_t ent, 128 unsigned short old, unsigned short new); 129extern unsigned short swap_cgroup_record(swp_entry_t ent, unsigned short id); 130extern unsigned short lookup_swap_cgroup(swp_entry_t ent); 131extern int swap_cgroup_swapon(int type, unsigned long max_pages); 132extern void swap_cgroup_swapoff(int type); 133#else 134 135static inline 136unsigned short swap_cgroup_record(swp_entry_t ent, unsigned short id) 137{ 138 return 0; 139} 140 141static inline 142unsigned short lookup_swap_cgroup(swp_entry_t ent) 143{ 144 return 0; 145} 146 147static inline int 148swap_cgroup_swapon(int type, unsigned long max_pages) 149{ 150 return 0; 151} 152 153static inline void swap_cgroup_swapoff(int type) 154{ 155 return; 156} 157 158#endif 159#endif