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);
  57extern void mem_cgroup_uncharge_page(struct page *page);
  58extern void mem_cgroup_uncharge_cache_page(struct page *page);
  59extern int mem_cgroup_shmem_charge_fallback(struct page *page,
  60                        struct mm_struct *mm, gfp_t gfp_mask);
  61
  62extern unsigned long mem_cgroup_isolate_pages(unsigned long nr_to_scan,
  63                                        struct list_head *dst,
  64                                        unsigned long *scanned, int order,
  65                                        int mode, struct zone *z,
  66                                        struct mem_cgroup *mem_cont,
  67                                        int active, int file);
  68extern void mem_cgroup_out_of_memory(struct mem_cgroup *mem, gfp_t gfp_mask);
  69int task_in_mem_cgroup(struct task_struct *task, const struct mem_cgroup *mem);
  70
  71extern struct mem_cgroup *mem_cgroup_from_task(struct task_struct *p);
  72
  73static inline
  74int mm_match_cgroup(const struct mm_struct *mm, const struct mem_cgroup *cgroup)
  75{
  76        struct mem_cgroup *mem;
  77        rcu_read_lock();
  78        mem = mem_cgroup_from_task(rcu_dereference((mm)->owner));
  79        rcu_read_unlock();
  80        return cgroup == mem;
  81}
  82
  83extern int
  84mem_cgroup_prepare_migration(struct page *page, struct mem_cgroup **ptr);
  85extern void mem_cgroup_end_migration(struct mem_cgroup *mem,
  86        struct page *oldpage, struct page *newpage);
  87
  88/*
  89 * For memory reclaim.
  90 */
  91extern int mem_cgroup_get_reclaim_priority(struct mem_cgroup *mem);
  92extern void mem_cgroup_note_reclaim_priority(struct mem_cgroup *mem,
  93                                                        int priority);
  94extern void mem_cgroup_record_reclaim_priority(struct mem_cgroup *mem,
  95                                                        int priority);
  96int mem_cgroup_inactive_anon_is_low(struct mem_cgroup *memcg);
  97int mem_cgroup_inactive_file_is_low(struct mem_cgroup *memcg);
  98unsigned long mem_cgroup_zone_nr_pages(struct mem_cgroup *memcg,
  99                                       struct zone *zone,
 100                                       enum lru_list lru);
 101struct zone_reclaim_stat *mem_cgroup_get_reclaim_stat(struct mem_cgroup *memcg,
 102                                                      struct zone *zone);
 103struct zone_reclaim_stat*
 104mem_cgroup_get_reclaim_stat_from_page(struct page *page);
 105extern void mem_cgroup_print_oom_info(struct mem_cgroup *memcg,
 106                                        struct task_struct *p);
 107
 108#ifdef CONFIG_CGROUP_MEM_RES_CTLR_SWAP
 109extern int do_swap_account;
 110#endif
 111
 112static inline bool mem_cgroup_disabled(void)
 113{
 114        if (mem_cgroup_subsys.disabled)
 115                return true;
 116        return false;
 117}
 118
 119extern bool mem_cgroup_oom_called(struct task_struct *task);
 120void mem_cgroup_update_mapped_file_stat(struct page *page, int val);
 121unsigned long mem_cgroup_soft_limit_reclaim(struct zone *zone, int order,
 122                                                gfp_t gfp_mask, int nid,
 123                                                int zid);
 124#else /* CONFIG_CGROUP_MEM_RES_CTLR */
 125struct mem_cgroup;
 126
 127static inline int mem_cgroup_newpage_charge(struct page *page,
 128                                        struct mm_struct *mm, gfp_t gfp_mask)
 129{
 130        return 0;
 131}
 132
 133static inline int mem_cgroup_cache_charge(struct page *page,
 134                                        struct mm_struct *mm, gfp_t gfp_mask)
 135{
 136        return 0;
 137}
 138
 139static inline int mem_cgroup_try_charge_swapin(struct mm_struct *mm,
 140                struct page *page, gfp_t gfp_mask, struct mem_cgroup **ptr)
 141{
 142        return 0;
 143}
 144
 145static inline void mem_cgroup_commit_charge_swapin(struct page *page,
 146                                          struct mem_cgroup *ptr)
 147{
 148}
 149
 150static inline void mem_cgroup_cancel_charge_swapin(struct mem_cgroup *ptr)
 151{
 152}
 153
 154static inline void mem_cgroup_uncharge_page(struct page *page)
 155{
 156}
 157
 158static inline void mem_cgroup_uncharge_cache_page(struct page *page)
 159{
 160}
 161
 162static inline int mem_cgroup_shmem_charge_fallback(struct page *page,
 163                        struct mm_struct *mm, gfp_t gfp_mask)
 164{
 165        return 0;
 166}
 167
 168static inline void mem_cgroup_add_lru_list(struct page *page, int lru)
 169{
 170}
 171
 172static inline void mem_cgroup_del_lru_list(struct page *page, int lru)
 173{
 174        return ;
 175}
 176
 177static inline void mem_cgroup_rotate_lru_list(struct page *page, int lru)
 178{
 179        return ;
 180}
 181
 182static inline void mem_cgroup_del_lru(struct page *page)
 183{
 184        return ;
 185}
 186
 187static inline void
 188mem_cgroup_move_lists(struct page *page, enum lru_list from, enum lru_list to)
 189{
 190}
 191
 192static inline int mm_match_cgroup(struct mm_struct *mm, struct mem_cgroup *mem)
 193{
 194        return 1;
 195}
 196
 197static inline int task_in_mem_cgroup(struct task_struct *task,
 198                                     const struct mem_cgroup *mem)
 199{
 200        return 1;
 201}
 202
 203static inline int
 204mem_cgroup_prepare_migration(struct page *page, struct mem_cgroup **ptr)
 205{
 206        return 0;
 207}
 208
 209static inline void mem_cgroup_end_migration(struct mem_cgroup *mem,
 210                                        struct page *oldpage,
 211                                        struct page *newpage)
 212{
 213}
 214
 215static inline int mem_cgroup_get_reclaim_priority(struct mem_cgroup *mem)
 216{
 217        return 0;
 218}
 219
 220static inline void mem_cgroup_note_reclaim_priority(struct mem_cgroup *mem,
 221                                                int priority)
 222{
 223}
 224
 225static inline void mem_cgroup_record_reclaim_priority(struct mem_cgroup *mem,
 226                                                int priority)
 227{
 228}
 229
 230static inline bool mem_cgroup_disabled(void)
 231{
 232        return true;
 233}
 234
 235static inline bool mem_cgroup_oom_called(struct task_struct *task)
 236{
 237        return false;
 238}
 239
 240static inline int
 241mem_cgroup_inactive_anon_is_low(struct mem_cgroup *memcg)
 242{
 243        return 1;
 244}
 245
 246static inline int
 247mem_cgroup_inactive_file_is_low(struct mem_cgroup *memcg)
 248{
 249        return 1;
 250}
 251
 252static inline unsigned long
 253mem_cgroup_zone_nr_pages(struct mem_cgroup *memcg, struct zone *zone,
 254                         enum lru_list lru)
 255{
 256        return 0;
 257}
 258
 259
 260static inline struct zone_reclaim_stat*
 261mem_cgroup_get_reclaim_stat(struct mem_cgroup *memcg, struct zone *zone)
 262{
 263        return NULL;
 264}
 265
 266static inline struct zone_reclaim_stat*
 267mem_cgroup_get_reclaim_stat_from_page(struct page *page)
 268{
 269        return NULL;
 270}
 271
 272static inline void
 273mem_cgroup_print_oom_info(struct mem_cgroup *memcg, struct task_struct *p)
 274{
 275}
 276
 277static inline void mem_cgroup_update_mapped_file_stat(struct page *page,
 278                                                        int val)
 279{
 280}
 281
 282static inline
 283unsigned long mem_cgroup_soft_limit_reclaim(struct zone *zone, int order,
 284                                            gfp_t gfp_mask, int nid, int zid)
 285{
 286        return 0;
 287}
 288
 289#endif /* CONFIG_CGROUP_MEM_CONT */
 290
 291#endif /* _LINUX_MEMCONTROL_H */
 292
 293
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.