diff options
Diffstat (limited to 'include/linux/memcontrol.h')
| -rw-r--r-- | include/linux/memcontrol.h | 126 | 
1 files changed, 87 insertions, 39 deletions
diff --git a/include/linux/memcontrol.h b/include/linux/memcontrol.h index b87068a1a09e..4d34356fe644 100644 --- a/include/linux/memcontrol.h +++ b/include/linux/memcontrol.h @@ -32,13 +32,11 @@ enum mem_cgroup_page_stat_item {  	MEMCG_NR_FILE_MAPPED, /* # of pages charged as file rss */  }; -extern unsigned long mem_cgroup_isolate_pages(unsigned long nr_to_scan, -					struct list_head *dst, -					unsigned long *scanned, int order, -					isolate_mode_t mode, -					struct zone *z, -					struct mem_cgroup *mem_cont, -					int active, int file); +struct mem_cgroup_reclaim_cookie { +	struct zone *zone; +	int priority; +	unsigned int generation; +};  #ifdef CONFIG_CGROUP_MEM_RES_CTLR  /* @@ -56,20 +54,21 @@ extern int mem_cgroup_newpage_charge(struct page *page, struct mm_struct *mm,  				gfp_t gfp_mask);  /* for swap handling */  extern int mem_cgroup_try_charge_swapin(struct mm_struct *mm, -		struct page *page, gfp_t mask, struct mem_cgroup **ptr); +		struct page *page, gfp_t mask, struct mem_cgroup **memcgp);  extern void mem_cgroup_commit_charge_swapin(struct page *page, -					struct mem_cgroup *ptr); -extern void mem_cgroup_cancel_charge_swapin(struct mem_cgroup *ptr); +					struct mem_cgroup *memcg); +extern void mem_cgroup_cancel_charge_swapin(struct mem_cgroup *memcg);  extern int mem_cgroup_cache_charge(struct page *page, struct mm_struct *mm,  					gfp_t gfp_mask); -extern void mem_cgroup_add_lru_list(struct page *page, enum lru_list lru); -extern void mem_cgroup_del_lru_list(struct page *page, enum lru_list lru); -extern void mem_cgroup_rotate_reclaimable_page(struct page *page); -extern void mem_cgroup_rotate_lru_list(struct page *page, enum lru_list lru); -extern void mem_cgroup_del_lru(struct page *page); -extern void mem_cgroup_move_lists(struct page *page, -				  enum lru_list from, enum lru_list to); + +struct lruvec *mem_cgroup_zone_lruvec(struct zone *, struct mem_cgroup *); +struct lruvec *mem_cgroup_lru_add_list(struct zone *, struct page *, +				       enum lru_list); +void mem_cgroup_lru_del_list(struct page *, enum lru_list); +void mem_cgroup_lru_del(struct page *); +struct lruvec *mem_cgroup_lru_move_lists(struct zone *, struct page *, +					 enum lru_list, enum lru_list);  /* For coalescing uncharge for reducing memcg' overhead*/  extern void mem_cgroup_uncharge_start(void); @@ -85,6 +84,9 @@ extern struct mem_cgroup *try_get_mem_cgroup_from_page(struct page *page);  extern struct mem_cgroup *mem_cgroup_from_task(struct task_struct *p);  extern struct mem_cgroup *try_get_mem_cgroup_from_mm(struct mm_struct *mm); +extern struct mem_cgroup *parent_mem_cgroup(struct mem_cgroup *memcg); +extern struct mem_cgroup *mem_cgroup_from_cont(struct cgroup *cont); +  static inline  int mm_match_cgroup(const struct mm_struct *mm, const struct mem_cgroup *cgroup)  { @@ -99,10 +101,15 @@ extern struct cgroup_subsys_state *mem_cgroup_css(struct mem_cgroup *memcg);  extern int  mem_cgroup_prepare_migration(struct page *page, -	struct page *newpage, struct mem_cgroup **ptr, gfp_t gfp_mask); +	struct page *newpage, struct mem_cgroup **memcgp, gfp_t gfp_mask);  extern void mem_cgroup_end_migration(struct mem_cgroup *memcg,  	struct page *oldpage, struct page *newpage, bool migration_ok); +struct mem_cgroup *mem_cgroup_iter(struct mem_cgroup *, +				   struct mem_cgroup *, +				   struct mem_cgroup_reclaim_cookie *); +void mem_cgroup_iter_break(struct mem_cgroup *, struct mem_cgroup *); +  /*   * For memory reclaim.   */ @@ -119,7 +126,10 @@ struct zone_reclaim_stat*  mem_cgroup_get_reclaim_stat_from_page(struct page *page);  extern void mem_cgroup_print_oom_info(struct mem_cgroup *memcg,  					struct task_struct *p); +extern void mem_cgroup_replace_page_cache(struct page *oldpage, +					struct page *newpage); +extern void mem_cgroup_reset_owner(struct page *page);  #ifdef CONFIG_CGROUP_MEM_RES_CTLR_SWAP  extern int do_swap_account;  #endif @@ -154,7 +164,7 @@ u64 mem_cgroup_get_limit(struct mem_cgroup *memcg);  void mem_cgroup_count_vm_event(struct mm_struct *mm, enum vm_event_item idx);  #ifdef CONFIG_TRANSPARENT_HUGEPAGE -void mem_cgroup_split_huge_fixup(struct page *head, struct page *tail); +void mem_cgroup_split_huge_fixup(struct page *head);  #endif  #ifdef CONFIG_DEBUG_VM @@ -177,17 +187,17 @@ static inline int mem_cgroup_cache_charge(struct page *page,  }  static inline int mem_cgroup_try_charge_swapin(struct mm_struct *mm, -		struct page *page, gfp_t gfp_mask, struct mem_cgroup **ptr) +		struct page *page, gfp_t gfp_mask, struct mem_cgroup **memcgp)  {  	return 0;  }  static inline void mem_cgroup_commit_charge_swapin(struct page *page, -					  struct mem_cgroup *ptr) +					  struct mem_cgroup *memcg)  {  } -static inline void mem_cgroup_cancel_charge_swapin(struct mem_cgroup *ptr) +static inline void mem_cgroup_cancel_charge_swapin(struct mem_cgroup *memcg)  {  } @@ -207,33 +217,33 @@ static inline void mem_cgroup_uncharge_cache_page(struct page *page)  {  } -static inline void mem_cgroup_add_lru_list(struct page *page, int lru) +static inline struct lruvec *mem_cgroup_zone_lruvec(struct zone *zone, +						    struct mem_cgroup *memcg)  { +	return &zone->lruvec;  } -static inline void mem_cgroup_del_lru_list(struct page *page, int lru) +static inline struct lruvec *mem_cgroup_lru_add_list(struct zone *zone, +						     struct page *page, +						     enum lru_list lru)  { -	return ; +	return &zone->lruvec;  } -static inline void mem_cgroup_rotate_reclaimable_page(struct page *page) +static inline void mem_cgroup_lru_del_list(struct page *page, enum lru_list lru)  { -	return ;  } -static inline void mem_cgroup_rotate_lru_list(struct page *page, int lru) +static inline void mem_cgroup_lru_del(struct page *page)  { -	return ;  } -static inline void mem_cgroup_del_lru(struct page *page) -{ -	return ; -} - -static inline void -mem_cgroup_move_lists(struct page *page, enum lru_list from, enum lru_list to) +static inline struct lruvec *mem_cgroup_lru_move_lists(struct zone *zone, +						       struct page *page, +						       enum lru_list from, +						       enum lru_list to)  { +	return &zone->lruvec;  }  static inline struct mem_cgroup *try_get_mem_cgroup_from_page(struct page *page) @@ -266,7 +276,7 @@ static inline struct cgroup_subsys_state  static inline int  mem_cgroup_prepare_migration(struct page *page, struct page *newpage, -	struct mem_cgroup **ptr, gfp_t gfp_mask) +	struct mem_cgroup **memcgp, gfp_t gfp_mask)  {  	return 0;  } @@ -276,6 +286,19 @@ static inline void mem_cgroup_end_migration(struct mem_cgroup *memcg,  {  } +static inline struct mem_cgroup * +mem_cgroup_iter(struct mem_cgroup *root, +		struct mem_cgroup *prev, +		struct mem_cgroup_reclaim_cookie *reclaim) +{ +	return NULL; +} + +static inline void mem_cgroup_iter_break(struct mem_cgroup *root, +					 struct mem_cgroup *prev) +{ +} +  static inline int mem_cgroup_get_reclaim_priority(struct mem_cgroup *memcg)  {  	return 0; @@ -357,8 +380,7 @@ u64 mem_cgroup_get_limit(struct mem_cgroup *memcg)  	return 0;  } -static inline void mem_cgroup_split_huge_fixup(struct page *head, -						struct page *tail) +static inline void mem_cgroup_split_huge_fixup(struct page *head)  {  } @@ -366,6 +388,14 @@ static inline  void mem_cgroup_count_vm_event(struct mm_struct *mm, enum vm_event_item idx)  {  } +static inline void mem_cgroup_replace_page_cache(struct page *oldpage, +				struct page *newpage) +{ +} + +static inline void mem_cgroup_reset_owner(struct page *page) +{ +}  #endif /* CONFIG_CGROUP_MEM_CONT */  #if !defined(CONFIG_CGROUP_MEM_RES_CTLR) || !defined(CONFIG_DEBUG_VM) @@ -381,5 +411,23 @@ mem_cgroup_print_bad_page(struct page *page)  }  #endif +enum { +	UNDER_LIMIT, +	SOFT_LIMIT, +	OVER_LIMIT, +}; + +struct sock; +#ifdef CONFIG_CGROUP_MEM_RES_CTLR_KMEM +void sock_update_memcg(struct sock *sk); +void sock_release_memcg(struct sock *sk); +#else +static inline void sock_update_memcg(struct sock *sk) +{ +} +static inline void sock_release_memcg(struct sock *sk) +{ +} +#endif /* CONFIG_CGROUP_MEM_RES_CTLR_KMEM */  #endif /* _LINUX_MEMCONTROL_H */  |