linux/include/linux/memcontrol.h
<<
>>
Prefs
   1/* memcontrol.h - Memory Controller
   2 *
   3 * Copyright IBM Corporation, 2007
   4 * Author Balbir Singh <balbir@linux.vnet.ibm.com>
   5 *
   6 * Copyright 2007 OpenVZ SWsoft Inc
   7 * Author: Pavel Emelianov <xemul@openvz.org>
   8 *
   9 * This program is free software; you can redistribute it and/or modify
  10 * it under the terms of the GNU General Public License as published by
  11 * the Free Software Foundation; either version 2 of the License, or
  12 * (at your option) any later version.
  13 *
  14 * This program is distributed in the hope that it will be useful,
  15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
  16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  17 * GNU General Public License for more details.
  18 */
  19
  20#ifndef _LINUX_MEMCONTROL_H
  21#define _LINUX_MEMCONTROL_H
  22#include <linux/cgroup.h>
  23struct mem_cgroup;
  24struct page_cgroup;
  25struct page;
  26struct mm_struct;
  27
  28#ifdef CONFIG_CGROUP_MEM_RES_CTLR
  29/*
  30 * All "charge" functions with gfp_mask should use GFP_KERNEL or
  31 * (gfp_mask & GFP_RECLAIM_MASK). In current implementatin, memcg doesn't
  32 * alloc memory but reclaims memory from all available zones. So, "where I want
  33 * memory from" bits of gfp_mask has no meaning. So any bits of that field is
  34 * available but adding a rule is better. charge functions' gfp_mask should
  35 * be set to GFP_KERNEL or gfp_mask & GFP_RECLAIM_MASK for avoiding ambiguous
  36 * codes.
  37 * (Of course, if memcg does memory allocation in future, GFP_KERNEL is sane.)
  38 */
  39
  40extern int mem_cgroup_newpage_charge(struct page *page, struct mm_struct *mm,
  41                                gfp_t gfp_mask);
  42/* for swap handling */
  43extern int mem_cgroup_try_charge_swapin(struct mm_struct *mm,
  44                struct page *page, gfp_t mask, struct mem_cgroup **ptr);
  45extern void mem_cgroup_commit_charge_swapin(struct page *page,
  46                                        struct mem_cgroup *ptr);
  47extern void mem_cgroup_cancel_charge_swapin(struct mem_cgroup *ptr);
  48
  49extern int mem_cgroup_cache_charge(struct page *page, struct mm_struct *mm,
  50                                        gfp_t gfp_mask);
  51extern void mem_cgroup_add_lru_list(struct page *page, enum lru_list lru);
  52extern void mem_cgroup_del_lru_list(struct page *page, enum lru_list lru);
  53extern void mem_cgroup_rotate_lru_list(struct page *page, enum lru_list lru);
  54extern void mem_cgroup_del_lru(struct page *page);
  55extern void mem_cgroup_move_lists(struct page *page,
  56                                  enum lru_list from, enum lru_list to);
  57
  58/* For coalescing uncharge for reducing memcg' overhead*/
  59extern void mem_cgroup_uncharge_start(void);
  60extern void mem_cgroup_uncharge_end(void);
  61
  62extern void mem_cgroup_uncharge_page(struct page *page);
  63extern void mem_cgroup_uncharge_cache_page(struct page *page);
  64extern int mem_cgroup_shmem_charge_fallback(struct page *page,
  65                        struct mm_struct *mm, gfp_t gfp_mask);
  66
  67extern unsigned long mem_cgroup_isolate_pages(unsigned long nr_to_scan,
  68                                        struct list_head *dst,
  69                                        unsigned long *scanned, int order,
  70                                        int mode, struct zone *z,
  71                                        struct mem_cgroup *mem_cont,
  72                                        int active, int file);
  73extern void mem_cgroup_out_of_memory(struct mem_cgroup *mem, gfp_t gfp_mask);
  74int task_in_mem_cgroup(struct task_struct *task, const struct mem_cgroup *mem);
  75
  76extern struct mem_cgroup *try_get_mem_cgroup_from_page(struct page *page);
  77extern struct mem_cgroup *mem_cgroup_from_task(struct task_struct *p);
  78
  79static inline
  80int mm_match_cgroup(const struct mm_struct *mm, const struct mem_cgroup *cgroup)
  81{
  82        struct mem_cgroup *mem;
  83        rcu_read_lock();
  84        mem = mem_cgroup_from_task(rcu_dereference((mm)->owner));
  85        rcu_read_unlock();
  86        return cgroup == mem;
  87}
  88
  89extern struct cgroup_subsys_state *mem_cgroup_css(struct mem_cgroup *mem);
  90
  91extern int
  92mem_cgroup_prepare_migration(struct page *page, struct mem_cgroup **ptr);
  93extern void mem_cgroup_end_migration(struct mem_cgroup *mem,
  94        struct page *oldpage, struct page *newpage);
  95
  96/*
  97 * For memory reclaim.
  98 */
  99extern int mem_cgroup_get_reclaim_priority(struct mem_cgroup *mem);
 100extern void mem_cgroup_note_reclaim_priority(struct mem_cgroup *mem,
 101                                                        int priority);
 102extern void mem_cgroup_record_reclaim_priority(struct mem_cgroup *mem,
 103                                                        int priority);
 104int mem_cgroup_inactive_anon_is_low(struct mem_cgroup *memcg);
 105int mem_cgroup_inactive_file_is_low(struct mem_cgroup *memcg);
 106unsigned long mem_cgroup_zone_nr_pages(struct mem_cgroup *memcg,
 107                                       struct zone *zone,
 108                                       enum lru_list lru);
 109struct zone_reclaim_stat *mem_cgroup_get_reclaim_stat(struct mem_cgroup *memcg,
 110                                                      struct zone *zone);
 111struct zone_reclaim_stat*
 112mem_cgroup_get_reclaim_stat_from_page(struct page *page);
 113extern void mem_cgroup_print_oom_info(struct mem_cgroup *memcg,
 114                                        struct task_struct *p);
 115
 116#ifdef CONFIG_CGROUP_MEM_RES_CTLR_SWAP
 117extern int do_swap_account;
 118#endif
 119
 120static inline bool mem_cgroup_disabled(void)
 121{
 122        if (mem_cgroup_subsys.disabled)
 123                return true;
 124        return false;
 125}
 126
 127extern bool mem_cgroup_oom_called(struct task_struct *task);
 128void mem_cgroup_update_file_mapped(struct page *page, int val);
 129unsigned long mem_cgroup_soft_limit_reclaim(struct zone *zone, int order,
 130                                                gfp_t gfp_mask, int nid,
 131                                                int zid);
 132#else /* CONFIG_CGROUP_MEM_RES_CTLR */
 133struct mem_cgroup;
 134
 135static inline int mem_cgroup_newpage_charge(struct page *page,
 136                                        struct mm_struct *mm, gfp_t gfp_mask)
 137{
 138        return 0;
 139}
 140
 141static inline int mem_cgroup_cache_charge(struct page *page,
 142                                        struct mm_struct *mm, gfp_t gfp_mask)
 143{
 144        return 0;
 145}
 146
 147static inline int mem_cgroup_try_charge_swapin(struct mm_struct *mm,
 148                struct page *page, gfp_t gfp_mask, struct mem_cgroup **ptr)
 149{
 150        return 0;
 151}
 152
 153static inline void mem_cgroup_commit_charge_swapin(struct page *page,
 154                                          struct mem_cgroup *ptr)
 155{
 156}
 157
 158static inline void mem_cgroup_cancel_charge_swapin(struct mem_cgroup *ptr)
 159{
 160}
 161
 162static inline void mem_cgroup_uncharge_start(void)
 163{
 164}
 165
 166static inline void mem_cgroup_uncharge_end(void)
 167{
 168}
 169
 170static inline void mem_cgroup_uncharge_page(struct page *page)
 171{
 172}
 173
 174static inline void mem_cgroup_uncharge_cache_page(struct page *page)
 175{
 176}
 177
 178static inline int mem_cgroup_shmem_charge_fallback(struct page *page,
 179                        struct mm_struct *mm, gfp_t gfp_mask)
 180{
 181        return 0;
 182}
 183
 184static inline void mem_cgroup_add_lru_list(struct page *page, int lru)
 185{
 186}
 187
 188static inline void mem_cgroup_del_lru_list(struct page *page, int lru)
 189{
 190        return ;
 191}
 192
 193static inline void mem_cgroup_rotate_lru_list(struct page *page, int lru)
 194{
 195        return ;
 196}
 197
 198static inline void mem_cgroup_del_lru(struct page *page)
 199{
 200        return ;
 201}
 202
 203static inline void
 204mem_cgroup_move_lists(struct page *page, enum lru_list from, enum lru_list to)
 205{
 206}
 207
 208static inline struct mem_cgroup *try_get_mem_cgroup_from_page(struct page *page)
 209{
 210        return NULL;
 211}
 212
 213static inline int mm_match_cgroup(struct mm_struct *mm, struct mem_cgroup *mem)
 214{
 215        return 1;
 216}
 217
 218static inline int task_in_mem_cgroup(struct task_struct *task,
 219                                     const struct mem_cgroup *mem)
 220{
 221        return 1;
 222}
 223
 224static inline struct cgroup_subsys_state *mem_cgroup_css(struct mem_cgroup *mem)
 225{
 226        return NULL;
 227}
 228
 229static inline int
 230mem_cgroup_prepare_migration(struct page *page, struct mem_cgroup **ptr)
 231{
 232        return 0;
 233}
 234
 235static inline void mem_cgroup_end_migration(struct mem_cgroup *mem,
 236                                        struct page *oldpage,
 237                                        struct page *newpage)
 238{
 239}
 240
 241static inline int mem_cgroup_get_reclaim_priority(struct mem_cgroup *mem)
 242{
 243        return 0;
 244}
 245
 246static inline void mem_cgroup_note_reclaim_priority(struct mem_cgroup *mem,
 247                                                int priority)
 248{
 249}
 250
 251static inline void mem_cgroup_record_reclaim_priority(struct mem_cgroup *mem,
 252                                                int priority)
 253{
 254}
 255
 256static inline bool mem_cgroup_disabled(void)
 257{
 258        return true;
 259}
 260
 261static inline bool mem_cgroup_oom_called(struct task_struct *task)
 262{
 263        return false;
 264}
 265
 266static inline int
 267mem_cgroup_inactive_anon_is_low(struct mem_cgroup *memcg)
 268{
 269        return 1;
 270}
 271
 272static inline int
 273mem_cgroup_inactive_file_is_low(struct mem_cgroup *memcg)
 274{
 275        return 1;
 276}
 277
 278static inline unsigned long
 279mem_cgroup_zone_nr_pages(struct mem_cgroup *memcg, struct zone *zone,
 280                         enum lru_list lru)
 281{
 282        return 0;
 283}
 284
 285
 286static inline struct zone_reclaim_stat*
 287mem_cgroup_get_reclaim_stat(struct mem_cgroup *memcg, struct zone *zone)
 288{
 289        return NULL;
 290}
 291
 292static inline struct zone_reclaim_stat*
 293mem_cgroup_get_reclaim_stat_from_page(struct page *page)
 294{
 295        return NULL;
 296}
 297
 298static inline void
 299mem_cgroup_print_oom_info(struct mem_cgroup *memcg, struct task_struct *p)
 300{
 301}
 302
 303static inline void mem_cgroup_update_file_mapped(struct page *page,
 304                                                        int val)
 305{
 306}
 307
 308static inline
 309unsigned long mem_cgroup_soft_limit_reclaim(struct zone *zone, int order,
 310                                            gfp_t gfp_mask, int nid, int zid)
 311{
 312        return 0;
 313}
 314
 315#endif /* CONFIG_CGROUP_MEM_CONT */
 316
 317#endif /* _LINUX_MEMCONTROL_H */
 318
 319
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.