1 /* SPDX-License-Identifier: GPL-2.0-or-later */
 
   2 /* memcontrol.h - Memory Controller
 
   4  * Copyright IBM Corporation, 2007
 
   5  * Author Balbir Singh <balbir@linux.vnet.ibm.com>
 
   7  * Copyright 2007 OpenVZ SWsoft Inc
 
   8  * Author: Pavel Emelianov <xemul@openvz.org>
 
  11 #ifndef _LINUX_MEMCONTROL_H
 
  12 #define _LINUX_MEMCONTROL_H
 
  13 #include <linux/cgroup.h>
 
  14 #include <linux/vm_event_item.h>
 
  15 #include <linux/hardirq.h>
 
  16 #include <linux/jump_label.h>
 
  17 #include <linux/page_counter.h>
 
  18 #include <linux/vmpressure.h>
 
  19 #include <linux/eventfd.h>
 
  21 #include <linux/vmstat.h>
 
  22 #include <linux/writeback.h>
 
  23 #include <linux/page-flags.h>
 
  30 /* Cgroup-specific page state, on top of universal node page state */
 
  31 enum memcg_stat_item {
 
  32         MEMCG_CACHE = NR_VM_NODE_STAT_ITEMS,
 
  37         /* XXX: why are these zone and not node counters? */
 
  38         MEMCG_KERNEL_STACK_KB,
 
  42 enum memcg_memory_event {
 
  51         MEMCG_NR_MEMORY_EVENTS,
 
  54 enum mem_cgroup_protection {
 
  60 struct mem_cgroup_reclaim_cookie {
 
  62         unsigned int generation;
 
  67 #define MEM_CGROUP_ID_SHIFT     16
 
  68 #define MEM_CGROUP_ID_MAX       USHRT_MAX
 
  70 struct mem_cgroup_id {
 
  76  * Per memcg event counter is incremented at every pagein/pageout. With THP,
 
  77  * it will be incremated by the number of pages. This counter is used for
 
  78  * for trigger some periodic events. This is straightforward and better
 
  79  * than using jiffies etc. to handle periodic memcg event.
 
  81 enum mem_cgroup_events_target {
 
  82         MEM_CGROUP_TARGET_THRESH,
 
  83         MEM_CGROUP_TARGET_SOFTLIMIT,
 
  87 struct memcg_vmstats_percpu {
 
  88         long stat[MEMCG_NR_STAT];
 
  89         unsigned long events[NR_VM_EVENT_ITEMS];
 
  90         unsigned long nr_page_events;
 
  91         unsigned long targets[MEM_CGROUP_NTARGETS];
 
  94 struct mem_cgroup_reclaim_iter {
 
  95         struct mem_cgroup *position;
 
  96         /* scan generation, increased every round-trip */
 
  97         unsigned int generation;
 
 101         long count[NR_VM_NODE_STAT_ITEMS];
 
 105  * Bitmap of shrinker::id corresponding to memcg-aware shrinkers,
 
 106  * which have elements charged to this memcg.
 
 108 struct memcg_shrinker_map {
 
 114  * per-node information in memory controller.
 
 116 struct mem_cgroup_per_node {
 
 117         struct lruvec           lruvec;
 
 119         /* Legacy local VM stats */
 
 120         struct lruvec_stat __percpu *lruvec_stat_local;
 
 122         /* Subtree VM stats (batched updates) */
 
 123         struct lruvec_stat __percpu *lruvec_stat_cpu;
 
 124         atomic_long_t           lruvec_stat[NR_VM_NODE_STAT_ITEMS];
 
 126         unsigned long           lru_zone_size[MAX_NR_ZONES][NR_LRU_LISTS];
 
 128         struct mem_cgroup_reclaim_iter  iter;
 
 130         struct memcg_shrinker_map __rcu *shrinker_map;
 
 132         struct rb_node          tree_node;      /* RB tree node */
 
 133         unsigned long           usage_in_excess;/* Set to the value by which */
 
 134                                                 /* the soft limit is exceeded*/
 
 136         struct mem_cgroup       *memcg;         /* Back pointer, we cannot */
 
 137                                                 /* use container_of        */
 
 140 struct mem_cgroup_threshold {
 
 141         struct eventfd_ctx *eventfd;
 
 142         unsigned long threshold;
 
 146 struct mem_cgroup_threshold_ary {
 
 147         /* An array index points to threshold just below or equal to usage. */
 
 148         int current_threshold;
 
 149         /* Size of entries[] */
 
 151         /* Array of thresholds */
 
 152         struct mem_cgroup_threshold entries[];
 
 155 struct mem_cgroup_thresholds {
 
 156         /* Primary thresholds array */
 
 157         struct mem_cgroup_threshold_ary *primary;
 
 159          * Spare threshold array.
 
 160          * This is needed to make mem_cgroup_unregister_event() "never fail".
 
 161          * It must be able to store at least primary->size - 1 entries.
 
 163         struct mem_cgroup_threshold_ary *spare;
 
 166 enum memcg_kmem_state {
 
 172 #if defined(CONFIG_SMP)
 
 173 struct memcg_padding {
 
 175 } ____cacheline_internodealigned_in_smp;
 
 176 #define MEMCG_PADDING(name)      struct memcg_padding name;
 
 178 #define MEMCG_PADDING(name)
 
 182  * Remember four most recent foreign writebacks with dirty pages in this
 
 183  * cgroup.  Inode sharing is expected to be uncommon and, even if we miss
 
 184  * one in a given round, we're likely to catch it later if it keeps
 
 185  * foreign-dirtying, so a fairly low count should be enough.
 
 187  * See mem_cgroup_track_foreign_dirty_slowpath() for details.
 
 189 #define MEMCG_CGWB_FRN_CNT      4
 
 191 struct memcg_cgwb_frn {
 
 192         u64 bdi_id;                     /* bdi->id of the foreign inode */
 
 193         int memcg_id;                   /* memcg->css.id of foreign inode */
 
 194         u64 at;                         /* jiffies_64 at the time of dirtying */
 
 195         struct wb_completion done;      /* tracks in-flight foreign writebacks */
 
 199  * The memory controller data structure. The memory controller controls both
 
 200  * page cache and RSS per cgroup. We would eventually like to provide
 
 201  * statistics based on the statistics developed by Rik Van Riel for clock-pro,
 
 202  * to help the administrator determine what knobs to tune.
 
 205         struct cgroup_subsys_state css;
 
 207         /* Private memcg ID. Used to ID objects that outlive the cgroup */
 
 208         struct mem_cgroup_id id;
 
 210         /* Accounted resources */
 
 211         struct page_counter memory;
 
 212         struct page_counter swap;
 
 214         /* Legacy consumer-oriented counters */
 
 215         struct page_counter memsw;
 
 216         struct page_counter kmem;
 
 217         struct page_counter tcpmem;
 
 219         /* Range enforcement for interrupt charges */
 
 220         struct work_struct high_work;
 
 222         unsigned long soft_limit;
 
 224         /* vmpressure notifications */
 
 225         struct vmpressure vmpressure;
 
 228          * Should the accounting and control be hierarchical, per subtree?
 
 233          * Should the OOM killer kill all belonging tasks, had it kill one?
 
 237         /* protected by memcg_oom_lock */
 
 242         /* OOM-Killer disable */
 
 243         int             oom_kill_disable;
 
 245         /* memory.events and memory.events.local */
 
 246         struct cgroup_file events_file;
 
 247         struct cgroup_file events_local_file;
 
 249         /* handle for "memory.swap.events" */
 
 250         struct cgroup_file swap_events_file;
 
 252         /* protect arrays of thresholds */
 
 253         struct mutex thresholds_lock;
 
 255         /* thresholds for memory usage. RCU-protected */
 
 256         struct mem_cgroup_thresholds thresholds;
 
 258         /* thresholds for mem+swap usage. RCU-protected */
 
 259         struct mem_cgroup_thresholds memsw_thresholds;
 
 261         /* For oom notifier event fd */
 
 262         struct list_head oom_notify;
 
 265          * Should we move charges of a task when a task is moved into this
 
 266          * mem_cgroup ? And what type of charges should we move ?
 
 268         unsigned long move_charge_at_immigrate;
 
 269         /* taken only while moving_account > 0 */
 
 270         spinlock_t              move_lock;
 
 271         unsigned long           move_lock_flags;
 
 273         MEMCG_PADDING(_pad1_);
 
 276          * set > 0 if pages under this cgroup are moving to other cgroup.
 
 278         atomic_t                moving_account;
 
 279         struct task_struct      *move_lock_task;
 
 281         /* Legacy local VM stats and events */
 
 282         struct memcg_vmstats_percpu __percpu *vmstats_local;
 
 284         /* Subtree VM stats and events (batched updates) */
 
 285         struct memcg_vmstats_percpu __percpu *vmstats_percpu;
 
 287         MEMCG_PADDING(_pad2_);
 
 289         atomic_long_t           vmstats[MEMCG_NR_STAT];
 
 290         atomic_long_t           vmevents[NR_VM_EVENT_ITEMS];
 
 293         atomic_long_t           memory_events[MEMCG_NR_MEMORY_EVENTS];
 
 294         atomic_long_t           memory_events_local[MEMCG_NR_MEMORY_EVENTS];
 
 296         unsigned long           socket_pressure;
 
 298         /* Legacy tcp memory accounting */
 
 302 #ifdef CONFIG_MEMCG_KMEM
 
 303         /* Index in the kmem_cache->memcg_params.memcg_caches array */
 
 305         enum memcg_kmem_state kmem_state;
 
 306         struct list_head kmem_caches;
 
 309 #ifdef CONFIG_CGROUP_WRITEBACK
 
 310         struct list_head cgwb_list;
 
 311         struct wb_domain cgwb_domain;
 
 312         struct memcg_cgwb_frn cgwb_frn[MEMCG_CGWB_FRN_CNT];
 
 315         /* List of events which userspace want to receive */
 
 316         struct list_head event_list;
 
 317         spinlock_t event_list_lock;
 
 319 #ifdef CONFIG_TRANSPARENT_HUGEPAGE
 
 320         struct deferred_split deferred_split_queue;
 
 323         struct mem_cgroup_per_node *nodeinfo[0];
 
 324         /* WARNING: nodeinfo must be the last member here */
 
 328  * size of first charge trial. "32" comes from vmscan.c's magic value.
 
 329  * TODO: maybe necessary to use big numbers in big irons.
 
 331 #define MEMCG_CHARGE_BATCH 32U
 
 333 extern struct mem_cgroup *root_mem_cgroup;
 
 335 static inline bool mem_cgroup_is_root(struct mem_cgroup *memcg)
 
 337         return (memcg == root_mem_cgroup);
 
 340 static inline bool mem_cgroup_disabled(void)
 
 342         return !cgroup_subsys_enabled(memory_cgrp_subsys);
 
 345 static inline unsigned long mem_cgroup_protection(struct mem_cgroup *memcg,
 
 348         if (mem_cgroup_disabled())
 
 352                 return READ_ONCE(memcg->memory.emin);
 
 354         return max(READ_ONCE(memcg->memory.emin),
 
 355                    READ_ONCE(memcg->memory.elow));
 
 358 enum mem_cgroup_protection mem_cgroup_protected(struct mem_cgroup *root,
 
 359                                                 struct mem_cgroup *memcg);
 
 361 int mem_cgroup_try_charge(struct page *page, struct mm_struct *mm,
 
 362                           gfp_t gfp_mask, struct mem_cgroup **memcgp);
 
 363 int mem_cgroup_try_charge_delay(struct page *page, struct mm_struct *mm,
 
 364                           gfp_t gfp_mask, struct mem_cgroup **memcgp);
 
 365 void mem_cgroup_commit_charge(struct page *page, struct mem_cgroup *memcg,
 
 367 void mem_cgroup_cancel_charge(struct page *page, struct mem_cgroup *memcg);
 
 368 void mem_cgroup_uncharge(struct page *page);
 
 369 void mem_cgroup_uncharge_list(struct list_head *page_list);
 
 371 void mem_cgroup_migrate(struct page *oldpage, struct page *newpage);
 
 373 static struct mem_cgroup_per_node *
 
 374 mem_cgroup_nodeinfo(struct mem_cgroup *memcg, int nid)
 
 376         return memcg->nodeinfo[nid];
 
 380  * mem_cgroup_lruvec - get the lru list vector for a memcg & node
 
 381  * @memcg: memcg of the wanted lruvec
 
 383  * Returns the lru list vector holding pages for a given @memcg &
 
 384  * @node combination. This can be the node lruvec, if the memory
 
 385  * controller is disabled.
 
 387 static inline struct lruvec *mem_cgroup_lruvec(struct mem_cgroup *memcg,
 
 388                                                struct pglist_data *pgdat)
 
 390         struct mem_cgroup_per_node *mz;
 
 391         struct lruvec *lruvec;
 
 393         if (mem_cgroup_disabled()) {
 
 394                 lruvec = &pgdat->__lruvec;
 
 399                 memcg = root_mem_cgroup;
 
 401         mz = mem_cgroup_nodeinfo(memcg, pgdat->node_id);
 
 402         lruvec = &mz->lruvec;
 
 405          * Since a node can be onlined after the mem_cgroup was created,
 
 406          * we have to be prepared to initialize lruvec->pgdat here;
 
 407          * and if offlined then reonlined, we need to reinitialize it.
 
 409         if (unlikely(lruvec->pgdat != pgdat))
 
 410                 lruvec->pgdat = pgdat;
 
 414 struct lruvec *mem_cgroup_page_lruvec(struct page *, struct pglist_data *);
 
 416 struct mem_cgroup *mem_cgroup_from_task(struct task_struct *p);
 
 418 struct mem_cgroup *get_mem_cgroup_from_mm(struct mm_struct *mm);
 
 420 struct mem_cgroup *get_mem_cgroup_from_page(struct page *page);
 
 423 struct mem_cgroup *mem_cgroup_from_css(struct cgroup_subsys_state *css){
 
 424         return css ? container_of(css, struct mem_cgroup, css) : NULL;
 
 427 static inline void mem_cgroup_put(struct mem_cgroup *memcg)
 
 430                 css_put(&memcg->css);
 
 433 #define mem_cgroup_from_counter(counter, member)        \
 
 434         container_of(counter, struct mem_cgroup, member)
 
 436 struct mem_cgroup *mem_cgroup_iter(struct mem_cgroup *,
 
 438                                    struct mem_cgroup_reclaim_cookie *);
 
 439 void mem_cgroup_iter_break(struct mem_cgroup *, struct mem_cgroup *);
 
 440 int mem_cgroup_scan_tasks(struct mem_cgroup *,
 
 441                           int (*)(struct task_struct *, void *), void *);
 
 443 static inline unsigned short mem_cgroup_id(struct mem_cgroup *memcg)
 
 445         if (mem_cgroup_disabled())
 
 450 struct mem_cgroup *mem_cgroup_from_id(unsigned short id);
 
 452 static inline struct mem_cgroup *mem_cgroup_from_seq(struct seq_file *m)
 
 454         return mem_cgroup_from_css(seq_css(m));
 
 457 static inline struct mem_cgroup *lruvec_memcg(struct lruvec *lruvec)
 
 459         struct mem_cgroup_per_node *mz;
 
 461         if (mem_cgroup_disabled())
 
 464         mz = container_of(lruvec, struct mem_cgroup_per_node, lruvec);
 
 469  * parent_mem_cgroup - find the accounting parent of a memcg
 
 470  * @memcg: memcg whose parent to find
 
 472  * Returns the parent memcg, or NULL if this is the root or the memory
 
 473  * controller is in legacy no-hierarchy mode.
 
 475 static inline struct mem_cgroup *parent_mem_cgroup(struct mem_cgroup *memcg)
 
 477         if (!memcg->memory.parent)
 
 479         return mem_cgroup_from_counter(memcg->memory.parent, memory);
 
 482 static inline bool mem_cgroup_is_descendant(struct mem_cgroup *memcg,
 
 483                               struct mem_cgroup *root)
 
 487         if (!root->use_hierarchy)
 
 489         return cgroup_is_descendant(memcg->css.cgroup, root->css.cgroup);
 
 492 static inline bool mm_match_cgroup(struct mm_struct *mm,
 
 493                                    struct mem_cgroup *memcg)
 
 495         struct mem_cgroup *task_memcg;
 
 499         task_memcg = mem_cgroup_from_task(rcu_dereference(mm->owner));
 
 501                 match = mem_cgroup_is_descendant(task_memcg, memcg);
 
 506 struct cgroup_subsys_state *mem_cgroup_css_from_page(struct page *page);
 
 507 ino_t page_cgroup_ino(struct page *page);
 
 509 static inline bool mem_cgroup_online(struct mem_cgroup *memcg)
 
 511         if (mem_cgroup_disabled())
 
 513         return !!(memcg->css.flags & CSS_ONLINE);
 
 517  * For memory reclaim.
 
 519 int mem_cgroup_select_victim_node(struct mem_cgroup *memcg);
 
 521 void mem_cgroup_update_lru_size(struct lruvec *lruvec, enum lru_list lru,
 
 522                 int zid, int nr_pages);
 
 525 unsigned long mem_cgroup_get_zone_lru_size(struct lruvec *lruvec,
 
 526                 enum lru_list lru, int zone_idx)
 
 528         struct mem_cgroup_per_node *mz;
 
 530         mz = container_of(lruvec, struct mem_cgroup_per_node, lruvec);
 
 531         return mz->lru_zone_size[zone_idx][lru];
 
 534 void mem_cgroup_handle_over_high(void);
 
 536 unsigned long mem_cgroup_get_max(struct mem_cgroup *memcg);
 
 538 unsigned long mem_cgroup_size(struct mem_cgroup *memcg);
 
 540 void mem_cgroup_print_oom_context(struct mem_cgroup *memcg,
 
 541                                 struct task_struct *p);
 
 543 void mem_cgroup_print_oom_meminfo(struct mem_cgroup *memcg);
 
 545 static inline void mem_cgroup_enter_user_fault(void)
 
 547         WARN_ON(current->in_user_fault);
 
 548         current->in_user_fault = 1;
 
 551 static inline void mem_cgroup_exit_user_fault(void)
 
 553         WARN_ON(!current->in_user_fault);
 
 554         current->in_user_fault = 0;
 
 557 static inline bool task_in_memcg_oom(struct task_struct *p)
 
 559         return p->memcg_in_oom;
 
 562 bool mem_cgroup_oom_synchronize(bool wait);
 
 563 struct mem_cgroup *mem_cgroup_get_oom_group(struct task_struct *victim,
 
 564                                             struct mem_cgroup *oom_domain);
 
 565 void mem_cgroup_print_oom_group(struct mem_cgroup *memcg);
 
 567 #ifdef CONFIG_MEMCG_SWAP
 
 568 extern int do_swap_account;
 
 571 struct mem_cgroup *lock_page_memcg(struct page *page);
 
 572 void __unlock_page_memcg(struct mem_cgroup *memcg);
 
 573 void unlock_page_memcg(struct page *page);
 
 576  * idx can be of type enum memcg_stat_item or node_stat_item.
 
 577  * Keep in sync with memcg_exact_page_state().
 
 579 static inline unsigned long memcg_page_state(struct mem_cgroup *memcg, int idx)
 
 581         long x = atomic_long_read(&memcg->vmstats[idx]);
 
 590  * idx can be of type enum memcg_stat_item or node_stat_item.
 
 591  * Keep in sync with memcg_exact_page_state().
 
 593 static inline unsigned long memcg_page_state_local(struct mem_cgroup *memcg,
 
 599         for_each_possible_cpu(cpu)
 
 600                 x += per_cpu(memcg->vmstats_local->stat[idx], cpu);
 
 608 void __mod_memcg_state(struct mem_cgroup *memcg, int idx, int val);
 
 610 /* idx can be of type enum memcg_stat_item or node_stat_item */
 
 611 static inline void mod_memcg_state(struct mem_cgroup *memcg,
 
 616         local_irq_save(flags);
 
 617         __mod_memcg_state(memcg, idx, val);
 
 618         local_irq_restore(flags);
 
 622  * mod_memcg_page_state - update page state statistics
 
 624  * @idx: page state item to account
 
 625  * @val: number of pages (positive or negative)
 
 627  * The @page must be locked or the caller must use lock_page_memcg()
 
 628  * to prevent double accounting when the page is concurrently being
 
 629  * moved to another memcg:
 
 631  *   lock_page(page) or lock_page_memcg(page)
 
 632  *   if (TestClearPageState(page))
 
 633  *     mod_memcg_page_state(page, state, -1);
 
 634  *   unlock_page(page) or unlock_page_memcg(page)
 
 636  * Kernel pages are an exception to this, since they'll never move.
 
 638 static inline void __mod_memcg_page_state(struct page *page,
 
 641         if (page->mem_cgroup)
 
 642                 __mod_memcg_state(page->mem_cgroup, idx, val);
 
 645 static inline void mod_memcg_page_state(struct page *page,
 
 648         if (page->mem_cgroup)
 
 649                 mod_memcg_state(page->mem_cgroup, idx, val);
 
 652 static inline unsigned long lruvec_page_state(struct lruvec *lruvec,
 
 653                                               enum node_stat_item idx)
 
 655         struct mem_cgroup_per_node *pn;
 
 658         if (mem_cgroup_disabled())
 
 659                 return node_page_state(lruvec_pgdat(lruvec), idx);
 
 661         pn = container_of(lruvec, struct mem_cgroup_per_node, lruvec);
 
 662         x = atomic_long_read(&pn->lruvec_stat[idx]);
 
 670 static inline unsigned long lruvec_page_state_local(struct lruvec *lruvec,
 
 671                                                     enum node_stat_item idx)
 
 673         struct mem_cgroup_per_node *pn;
 
 677         if (mem_cgroup_disabled())
 
 678                 return node_page_state(lruvec_pgdat(lruvec), idx);
 
 680         pn = container_of(lruvec, struct mem_cgroup_per_node, lruvec);
 
 681         for_each_possible_cpu(cpu)
 
 682                 x += per_cpu(pn->lruvec_stat_local->count[idx], cpu);
 
 690 void __mod_lruvec_state(struct lruvec *lruvec, enum node_stat_item idx,
 
 692 void __mod_lruvec_slab_state(void *p, enum node_stat_item idx, int val);
 
 693 void mod_memcg_obj_state(void *p, int idx, int val);
 
 695 static inline void mod_lruvec_state(struct lruvec *lruvec,
 
 696                                     enum node_stat_item idx, int val)
 
 700         local_irq_save(flags);
 
 701         __mod_lruvec_state(lruvec, idx, val);
 
 702         local_irq_restore(flags);
 
 705 static inline void __mod_lruvec_page_state(struct page *page,
 
 706                                            enum node_stat_item idx, int val)
 
 708         pg_data_t *pgdat = page_pgdat(page);
 
 709         struct lruvec *lruvec;
 
 711         /* Untracked pages have no memcg, no lruvec. Update only the node */
 
 712         if (!page->mem_cgroup) {
 
 713                 __mod_node_page_state(pgdat, idx, val);
 
 717         lruvec = mem_cgroup_lruvec(page->mem_cgroup, pgdat);
 
 718         __mod_lruvec_state(lruvec, idx, val);
 
 721 static inline void mod_lruvec_page_state(struct page *page,
 
 722                                          enum node_stat_item idx, int val)
 
 726         local_irq_save(flags);
 
 727         __mod_lruvec_page_state(page, idx, val);
 
 728         local_irq_restore(flags);
 
 731 unsigned long mem_cgroup_soft_limit_reclaim(pg_data_t *pgdat, int order,
 
 733                                                 unsigned long *total_scanned);
 
 735 void __count_memcg_events(struct mem_cgroup *memcg, enum vm_event_item idx,
 
 736                           unsigned long count);
 
 738 static inline void count_memcg_events(struct mem_cgroup *memcg,
 
 739                                       enum vm_event_item idx,
 
 744         local_irq_save(flags);
 
 745         __count_memcg_events(memcg, idx, count);
 
 746         local_irq_restore(flags);
 
 749 static inline void count_memcg_page_event(struct page *page,
 
 750                                           enum vm_event_item idx)
 
 752         if (page->mem_cgroup)
 
 753                 count_memcg_events(page->mem_cgroup, idx, 1);
 
 756 static inline void count_memcg_event_mm(struct mm_struct *mm,
 
 757                                         enum vm_event_item idx)
 
 759         struct mem_cgroup *memcg;
 
 761         if (mem_cgroup_disabled())
 
 765         memcg = mem_cgroup_from_task(rcu_dereference(mm->owner));
 
 767                 count_memcg_events(memcg, idx, 1);
 
 771 static inline void memcg_memory_event(struct mem_cgroup *memcg,
 
 772                                       enum memcg_memory_event event)
 
 774         atomic_long_inc(&memcg->memory_events_local[event]);
 
 775         cgroup_file_notify(&memcg->events_local_file);
 
 778                 atomic_long_inc(&memcg->memory_events[event]);
 
 779                 cgroup_file_notify(&memcg->events_file);
 
 781                 if (!cgroup_subsys_on_dfl(memory_cgrp_subsys))
 
 783                 if (cgrp_dfl_root.flags & CGRP_ROOT_MEMORY_LOCAL_EVENTS)
 
 785         } while ((memcg = parent_mem_cgroup(memcg)) &&
 
 786                  !mem_cgroup_is_root(memcg));
 
 789 static inline void memcg_memory_event_mm(struct mm_struct *mm,
 
 790                                          enum memcg_memory_event event)
 
 792         struct mem_cgroup *memcg;
 
 794         if (mem_cgroup_disabled())
 
 798         memcg = mem_cgroup_from_task(rcu_dereference(mm->owner));
 
 800                 memcg_memory_event(memcg, event);
 
 804 #ifdef CONFIG_TRANSPARENT_HUGEPAGE
 
 805 void mem_cgroup_split_huge_fixup(struct page *head);
 
 808 #else /* CONFIG_MEMCG */
 
 810 #define MEM_CGROUP_ID_SHIFT     0
 
 811 #define MEM_CGROUP_ID_MAX       0
 
 815 static inline bool mem_cgroup_is_root(struct mem_cgroup *memcg)
 
 820 static inline bool mem_cgroup_disabled(void)
 
 825 static inline void memcg_memory_event(struct mem_cgroup *memcg,
 
 826                                       enum memcg_memory_event event)
 
 830 static inline void memcg_memory_event_mm(struct mm_struct *mm,
 
 831                                          enum memcg_memory_event event)
 
 835 static inline unsigned long mem_cgroup_protection(struct mem_cgroup *memcg,
 
 841 static inline enum mem_cgroup_protection mem_cgroup_protected(
 
 842         struct mem_cgroup *root, struct mem_cgroup *memcg)
 
 844         return MEMCG_PROT_NONE;
 
 847 static inline int mem_cgroup_try_charge(struct page *page, struct mm_struct *mm,
 
 849                                         struct mem_cgroup **memcgp)
 
 855 static inline int mem_cgroup_try_charge_delay(struct page *page,
 
 856                                               struct mm_struct *mm,
 
 858                                               struct mem_cgroup **memcgp)
 
 864 static inline void mem_cgroup_commit_charge(struct page *page,
 
 865                                             struct mem_cgroup *memcg,
 
 870 static inline void mem_cgroup_cancel_charge(struct page *page,
 
 871                                             struct mem_cgroup *memcg)
 
 875 static inline void mem_cgroup_uncharge(struct page *page)
 
 879 static inline void mem_cgroup_uncharge_list(struct list_head *page_list)
 
 883 static inline void mem_cgroup_migrate(struct page *old, struct page *new)
 
 887 static inline struct lruvec *mem_cgroup_lruvec(struct mem_cgroup *memcg,
 
 888                                                struct pglist_data *pgdat)
 
 890         return &pgdat->__lruvec;
 
 893 static inline struct lruvec *mem_cgroup_page_lruvec(struct page *page,
 
 894                                                     struct pglist_data *pgdat)
 
 896         return &pgdat->__lruvec;
 
 899 static inline struct mem_cgroup *parent_mem_cgroup(struct mem_cgroup *memcg)
 
 904 static inline bool mm_match_cgroup(struct mm_struct *mm,
 
 905                 struct mem_cgroup *memcg)
 
 910 static inline struct mem_cgroup *get_mem_cgroup_from_mm(struct mm_struct *mm)
 
 915 static inline struct mem_cgroup *get_mem_cgroup_from_page(struct page *page)
 
 920 static inline void mem_cgroup_put(struct mem_cgroup *memcg)
 
 924 static inline struct mem_cgroup *
 
 925 mem_cgroup_iter(struct mem_cgroup *root,
 
 926                 struct mem_cgroup *prev,
 
 927                 struct mem_cgroup_reclaim_cookie *reclaim)
 
 932 static inline void mem_cgroup_iter_break(struct mem_cgroup *root,
 
 933                                          struct mem_cgroup *prev)
 
 937 static inline int mem_cgroup_scan_tasks(struct mem_cgroup *memcg,
 
 938                 int (*fn)(struct task_struct *, void *), void *arg)
 
 943 static inline unsigned short mem_cgroup_id(struct mem_cgroup *memcg)
 
 948 static inline struct mem_cgroup *mem_cgroup_from_id(unsigned short id)
 
 951         /* XXX: This should always return root_mem_cgroup */
 
 955 static inline struct mem_cgroup *mem_cgroup_from_seq(struct seq_file *m)
 
 960 static inline struct mem_cgroup *lruvec_memcg(struct lruvec *lruvec)
 
 965 static inline bool mem_cgroup_online(struct mem_cgroup *memcg)
 
 971 unsigned long mem_cgroup_get_zone_lru_size(struct lruvec *lruvec,
 
 972                 enum lru_list lru, int zone_idx)
 
 977 static inline unsigned long mem_cgroup_get_max(struct mem_cgroup *memcg)
 
 982 static inline unsigned long mem_cgroup_size(struct mem_cgroup *memcg)
 
 988 mem_cgroup_print_oom_context(struct mem_cgroup *memcg, struct task_struct *p)
 
 993 mem_cgroup_print_oom_meminfo(struct mem_cgroup *memcg)
 
 997 static inline struct mem_cgroup *lock_page_memcg(struct page *page)
 
1002 static inline void __unlock_page_memcg(struct mem_cgroup *memcg)
 
1006 static inline void unlock_page_memcg(struct page *page)
 
1010 static inline void mem_cgroup_handle_over_high(void)
 
1014 static inline void mem_cgroup_enter_user_fault(void)
 
1018 static inline void mem_cgroup_exit_user_fault(void)
 
1022 static inline bool task_in_memcg_oom(struct task_struct *p)
 
1027 static inline bool mem_cgroup_oom_synchronize(bool wait)
 
1032 static inline struct mem_cgroup *mem_cgroup_get_oom_group(
 
1033         struct task_struct *victim, struct mem_cgroup *oom_domain)
 
1038 static inline void mem_cgroup_print_oom_group(struct mem_cgroup *memcg)
 
1042 static inline unsigned long memcg_page_state(struct mem_cgroup *memcg, int idx)
 
1047 static inline unsigned long memcg_page_state_local(struct mem_cgroup *memcg,
 
1053 static inline void __mod_memcg_state(struct mem_cgroup *memcg,
 
1059 static inline void mod_memcg_state(struct mem_cgroup *memcg,
 
1065 static inline void __mod_memcg_page_state(struct page *page,
 
1071 static inline void mod_memcg_page_state(struct page *page,
 
1077 static inline unsigned long lruvec_page_state(struct lruvec *lruvec,
 
1078                                               enum node_stat_item idx)
 
1080         return node_page_state(lruvec_pgdat(lruvec), idx);
 
1083 static inline unsigned long lruvec_page_state_local(struct lruvec *lruvec,
 
1084                                                     enum node_stat_item idx)
 
1086         return node_page_state(lruvec_pgdat(lruvec), idx);
 
1089 static inline void __mod_lruvec_state(struct lruvec *lruvec,
 
1090                                       enum node_stat_item idx, int val)
 
1092         __mod_node_page_state(lruvec_pgdat(lruvec), idx, val);
 
1095 static inline void mod_lruvec_state(struct lruvec *lruvec,
 
1096                                     enum node_stat_item idx, int val)
 
1098         mod_node_page_state(lruvec_pgdat(lruvec), idx, val);
 
1101 static inline void __mod_lruvec_page_state(struct page *page,
 
1102                                            enum node_stat_item idx, int val)
 
1104         __mod_node_page_state(page_pgdat(page), idx, val);
 
1107 static inline void mod_lruvec_page_state(struct page *page,
 
1108                                          enum node_stat_item idx, int val)
 
1110         mod_node_page_state(page_pgdat(page), idx, val);
 
1113 static inline void __mod_lruvec_slab_state(void *p, enum node_stat_item idx,
 
1116         struct page *page = virt_to_head_page(p);
 
1118         __mod_node_page_state(page_pgdat(page), idx, val);
 
1121 static inline void mod_memcg_obj_state(void *p, int idx, int val)
 
1126 unsigned long mem_cgroup_soft_limit_reclaim(pg_data_t *pgdat, int order,
 
1128                                             unsigned long *total_scanned)
 
1133 static inline void mem_cgroup_split_huge_fixup(struct page *head)
 
1137 static inline void count_memcg_events(struct mem_cgroup *memcg,
 
1138                                       enum vm_event_item idx,
 
1139                                       unsigned long count)
 
1143 static inline void __count_memcg_events(struct mem_cgroup *memcg,
 
1144                                         enum vm_event_item idx,
 
1145                                         unsigned long count)
 
1149 static inline void count_memcg_page_event(struct page *page,
 
1155 void count_memcg_event_mm(struct mm_struct *mm, enum vm_event_item idx)
 
1158 #endif /* CONFIG_MEMCG */
 
1160 /* idx can be of type enum memcg_stat_item or node_stat_item */
 
1161 static inline void __inc_memcg_state(struct mem_cgroup *memcg,
 
1164         __mod_memcg_state(memcg, idx, 1);
 
1167 /* idx can be of type enum memcg_stat_item or node_stat_item */
 
1168 static inline void __dec_memcg_state(struct mem_cgroup *memcg,
 
1171         __mod_memcg_state(memcg, idx, -1);
 
1174 /* idx can be of type enum memcg_stat_item or node_stat_item */
 
1175 static inline void __inc_memcg_page_state(struct page *page,
 
1178         __mod_memcg_page_state(page, idx, 1);
 
1181 /* idx can be of type enum memcg_stat_item or node_stat_item */
 
1182 static inline void __dec_memcg_page_state(struct page *page,
 
1185         __mod_memcg_page_state(page, idx, -1);
 
1188 static inline void __inc_lruvec_state(struct lruvec *lruvec,
 
1189                                       enum node_stat_item idx)
 
1191         __mod_lruvec_state(lruvec, idx, 1);
 
1194 static inline void __dec_lruvec_state(struct lruvec *lruvec,
 
1195                                       enum node_stat_item idx)
 
1197         __mod_lruvec_state(lruvec, idx, -1);
 
1200 static inline void __inc_lruvec_page_state(struct page *page,
 
1201                                            enum node_stat_item idx)
 
1203         __mod_lruvec_page_state(page, idx, 1);
 
1206 static inline void __dec_lruvec_page_state(struct page *page,
 
1207                                            enum node_stat_item idx)
 
1209         __mod_lruvec_page_state(page, idx, -1);
 
1212 static inline void __inc_lruvec_slab_state(void *p, enum node_stat_item idx)
 
1214         __mod_lruvec_slab_state(p, idx, 1);
 
1217 static inline void __dec_lruvec_slab_state(void *p, enum node_stat_item idx)
 
1219         __mod_lruvec_slab_state(p, idx, -1);
 
1222 /* idx can be of type enum memcg_stat_item or node_stat_item */
 
1223 static inline void inc_memcg_state(struct mem_cgroup *memcg,
 
1226         mod_memcg_state(memcg, idx, 1);
 
1229 /* idx can be of type enum memcg_stat_item or node_stat_item */
 
1230 static inline void dec_memcg_state(struct mem_cgroup *memcg,
 
1233         mod_memcg_state(memcg, idx, -1);
 
1236 /* idx can be of type enum memcg_stat_item or node_stat_item */
 
1237 static inline void inc_memcg_page_state(struct page *page,
 
1240         mod_memcg_page_state(page, idx, 1);
 
1243 /* idx can be of type enum memcg_stat_item or node_stat_item */
 
1244 static inline void dec_memcg_page_state(struct page *page,
 
1247         mod_memcg_page_state(page, idx, -1);
 
1250 static inline void inc_lruvec_state(struct lruvec *lruvec,
 
1251                                     enum node_stat_item idx)
 
1253         mod_lruvec_state(lruvec, idx, 1);
 
1256 static inline void dec_lruvec_state(struct lruvec *lruvec,
 
1257                                     enum node_stat_item idx)
 
1259         mod_lruvec_state(lruvec, idx, -1);
 
1262 static inline void inc_lruvec_page_state(struct page *page,
 
1263                                          enum node_stat_item idx)
 
1265         mod_lruvec_page_state(page, idx, 1);
 
1268 static inline void dec_lruvec_page_state(struct page *page,
 
1269                                          enum node_stat_item idx)
 
1271         mod_lruvec_page_state(page, idx, -1);
 
1274 #ifdef CONFIG_CGROUP_WRITEBACK
 
1276 struct wb_domain *mem_cgroup_wb_domain(struct bdi_writeback *wb);
 
1277 void mem_cgroup_wb_stats(struct bdi_writeback *wb, unsigned long *pfilepages,
 
1278                          unsigned long *pheadroom, unsigned long *pdirty,
 
1279                          unsigned long *pwriteback);
 
1281 void mem_cgroup_track_foreign_dirty_slowpath(struct page *page,
 
1282                                              struct bdi_writeback *wb);
 
1284 static inline void mem_cgroup_track_foreign_dirty(struct page *page,
 
1285                                                   struct bdi_writeback *wb)
 
1287         if (mem_cgroup_disabled())
 
1290         if (unlikely(&page->mem_cgroup->css != wb->memcg_css))
 
1291                 mem_cgroup_track_foreign_dirty_slowpath(page, wb);
 
1294 void mem_cgroup_flush_foreign(struct bdi_writeback *wb);
 
1296 #else   /* CONFIG_CGROUP_WRITEBACK */
 
1298 static inline struct wb_domain *mem_cgroup_wb_domain(struct bdi_writeback *wb)
 
1303 static inline void mem_cgroup_wb_stats(struct bdi_writeback *wb,
 
1304                                        unsigned long *pfilepages,
 
1305                                        unsigned long *pheadroom,
 
1306                                        unsigned long *pdirty,
 
1307                                        unsigned long *pwriteback)
 
1311 static inline void mem_cgroup_track_foreign_dirty(struct page *page,
 
1312                                                   struct bdi_writeback *wb)
 
1316 static inline void mem_cgroup_flush_foreign(struct bdi_writeback *wb)
 
1320 #endif  /* CONFIG_CGROUP_WRITEBACK */
 
1323 bool mem_cgroup_charge_skmem(struct mem_cgroup *memcg, unsigned int nr_pages);
 
1324 void mem_cgroup_uncharge_skmem(struct mem_cgroup *memcg, unsigned int nr_pages);
 
1326 extern struct static_key_false memcg_sockets_enabled_key;
 
1327 #define mem_cgroup_sockets_enabled static_branch_unlikely(&memcg_sockets_enabled_key)
 
1328 void mem_cgroup_sk_alloc(struct sock *sk);
 
1329 void mem_cgroup_sk_free(struct sock *sk);
 
1330 static inline bool mem_cgroup_under_socket_pressure(struct mem_cgroup *memcg)
 
1332         if (!cgroup_subsys_on_dfl(memory_cgrp_subsys) && memcg->tcpmem_pressure)
 
1335                 if (time_before(jiffies, memcg->socket_pressure))
 
1337         } while ((memcg = parent_mem_cgroup(memcg)));
 
1341 extern int memcg_expand_shrinker_maps(int new_id);
 
1343 extern void memcg_set_shrinker_bit(struct mem_cgroup *memcg,
 
1344                                    int nid, int shrinker_id);
 
1346 #define mem_cgroup_sockets_enabled 0
 
1347 static inline void mem_cgroup_sk_alloc(struct sock *sk) { };
 
1348 static inline void mem_cgroup_sk_free(struct sock *sk) { };
 
1349 static inline bool mem_cgroup_under_socket_pressure(struct mem_cgroup *memcg)
 
1354 static inline void memcg_set_shrinker_bit(struct mem_cgroup *memcg,
 
1355                                           int nid, int shrinker_id)
 
1360 struct kmem_cache *memcg_kmem_get_cache(struct kmem_cache *cachep);
 
1361 void memcg_kmem_put_cache(struct kmem_cache *cachep);
 
1363 #ifdef CONFIG_MEMCG_KMEM
 
1364 int __memcg_kmem_charge(struct mem_cgroup *memcg, gfp_t gfp,
 
1365                         unsigned int nr_pages);
 
1366 void __memcg_kmem_uncharge(struct mem_cgroup *memcg, unsigned int nr_pages);
 
1367 int __memcg_kmem_charge_page(struct page *page, gfp_t gfp, int order);
 
1368 void __memcg_kmem_uncharge_page(struct page *page, int order);
 
1370 extern struct static_key_false memcg_kmem_enabled_key;
 
1371 extern struct workqueue_struct *memcg_kmem_cache_wq;
 
1373 extern int memcg_nr_cache_ids;
 
1374 void memcg_get_cache_ids(void);
 
1375 void memcg_put_cache_ids(void);
 
1378  * Helper macro to loop through all memcg-specific caches. Callers must still
 
1379  * check if the cache is valid (it is either valid or NULL).
 
1380  * the slab_mutex must be held when looping through those caches
 
1382 #define for_each_memcg_cache_index(_idx)        \
 
1383         for ((_idx) = 0; (_idx) < memcg_nr_cache_ids; (_idx)++)
 
1385 static inline bool memcg_kmem_enabled(void)
 
1387         return static_branch_unlikely(&memcg_kmem_enabled_key);
 
1390 static inline int memcg_kmem_charge_page(struct page *page, gfp_t gfp,
 
1393         if (memcg_kmem_enabled())
 
1394                 return __memcg_kmem_charge_page(page, gfp, order);
 
1398 static inline void memcg_kmem_uncharge_page(struct page *page, int order)
 
1400         if (memcg_kmem_enabled())
 
1401                 __memcg_kmem_uncharge_page(page, order);
 
1404 static inline int memcg_kmem_charge(struct mem_cgroup *memcg, gfp_t gfp,
 
1405                                     unsigned int nr_pages)
 
1407         if (memcg_kmem_enabled())
 
1408                 return __memcg_kmem_charge(memcg, gfp, nr_pages);
 
1412 static inline void memcg_kmem_uncharge(struct mem_cgroup *memcg,
 
1413                                        unsigned int nr_pages)
 
1415         if (memcg_kmem_enabled())
 
1416                 __memcg_kmem_uncharge(memcg, nr_pages);
 
1420  * helper for accessing a memcg's index. It will be used as an index in the
 
1421  * child cache array in kmem_cache, and also to derive its name. This function
 
1422  * will return -1 when this is not a kmem-limited memcg.
 
1424 static inline int memcg_cache_id(struct mem_cgroup *memcg)
 
1426         return memcg ? memcg->kmemcg_id : -1;
 
1429 struct mem_cgroup *mem_cgroup_from_obj(void *p);
 
1433 static inline int memcg_kmem_charge_page(struct page *page, gfp_t gfp,
 
1439 static inline void memcg_kmem_uncharge_page(struct page *page, int order)
 
1443 static inline int __memcg_kmem_charge_page(struct page *page, gfp_t gfp,
 
1449 static inline void __memcg_kmem_uncharge_page(struct page *page, int order)
 
1453 #define for_each_memcg_cache_index(_idx)        \
 
1456 static inline bool memcg_kmem_enabled(void)
 
1461 static inline int memcg_cache_id(struct mem_cgroup *memcg)
 
1466 static inline void memcg_get_cache_ids(void)
 
1470 static inline void memcg_put_cache_ids(void)
 
1474 static inline struct mem_cgroup *mem_cgroup_from_obj(void *p)
 
1479 #endif /* CONFIG_MEMCG_KMEM */
 
1481 #endif /* _LINUX_MEMCONTROL_H */