diff options
Diffstat (limited to 'include/linux/memcontrol.h')
| -rw-r--r-- | include/linux/memcontrol.h | 70 | 
1 files changed, 22 insertions, 48 deletions
| diff --git a/include/linux/memcontrol.h b/include/linux/memcontrol.h index 0c5c403f4be6..b72d75141e12 100644 --- a/include/linux/memcontrol.h +++ b/include/linux/memcontrol.h @@ -33,6 +33,7 @@ enum memcg_stat_item {  	MEMCG_SWAP = NR_VM_NODE_STAT_ITEMS,  	MEMCG_SOCK,  	MEMCG_PERCPU_B, +	MEMCG_VMALLOC,  	MEMCG_NR_STAT,  }; @@ -42,6 +43,7 @@ enum memcg_memory_event {  	MEMCG_MAX,  	MEMCG_OOM,  	MEMCG_OOM_KILL, +	MEMCG_OOM_GROUP_KILL,  	MEMCG_SWAP_HIGH,  	MEMCG_SWAP_MAX,  	MEMCG_SWAP_FAIL, @@ -536,45 +538,6 @@ static inline bool folio_memcg_kmem(struct folio *folio)  	return folio->memcg_data & MEMCG_DATA_KMEM;  } -/* - * page_objcgs - get the object cgroups vector associated with a page - * @page: a pointer to the page struct - * - * Returns a pointer to the object cgroups vector associated with the page, - * or NULL. This function assumes that the page is known to have an - * associated object cgroups vector. It's not safe to call this function - * against pages, which might have an associated memory cgroup: e.g. - * kernel stack pages. - */ -static inline struct obj_cgroup **page_objcgs(struct page *page) -{ -	unsigned long memcg_data = READ_ONCE(page->memcg_data); - -	VM_BUG_ON_PAGE(memcg_data && !(memcg_data & MEMCG_DATA_OBJCGS), page); -	VM_BUG_ON_PAGE(memcg_data & MEMCG_DATA_KMEM, page); - -	return (struct obj_cgroup **)(memcg_data & ~MEMCG_DATA_FLAGS_MASK); -} - -/* - * page_objcgs_check - get the object cgroups vector associated with a page - * @page: a pointer to the page struct - * - * Returns a pointer to the object cgroups vector associated with the page, - * or NULL. This function is safe to use if the page can be directly associated - * with a memory cgroup. - */ -static inline struct obj_cgroup **page_objcgs_check(struct page *page) -{ -	unsigned long memcg_data = READ_ONCE(page->memcg_data); - -	if (!memcg_data || !(memcg_data & MEMCG_DATA_OBJCGS)) -		return NULL; - -	VM_BUG_ON_PAGE(memcg_data & MEMCG_DATA_KMEM, page); - -	return (struct obj_cgroup **)(memcg_data & ~MEMCG_DATA_FLAGS_MASK); -}  #else  static inline bool folio_memcg_kmem(struct folio *folio) @@ -582,15 +545,6 @@ static inline bool folio_memcg_kmem(struct folio *folio)  	return false;  } -static inline struct obj_cgroup **page_objcgs(struct page *page) -{ -	return NULL; -} - -static inline struct obj_cgroup **page_objcgs_check(struct page *page) -{ -	return NULL; -}  #endif  static inline bool PageMemcgKmem(struct page *page) @@ -991,6 +945,21 @@ static inline void mod_memcg_state(struct mem_cgroup *memcg,  	local_irq_restore(flags);  } +static inline void mod_memcg_page_state(struct page *page, +					int idx, int val) +{ +	struct mem_cgroup *memcg; + +	if (mem_cgroup_disabled()) +		return; + +	rcu_read_lock(); +	memcg = page_memcg(page); +	if (memcg) +		mod_memcg_state(memcg, idx, val); +	rcu_read_unlock(); +} +  static inline unsigned long memcg_page_state(struct mem_cgroup *memcg, int idx)  {  	return READ_ONCE(memcg->vmstats.state[idx]); @@ -1446,6 +1415,11 @@ static inline void mod_memcg_state(struct mem_cgroup *memcg,  {  } +static inline void mod_memcg_page_state(struct page *page, +					int idx, int val) +{ +} +  static inline unsigned long memcg_page_state(struct mem_cgroup *memcg, int idx)  {  	return 0; |