BACKPORT: mm: multi-gen LRU: support page table walks
[platform/kernel/linux-rpi.git] / include / linux / memcontrol.h
1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2 /* memcontrol.h - Memory Controller
3  *
4  * Copyright IBM Corporation, 2007
5  * Author Balbir Singh <balbir@linux.vnet.ibm.com>
6  *
7  * Copyright 2007 OpenVZ SWsoft Inc
8  * Author: Pavel Emelianov <xemul@openvz.org>
9  */
10
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>
20 #include <linux/mm.h>
21 #include <linux/vmstat.h>
22 #include <linux/writeback.h>
23 #include <linux/page-flags.h>
24
25 struct mem_cgroup;
26 struct page;
27 struct mm_struct;
28 struct kmem_cache;
29
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,
33         MEMCG_RSS,
34         MEMCG_RSS_HUGE,
35         MEMCG_SWAP,
36         MEMCG_SOCK,
37         /* XXX: why are these zone and not node counters? */
38         MEMCG_KERNEL_STACK_KB,
39         MEMCG_NR_STAT,
40 };
41
42 enum memcg_memory_event {
43         MEMCG_LOW,
44         MEMCG_HIGH,
45         MEMCG_MAX,
46         MEMCG_OOM,
47         MEMCG_OOM_KILL,
48         MEMCG_SWAP_MAX,
49         MEMCG_SWAP_FAIL,
50         MEMCG_NR_MEMORY_EVENTS,
51 };
52
53 struct mem_cgroup_reclaim_cookie {
54         pg_data_t *pgdat;
55         int priority;
56         unsigned int generation;
57 };
58
59 #ifdef CONFIG_MEMCG
60
61 #define MEM_CGROUP_ID_SHIFT     16
62 #define MEM_CGROUP_ID_MAX       USHRT_MAX
63
64 struct mem_cgroup_id {
65         int id;
66         refcount_t ref;
67 };
68
69 /*
70  * Per memcg event counter is incremented at every pagein/pageout. With THP,
71  * it will be incremated by the number of pages. This counter is used for
72  * for trigger some periodic events. This is straightforward and better
73  * than using jiffies etc. to handle periodic memcg event.
74  */
75 enum mem_cgroup_events_target {
76         MEM_CGROUP_TARGET_THRESH,
77         MEM_CGROUP_TARGET_SOFTLIMIT,
78         MEM_CGROUP_TARGET_NUMAINFO,
79         MEM_CGROUP_NTARGETS,
80 };
81
82 struct memcg_vmstats_percpu {
83         long stat[MEMCG_NR_STAT];
84         unsigned long events[NR_VM_EVENT_ITEMS];
85         unsigned long nr_page_events;
86         unsigned long targets[MEM_CGROUP_NTARGETS];
87 };
88
89 struct mem_cgroup_reclaim_iter {
90         struct mem_cgroup *position;
91         /* scan generation, increased every round-trip */
92         unsigned int generation;
93 };
94
95 struct lruvec_stat {
96         long count[NR_VM_NODE_STAT_ITEMS];
97 };
98
99 /*
100  * Bitmap of shrinker::id corresponding to memcg-aware shrinkers,
101  * which have elements charged to this memcg.
102  */
103 struct memcg_shrinker_map {
104         struct rcu_head rcu;
105         unsigned long map[0];
106 };
107
108 /*
109  * per-zone information in memory controller.
110  */
111 struct mem_cgroup_per_node {
112         struct lruvec           lruvec;
113
114         /* Legacy local VM stats */
115         struct lruvec_stat __percpu *lruvec_stat_local;
116
117         /* Subtree VM stats (batched updates) */
118         struct lruvec_stat __percpu *lruvec_stat_cpu;
119         atomic_long_t           lruvec_stat[NR_VM_NODE_STAT_ITEMS];
120
121         unsigned long           lru_zone_size[MAX_NR_ZONES][NR_LRU_LISTS];
122
123         struct mem_cgroup_reclaim_iter  iter[DEF_PRIORITY + 1];
124
125         struct memcg_shrinker_map __rcu *shrinker_map;
126
127         struct rb_node          tree_node;      /* RB tree node */
128         unsigned long           usage_in_excess;/* Set to the value by which */
129                                                 /* the soft limit is exceeded*/
130         bool                    on_tree;
131         struct mem_cgroup       *memcg;         /* Back pointer, we cannot */
132                                                 /* use container_of        */
133 };
134
135 struct mem_cgroup_threshold {
136         struct eventfd_ctx *eventfd;
137         unsigned long threshold;
138 };
139
140 /* For threshold */
141 struct mem_cgroup_threshold_ary {
142         /* An array index points to threshold just below or equal to usage. */
143         int current_threshold;
144         /* Size of entries[] */
145         unsigned int size;
146         /* Array of thresholds */
147         struct mem_cgroup_threshold entries[0];
148 };
149
150 struct mem_cgroup_thresholds {
151         /* Primary thresholds array */
152         struct mem_cgroup_threshold_ary *primary;
153         /*
154          * Spare threshold array.
155          * This is needed to make mem_cgroup_unregister_event() "never fail".
156          * It must be able to store at least primary->size - 1 entries.
157          */
158         struct mem_cgroup_threshold_ary *spare;
159 };
160
161 enum memcg_kmem_state {
162         KMEM_NONE,
163         KMEM_ALLOCATED,
164         KMEM_ONLINE,
165 };
166
167 #if defined(CONFIG_SMP)
168 struct memcg_padding {
169         char x[0];
170 } ____cacheline_internodealigned_in_smp;
171 #define MEMCG_PADDING(name)      struct memcg_padding name;
172 #else
173 #define MEMCG_PADDING(name)
174 #endif
175
176 /*
177  * Remember four most recent foreign writebacks with dirty pages in this
178  * cgroup.  Inode sharing is expected to be uncommon and, even if we miss
179  * one in a given round, we're likely to catch it later if it keeps
180  * foreign-dirtying, so a fairly low count should be enough.
181  *
182  * See mem_cgroup_track_foreign_dirty_slowpath() for details.
183  */
184 #define MEMCG_CGWB_FRN_CNT      4
185
186 struct memcg_cgwb_frn {
187         u64 bdi_id;                     /* bdi->id of the foreign inode */
188         int memcg_id;                   /* memcg->css.id of foreign inode */
189         u64 at;                         /* jiffies_64 at the time of dirtying */
190         struct wb_completion done;      /* tracks in-flight foreign writebacks */
191 };
192
193 /*
194  * The memory controller data structure. The memory controller controls both
195  * page cache and RSS per cgroup. We would eventually like to provide
196  * statistics based on the statistics developed by Rik Van Riel for clock-pro,
197  * to help the administrator determine what knobs to tune.
198  */
199 struct mem_cgroup {
200         struct cgroup_subsys_state css;
201
202         /* Private memcg ID. Used to ID objects that outlive the cgroup */
203         struct mem_cgroup_id id;
204
205         /* Accounted resources */
206         struct page_counter memory;
207         struct page_counter swap;
208
209         /* Legacy consumer-oriented counters */
210         struct page_counter memsw;
211         struct page_counter kmem;
212         struct page_counter tcpmem;
213
214         /* Upper bound of normal memory consumption range */
215         unsigned long high;
216
217         /* Range enforcement for interrupt charges */
218         struct work_struct high_work;
219
220         unsigned long soft_limit;
221
222         /* vmpressure notifications */
223         struct vmpressure vmpressure;
224
225         /*
226          * Should the accounting and control be hierarchical, per subtree?
227          */
228         bool use_hierarchy;
229
230         /*
231          * Should the OOM killer kill all belonging tasks, had it kill one?
232          */
233         bool oom_group;
234
235         /* protected by memcg_oom_lock */
236         bool            oom_lock;
237         int             under_oom;
238
239         int     swappiness;
240         /* OOM-Killer disable */
241         int             oom_kill_disable;
242
243         /* memory.events and memory.events.local */
244         struct cgroup_file events_file;
245         struct cgroup_file events_local_file;
246
247         /* handle for "memory.swap.events" */
248         struct cgroup_file swap_events_file;
249
250         /* protect arrays of thresholds */
251         struct mutex thresholds_lock;
252
253         /* thresholds for memory usage. RCU-protected */
254         struct mem_cgroup_thresholds thresholds;
255
256         /* thresholds for mem+swap usage. RCU-protected */
257         struct mem_cgroup_thresholds memsw_thresholds;
258
259         /* For oom notifier event fd */
260         struct list_head oom_notify;
261
262         /*
263          * Should we move charges of a task when a task is moved into this
264          * mem_cgroup ? And what type of charges should we move ?
265          */
266         unsigned long move_charge_at_immigrate;
267         /* taken only while moving_account > 0 */
268         spinlock_t              move_lock;
269         unsigned long           move_lock_flags;
270
271         MEMCG_PADDING(_pad1_);
272
273         /*
274          * set > 0 if pages under this cgroup are moving to other cgroup.
275          */
276         atomic_t                moving_account;
277         struct task_struct      *move_lock_task;
278
279         /* Legacy local VM stats and events */
280         struct memcg_vmstats_percpu __percpu *vmstats_local;
281
282         /* Subtree VM stats and events (batched updates) */
283         struct memcg_vmstats_percpu __percpu *vmstats_percpu;
284
285         MEMCG_PADDING(_pad2_);
286
287         atomic_long_t           vmstats[MEMCG_NR_STAT];
288         atomic_long_t           vmevents[NR_VM_EVENT_ITEMS];
289
290         /* memory.events */
291         atomic_long_t           memory_events[MEMCG_NR_MEMORY_EVENTS];
292         atomic_long_t           memory_events_local[MEMCG_NR_MEMORY_EVENTS];
293
294         unsigned long           socket_pressure;
295
296         /* Legacy tcp memory accounting */
297         bool                    tcpmem_active;
298         int                     tcpmem_pressure;
299
300 #ifdef CONFIG_MEMCG_KMEM
301         /* Index in the kmem_cache->memcg_params.memcg_caches array */
302         int kmemcg_id;
303         enum memcg_kmem_state kmem_state;
304         struct list_head kmem_caches;
305 #endif
306
307         int last_scanned_node;
308 #if MAX_NUMNODES > 1
309         nodemask_t      scan_nodes;
310         atomic_t        numainfo_events;
311         atomic_t        numainfo_updating;
312 #endif
313
314 #ifdef CONFIG_CGROUP_WRITEBACK
315         struct list_head cgwb_list;
316         struct wb_domain cgwb_domain;
317         struct memcg_cgwb_frn cgwb_frn[MEMCG_CGWB_FRN_CNT];
318 #endif
319
320         /* List of events which userspace want to receive */
321         struct list_head event_list;
322         spinlock_t event_list_lock;
323
324 #ifdef CONFIG_TRANSPARENT_HUGEPAGE
325         struct deferred_split deferred_split_queue;
326 #endif
327
328 #ifdef CONFIG_LRU_GEN
329         /* per-memcg mm_struct list */
330         struct lru_gen_mm_list mm_list;
331 #endif
332
333         struct mem_cgroup_per_node *nodeinfo[0];
334         /* WARNING: nodeinfo must be the last member here */
335 };
336
337 /*
338  * size of first charge trial. "32" comes from vmscan.c's magic value.
339  * TODO: maybe necessary to use big numbers in big irons.
340  */
341 #define MEMCG_CHARGE_BATCH 32U
342
343 extern struct mem_cgroup *root_mem_cgroup;
344
345 static inline bool mem_cgroup_is_root(struct mem_cgroup *memcg)
346 {
347         return (memcg == root_mem_cgroup);
348 }
349
350 static inline bool mem_cgroup_disabled(void)
351 {
352         return !cgroup_subsys_enabled(memory_cgrp_subsys);
353 }
354
355 static inline unsigned long mem_cgroup_protection(struct mem_cgroup *memcg,
356                                                   bool in_low_reclaim)
357 {
358         if (mem_cgroup_disabled())
359                 return 0;
360
361         if (in_low_reclaim)
362                 return READ_ONCE(memcg->memory.emin);
363
364         return max(READ_ONCE(memcg->memory.emin),
365                    READ_ONCE(memcg->memory.elow));
366 }
367
368 void mem_cgroup_calculate_protection(struct mem_cgroup *root,
369                                      struct mem_cgroup *memcg);
370
371 static inline bool mem_cgroup_supports_protection(struct mem_cgroup *memcg)
372 {
373         /*
374          * The root memcg doesn't account charges, and doesn't support
375          * protection.
376          */
377         return !mem_cgroup_disabled() && !mem_cgroup_is_root(memcg);
378
379 }
380
381 static inline bool mem_cgroup_below_low(struct mem_cgroup *memcg)
382 {
383         if (!mem_cgroup_supports_protection(memcg))
384                 return false;
385
386         return READ_ONCE(memcg->memory.elow) >=
387                 page_counter_read(&memcg->memory);
388 }
389
390 static inline bool mem_cgroup_below_min(struct mem_cgroup *memcg)
391 {
392         if (!mem_cgroup_supports_protection(memcg))
393                 return false;
394
395         return READ_ONCE(memcg->memory.emin) >=
396                 page_counter_read(&memcg->memory);
397 }
398
399 int mem_cgroup_try_charge(struct page *page, struct mm_struct *mm,
400                           gfp_t gfp_mask, struct mem_cgroup **memcgp,
401                           bool compound);
402 int mem_cgroup_try_charge_delay(struct page *page, struct mm_struct *mm,
403                           gfp_t gfp_mask, struct mem_cgroup **memcgp,
404                           bool compound);
405 void mem_cgroup_commit_charge(struct page *page, struct mem_cgroup *memcg,
406                               bool lrucare, bool compound);
407 void mem_cgroup_cancel_charge(struct page *page, struct mem_cgroup *memcg,
408                 bool compound);
409 void mem_cgroup_uncharge(struct page *page);
410 void mem_cgroup_uncharge_list(struct list_head *page_list);
411
412 void mem_cgroup_migrate(struct page *oldpage, struct page *newpage);
413
414 static struct mem_cgroup_per_node *
415 mem_cgroup_nodeinfo(struct mem_cgroup *memcg, int nid)
416 {
417         return memcg->nodeinfo[nid];
418 }
419
420 /**
421  * mem_cgroup_lruvec - get the lru list vector for a memcg & node
422  * @memcg: memcg of the wanted lruvec
423  *
424  * Returns the lru list vector holding pages for a given @memcg &
425  * @node combination. This can be the node lruvec, if the memory
426  * controller is disabled.
427  */
428 static inline struct lruvec *mem_cgroup_lruvec(struct mem_cgroup *memcg,
429                                                struct pglist_data *pgdat)
430 {
431         struct mem_cgroup_per_node *mz;
432         struct lruvec *lruvec;
433
434         if (mem_cgroup_disabled()) {
435                 lruvec = &pgdat->__lruvec;
436                 goto out;
437         }
438
439         if (!memcg)
440                 memcg = root_mem_cgroup;
441
442         mz = mem_cgroup_nodeinfo(memcg, pgdat->node_id);
443         lruvec = &mz->lruvec;
444 out:
445         /*
446          * Since a node can be onlined after the mem_cgroup was created,
447          * we have to be prepared to initialize lruvec->pgdat here;
448          * and if offlined then reonlined, we need to reinitialize it.
449          */
450         if (unlikely(lruvec->pgdat != pgdat))
451                 lruvec->pgdat = pgdat;
452         return lruvec;
453 }
454
455 struct lruvec *mem_cgroup_page_lruvec(struct page *, struct pglist_data *);
456
457 struct mem_cgroup *mem_cgroup_from_task(struct task_struct *p);
458
459 struct mem_cgroup *get_mem_cgroup_from_mm(struct mm_struct *mm);
460
461 struct mem_cgroup *get_mem_cgroup_from_page(struct page *page);
462
463 static inline
464 struct mem_cgroup *mem_cgroup_from_css(struct cgroup_subsys_state *css){
465         return css ? container_of(css, struct mem_cgroup, css) : NULL;
466 }
467
468 static inline void mem_cgroup_put(struct mem_cgroup *memcg)
469 {
470         if (memcg)
471                 css_put(&memcg->css);
472 }
473
474 #define mem_cgroup_from_counter(counter, member)        \
475         container_of(counter, struct mem_cgroup, member)
476
477 struct mem_cgroup *mem_cgroup_iter(struct mem_cgroup *,
478                                    struct mem_cgroup *,
479                                    struct mem_cgroup_reclaim_cookie *);
480 void mem_cgroup_iter_break(struct mem_cgroup *, struct mem_cgroup *);
481 int mem_cgroup_scan_tasks(struct mem_cgroup *,
482                           int (*)(struct task_struct *, void *), void *);
483
484 static inline unsigned short mem_cgroup_id(struct mem_cgroup *memcg)
485 {
486         if (mem_cgroup_disabled())
487                 return 0;
488
489         return memcg->id.id;
490 }
491 struct mem_cgroup *mem_cgroup_from_id(unsigned short id);
492
493 static inline struct mem_cgroup *mem_cgroup_from_seq(struct seq_file *m)
494 {
495         return mem_cgroup_from_css(seq_css(m));
496 }
497
498 static inline struct mem_cgroup *lruvec_memcg(struct lruvec *lruvec)
499 {
500         struct mem_cgroup_per_node *mz;
501
502         if (mem_cgroup_disabled())
503                 return NULL;
504
505         mz = container_of(lruvec, struct mem_cgroup_per_node, lruvec);
506         return mz->memcg;
507 }
508
509 /**
510  * parent_mem_cgroup - find the accounting parent of a memcg
511  * @memcg: memcg whose parent to find
512  *
513  * Returns the parent memcg, or NULL if this is the root or the memory
514  * controller is in legacy no-hierarchy mode.
515  */
516 static inline struct mem_cgroup *parent_mem_cgroup(struct mem_cgroup *memcg)
517 {
518         if (!memcg->memory.parent)
519                 return NULL;
520         return mem_cgroup_from_counter(memcg->memory.parent, memory);
521 }
522
523 static inline bool mem_cgroup_is_descendant(struct mem_cgroup *memcg,
524                               struct mem_cgroup *root)
525 {
526         if (root == memcg)
527                 return true;
528         if (!root->use_hierarchy)
529                 return false;
530         return cgroup_is_descendant(memcg->css.cgroup, root->css.cgroup);
531 }
532
533 static inline bool mm_match_cgroup(struct mm_struct *mm,
534                                    struct mem_cgroup *memcg)
535 {
536         struct mem_cgroup *task_memcg;
537         bool match = false;
538
539         rcu_read_lock();
540         task_memcg = mem_cgroup_from_task(rcu_dereference(mm->owner));
541         if (task_memcg)
542                 match = mem_cgroup_is_descendant(task_memcg, memcg);
543         rcu_read_unlock();
544         return match;
545 }
546
547 struct cgroup_subsys_state *mem_cgroup_css_from_page(struct page *page);
548 ino_t page_cgroup_ino(struct page *page);
549
550 static inline bool mem_cgroup_online(struct mem_cgroup *memcg)
551 {
552         if (mem_cgroup_disabled())
553                 return true;
554         return !!(memcg->css.flags & CSS_ONLINE);
555 }
556
557 /*
558  * For memory reclaim.
559  */
560 int mem_cgroup_select_victim_node(struct mem_cgroup *memcg);
561
562 void mem_cgroup_update_lru_size(struct lruvec *lruvec, enum lru_list lru,
563                 int zid, int nr_pages);
564
565 static inline
566 unsigned long mem_cgroup_get_zone_lru_size(struct lruvec *lruvec,
567                 enum lru_list lru, int zone_idx)
568 {
569         struct mem_cgroup_per_node *mz;
570
571         mz = container_of(lruvec, struct mem_cgroup_per_node, lruvec);
572         return mz->lru_zone_size[zone_idx][lru];
573 }
574
575 void mem_cgroup_handle_over_high(void);
576
577 unsigned long mem_cgroup_get_max(struct mem_cgroup *memcg);
578
579 unsigned long mem_cgroup_size(struct mem_cgroup *memcg);
580
581 void mem_cgroup_print_oom_context(struct mem_cgroup *memcg,
582                                 struct task_struct *p);
583
584 void mem_cgroup_print_oom_meminfo(struct mem_cgroup *memcg);
585
586 static inline void mem_cgroup_enter_user_fault(void)
587 {
588         WARN_ON(current->in_user_fault);
589         current->in_user_fault = 1;
590 }
591
592 static inline void mem_cgroup_exit_user_fault(void)
593 {
594         WARN_ON(!current->in_user_fault);
595         current->in_user_fault = 0;
596 }
597
598 static inline bool task_in_memcg_oom(struct task_struct *p)
599 {
600         return p->memcg_in_oom;
601 }
602
603 bool mem_cgroup_oom_synchronize(bool wait);
604 struct mem_cgroup *mem_cgroup_get_oom_group(struct task_struct *victim,
605                                             struct mem_cgroup *oom_domain);
606 void mem_cgroup_print_oom_group(struct mem_cgroup *memcg);
607
608 #ifdef CONFIG_MEMCG_SWAP
609 extern int do_swap_account;
610 #endif
611
612 struct mem_cgroup *lock_page_memcg(struct page *page);
613 void __unlock_page_memcg(struct mem_cgroup *memcg);
614 void unlock_page_memcg(struct page *page);
615
616 /*
617  * idx can be of type enum memcg_stat_item or node_stat_item.
618  * Keep in sync with memcg_exact_page_state().
619  */
620 static inline unsigned long memcg_page_state(struct mem_cgroup *memcg, int idx)
621 {
622         long x = atomic_long_read(&memcg->vmstats[idx]);
623 #ifdef CONFIG_SMP
624         if (x < 0)
625                 x = 0;
626 #endif
627         return x;
628 }
629
630 /*
631  * idx can be of type enum memcg_stat_item or node_stat_item.
632  * Keep in sync with memcg_exact_page_state().
633  */
634 static inline unsigned long memcg_page_state_local(struct mem_cgroup *memcg,
635                                                    int idx)
636 {
637         long x = 0;
638         int cpu;
639
640         for_each_possible_cpu(cpu)
641                 x += per_cpu(memcg->vmstats_local->stat[idx], cpu);
642 #ifdef CONFIG_SMP
643         if (x < 0)
644                 x = 0;
645 #endif
646         return x;
647 }
648
649 void __mod_memcg_state(struct mem_cgroup *memcg, int idx, int val);
650
651 /* try to stablize page_memcg() for all the pages in a memcg */
652 static inline bool mem_cgroup_trylock_pages(struct mem_cgroup *memcg)
653 {
654         rcu_read_lock();
655
656         if (mem_cgroup_disabled() || !atomic_read(&memcg->moving_account))
657                 return true;
658
659         rcu_read_unlock();
660         return false;
661 }
662
663 static inline void mem_cgroup_unlock_pages(void)
664 {
665         rcu_read_unlock();
666 }
667
668 /* idx can be of type enum memcg_stat_item or node_stat_item */
669 static inline void mod_memcg_state(struct mem_cgroup *memcg,
670                                    int idx, int val)
671 {
672         unsigned long flags;
673
674         local_irq_save(flags);
675         __mod_memcg_state(memcg, idx, val);
676         local_irq_restore(flags);
677 }
678
679 /**
680  * mod_memcg_page_state - update page state statistics
681  * @page: the page
682  * @idx: page state item to account
683  * @val: number of pages (positive or negative)
684  *
685  * The @page must be locked or the caller must use lock_page_memcg()
686  * to prevent double accounting when the page is concurrently being
687  * moved to another memcg:
688  *
689  *   lock_page(page) or lock_page_memcg(page)
690  *   if (TestClearPageState(page))
691  *     mod_memcg_page_state(page, state, -1);
692  *   unlock_page(page) or unlock_page_memcg(page)
693  *
694  * Kernel pages are an exception to this, since they'll never move.
695  */
696 static inline void __mod_memcg_page_state(struct page *page,
697                                           int idx, int val)
698 {
699         if (page->mem_cgroup)
700                 __mod_memcg_state(page->mem_cgroup, idx, val);
701 }
702
703 static inline void mod_memcg_page_state(struct page *page,
704                                         int idx, int val)
705 {
706         if (page->mem_cgroup)
707                 mod_memcg_state(page->mem_cgroup, idx, val);
708 }
709
710 static inline unsigned long lruvec_page_state(struct lruvec *lruvec,
711                                               enum node_stat_item idx)
712 {
713         struct mem_cgroup_per_node *pn;
714         long x;
715
716         if (mem_cgroup_disabled())
717                 return node_page_state(lruvec_pgdat(lruvec), idx);
718
719         pn = container_of(lruvec, struct mem_cgroup_per_node, lruvec);
720         x = atomic_long_read(&pn->lruvec_stat[idx]);
721 #ifdef CONFIG_SMP
722         if (x < 0)
723                 x = 0;
724 #endif
725         return x;
726 }
727
728 static inline unsigned long lruvec_page_state_local(struct lruvec *lruvec,
729                                                     enum node_stat_item idx)
730 {
731         struct mem_cgroup_per_node *pn;
732         long x = 0;
733         int cpu;
734
735         if (mem_cgroup_disabled())
736                 return node_page_state(lruvec_pgdat(lruvec), idx);
737
738         pn = container_of(lruvec, struct mem_cgroup_per_node, lruvec);
739         for_each_possible_cpu(cpu)
740                 x += per_cpu(pn->lruvec_stat_local->count[idx], cpu);
741 #ifdef CONFIG_SMP
742         if (x < 0)
743                 x = 0;
744 #endif
745         return x;
746 }
747
748 void __mod_lruvec_state(struct lruvec *lruvec, enum node_stat_item idx,
749                         int val);
750 void __mod_lruvec_slab_state(void *p, enum node_stat_item idx, int val);
751 void mod_memcg_obj_state(void *p, int idx, int val);
752
753 static inline void mod_lruvec_state(struct lruvec *lruvec,
754                                     enum node_stat_item idx, int val)
755 {
756         unsigned long flags;
757
758         local_irq_save(flags);
759         __mod_lruvec_state(lruvec, idx, val);
760         local_irq_restore(flags);
761 }
762
763 static inline void __mod_lruvec_page_state(struct page *page,
764                                            enum node_stat_item idx, int val)
765 {
766         pg_data_t *pgdat = page_pgdat(page);
767         struct lruvec *lruvec;
768
769         /* Untracked pages have no memcg, no lruvec. Update only the node */
770         if (!page->mem_cgroup) {
771                 __mod_node_page_state(pgdat, idx, val);
772                 return;
773         }
774
775         lruvec = mem_cgroup_lruvec(page->mem_cgroup, pgdat);
776         __mod_lruvec_state(lruvec, idx, val);
777 }
778
779 static inline void mod_lruvec_page_state(struct page *page,
780                                          enum node_stat_item idx, int val)
781 {
782         unsigned long flags;
783
784         local_irq_save(flags);
785         __mod_lruvec_page_state(page, idx, val);
786         local_irq_restore(flags);
787 }
788
789 unsigned long mem_cgroup_soft_limit_reclaim(pg_data_t *pgdat, int order,
790                                                 gfp_t gfp_mask,
791                                                 unsigned long *total_scanned);
792
793 void __count_memcg_events(struct mem_cgroup *memcg, enum vm_event_item idx,
794                           unsigned long count);
795
796 static inline void count_memcg_events(struct mem_cgroup *memcg,
797                                       enum vm_event_item idx,
798                                       unsigned long count)
799 {
800         unsigned long flags;
801
802         local_irq_save(flags);
803         __count_memcg_events(memcg, idx, count);
804         local_irq_restore(flags);
805 }
806
807 static inline void count_memcg_page_event(struct page *page,
808                                           enum vm_event_item idx)
809 {
810         if (page->mem_cgroup)
811                 count_memcg_events(page->mem_cgroup, idx, 1);
812 }
813
814 static inline void count_memcg_event_mm(struct mm_struct *mm,
815                                         enum vm_event_item idx)
816 {
817         struct mem_cgroup *memcg;
818
819         if (mem_cgroup_disabled())
820                 return;
821
822         rcu_read_lock();
823         memcg = mem_cgroup_from_task(rcu_dereference(mm->owner));
824         if (likely(memcg))
825                 count_memcg_events(memcg, idx, 1);
826         rcu_read_unlock();
827 }
828
829 static inline void memcg_memory_event(struct mem_cgroup *memcg,
830                                       enum memcg_memory_event event)
831 {
832         atomic_long_inc(&memcg->memory_events_local[event]);
833         cgroup_file_notify(&memcg->events_local_file);
834
835         do {
836                 atomic_long_inc(&memcg->memory_events[event]);
837                 cgroup_file_notify(&memcg->events_file);
838
839                 if (!cgroup_subsys_on_dfl(memory_cgrp_subsys))
840                         break;
841                 if (cgrp_dfl_root.flags & CGRP_ROOT_MEMORY_LOCAL_EVENTS)
842                         break;
843         } while ((memcg = parent_mem_cgroup(memcg)) &&
844                  !mem_cgroup_is_root(memcg));
845 }
846
847 static inline void memcg_memory_event_mm(struct mm_struct *mm,
848                                          enum memcg_memory_event event)
849 {
850         struct mem_cgroup *memcg;
851
852         if (mem_cgroup_disabled())
853                 return;
854
855         rcu_read_lock();
856         memcg = mem_cgroup_from_task(rcu_dereference(mm->owner));
857         if (likely(memcg))
858                 memcg_memory_event(memcg, event);
859         rcu_read_unlock();
860 }
861
862 #ifdef CONFIG_TRANSPARENT_HUGEPAGE
863 void mem_cgroup_split_huge_fixup(struct page *head);
864 #endif
865
866 #else /* CONFIG_MEMCG */
867
868 #define MEM_CGROUP_ID_SHIFT     0
869 #define MEM_CGROUP_ID_MAX       0
870
871 struct mem_cgroup;
872
873 static inline bool mem_cgroup_is_root(struct mem_cgroup *memcg)
874 {
875         return true;
876 }
877
878 static inline bool mem_cgroup_disabled(void)
879 {
880         return true;
881 }
882
883 static inline void memcg_memory_event(struct mem_cgroup *memcg,
884                                       enum memcg_memory_event event)
885 {
886 }
887
888 static inline void memcg_memory_event_mm(struct mm_struct *mm,
889                                          enum memcg_memory_event event)
890 {
891 }
892
893 static inline unsigned long mem_cgroup_protection(struct mem_cgroup *memcg,
894                                                   bool in_low_reclaim)
895 {
896         return 0;
897 }
898
899 static inline void mem_cgroup_calculate_protection(struct mem_cgroup *root,
900                                                    struct mem_cgroup *memcg)
901 {
902 }
903
904 static inline bool mem_cgroup_below_low(struct mem_cgroup *memcg)
905 {
906         return false;
907 }
908
909 static inline bool mem_cgroup_below_min(struct mem_cgroup *memcg)
910 {
911         return false;
912 }
913
914 static inline int mem_cgroup_try_charge(struct page *page, struct mm_struct *mm,
915                                         gfp_t gfp_mask,
916                                         struct mem_cgroup **memcgp,
917                                         bool compound)
918 {
919         *memcgp = NULL;
920         return 0;
921 }
922
923 static inline int mem_cgroup_try_charge_delay(struct page *page,
924                                               struct mm_struct *mm,
925                                               gfp_t gfp_mask,
926                                               struct mem_cgroup **memcgp,
927                                               bool compound)
928 {
929         *memcgp = NULL;
930         return 0;
931 }
932
933 static inline void mem_cgroup_commit_charge(struct page *page,
934                                             struct mem_cgroup *memcg,
935                                             bool lrucare, bool compound)
936 {
937 }
938
939 static inline void mem_cgroup_cancel_charge(struct page *page,
940                                             struct mem_cgroup *memcg,
941                                             bool compound)
942 {
943 }
944
945 static inline void mem_cgroup_uncharge(struct page *page)
946 {
947 }
948
949 static inline void mem_cgroup_uncharge_list(struct list_head *page_list)
950 {
951 }
952
953 static inline void mem_cgroup_migrate(struct page *old, struct page *new)
954 {
955 }
956
957 static inline struct lruvec *mem_cgroup_lruvec(struct mem_cgroup *memcg,
958                                                struct pglist_data *pgdat)
959 {
960         return &pgdat->__lruvec;
961 }
962
963 static inline struct lruvec *mem_cgroup_page_lruvec(struct page *page,
964                                                     struct pglist_data *pgdat)
965 {
966         return &pgdat->__lruvec;
967 }
968
969 static inline struct mem_cgroup *parent_mem_cgroup(struct mem_cgroup *memcg)
970 {
971         return NULL;
972 }
973
974 static inline bool mm_match_cgroup(struct mm_struct *mm,
975                 struct mem_cgroup *memcg)
976 {
977         return true;
978 }
979
980 static inline struct mem_cgroup *get_mem_cgroup_from_mm(struct mm_struct *mm)
981 {
982         return NULL;
983 }
984
985 static inline struct mem_cgroup *get_mem_cgroup_from_page(struct page *page)
986 {
987         return NULL;
988 }
989
990 static inline void mem_cgroup_put(struct mem_cgroup *memcg)
991 {
992 }
993
994 static inline struct mem_cgroup *
995 mem_cgroup_iter(struct mem_cgroup *root,
996                 struct mem_cgroup *prev,
997                 struct mem_cgroup_reclaim_cookie *reclaim)
998 {
999         return NULL;
1000 }
1001
1002 static inline void mem_cgroup_iter_break(struct mem_cgroup *root,
1003                                          struct mem_cgroup *prev)
1004 {
1005 }
1006
1007 static inline int mem_cgroup_scan_tasks(struct mem_cgroup *memcg,
1008                 int (*fn)(struct task_struct *, void *), void *arg)
1009 {
1010         return 0;
1011 }
1012
1013 static inline unsigned short mem_cgroup_id(struct mem_cgroup *memcg)
1014 {
1015         return 0;
1016 }
1017
1018 static inline struct mem_cgroup *mem_cgroup_from_id(unsigned short id)
1019 {
1020         WARN_ON_ONCE(id);
1021         /* XXX: This should always return root_mem_cgroup */
1022         return NULL;
1023 }
1024
1025 static inline struct mem_cgroup *mem_cgroup_from_seq(struct seq_file *m)
1026 {
1027         return NULL;
1028 }
1029
1030 static inline struct mem_cgroup *lruvec_memcg(struct lruvec *lruvec)
1031 {
1032         return NULL;
1033 }
1034
1035 static inline bool mem_cgroup_online(struct mem_cgroup *memcg)
1036 {
1037         return true;
1038 }
1039
1040 static inline
1041 unsigned long mem_cgroup_get_zone_lru_size(struct lruvec *lruvec,
1042                 enum lru_list lru, int zone_idx)
1043 {
1044         return 0;
1045 }
1046
1047 static inline unsigned long mem_cgroup_get_max(struct mem_cgroup *memcg)
1048 {
1049         return 0;
1050 }
1051
1052 static inline unsigned long mem_cgroup_size(struct mem_cgroup *memcg)
1053 {
1054         return 0;
1055 }
1056
1057 static inline void
1058 mem_cgroup_print_oom_context(struct mem_cgroup *memcg, struct task_struct *p)
1059 {
1060 }
1061
1062 static inline void
1063 mem_cgroup_print_oom_meminfo(struct mem_cgroup *memcg)
1064 {
1065 }
1066
1067 static inline struct mem_cgroup *lock_page_memcg(struct page *page)
1068 {
1069         return NULL;
1070 }
1071
1072 static inline void __unlock_page_memcg(struct mem_cgroup *memcg)
1073 {
1074 }
1075
1076 static inline void unlock_page_memcg(struct page *page)
1077 {
1078 }
1079
1080 static inline bool mem_cgroup_trylock_pages(struct mem_cgroup *memcg)
1081 {
1082         /* to match page_memcg_rcu() */
1083         rcu_read_lock();
1084         return true;
1085 }
1086
1087 static inline void mem_cgroup_unlock_pages(void)
1088 {
1089         rcu_read_unlock();
1090 }
1091
1092 static inline void mem_cgroup_handle_over_high(void)
1093 {
1094 }
1095
1096 static inline void mem_cgroup_enter_user_fault(void)
1097 {
1098 }
1099
1100 static inline void mem_cgroup_exit_user_fault(void)
1101 {
1102 }
1103
1104 static inline bool task_in_memcg_oom(struct task_struct *p)
1105 {
1106         return false;
1107 }
1108
1109 static inline bool mem_cgroup_oom_synchronize(bool wait)
1110 {
1111         return false;
1112 }
1113
1114 static inline struct mem_cgroup *mem_cgroup_get_oom_group(
1115         struct task_struct *victim, struct mem_cgroup *oom_domain)
1116 {
1117         return NULL;
1118 }
1119
1120 static inline void mem_cgroup_print_oom_group(struct mem_cgroup *memcg)
1121 {
1122 }
1123
1124 static inline unsigned long memcg_page_state(struct mem_cgroup *memcg, int idx)
1125 {
1126         return 0;
1127 }
1128
1129 static inline unsigned long memcg_page_state_local(struct mem_cgroup *memcg,
1130                                                    int idx)
1131 {
1132         return 0;
1133 }
1134
1135 static inline void __mod_memcg_state(struct mem_cgroup *memcg,
1136                                      int idx,
1137                                      int nr)
1138 {
1139 }
1140
1141 static inline void mod_memcg_state(struct mem_cgroup *memcg,
1142                                    int idx,
1143                                    int nr)
1144 {
1145 }
1146
1147 static inline void __mod_memcg_page_state(struct page *page,
1148                                           int idx,
1149                                           int nr)
1150 {
1151 }
1152
1153 static inline void mod_memcg_page_state(struct page *page,
1154                                         int idx,
1155                                         int nr)
1156 {
1157 }
1158
1159 static inline unsigned long lruvec_page_state(struct lruvec *lruvec,
1160                                               enum node_stat_item idx)
1161 {
1162         return node_page_state(lruvec_pgdat(lruvec), idx);
1163 }
1164
1165 static inline unsigned long lruvec_page_state_local(struct lruvec *lruvec,
1166                                                     enum node_stat_item idx)
1167 {
1168         return node_page_state(lruvec_pgdat(lruvec), idx);
1169 }
1170
1171 static inline void __mod_lruvec_state(struct lruvec *lruvec,
1172                                       enum node_stat_item idx, int val)
1173 {
1174         __mod_node_page_state(lruvec_pgdat(lruvec), idx, val);
1175 }
1176
1177 static inline void mod_lruvec_state(struct lruvec *lruvec,
1178                                     enum node_stat_item idx, int val)
1179 {
1180         mod_node_page_state(lruvec_pgdat(lruvec), idx, val);
1181 }
1182
1183 static inline void __mod_lruvec_page_state(struct page *page,
1184                                            enum node_stat_item idx, int val)
1185 {
1186         __mod_node_page_state(page_pgdat(page), idx, val);
1187 }
1188
1189 static inline void mod_lruvec_page_state(struct page *page,
1190                                          enum node_stat_item idx, int val)
1191 {
1192         mod_node_page_state(page_pgdat(page), idx, val);
1193 }
1194
1195 static inline void __mod_lruvec_slab_state(void *p, enum node_stat_item idx,
1196                                            int val)
1197 {
1198         struct page *page = virt_to_head_page(p);
1199
1200         __mod_node_page_state(page_pgdat(page), idx, val);
1201 }
1202
1203 static inline void mod_memcg_obj_state(void *p, int idx, int val)
1204 {
1205 }
1206
1207 static inline
1208 unsigned long mem_cgroup_soft_limit_reclaim(pg_data_t *pgdat, int order,
1209                                             gfp_t gfp_mask,
1210                                             unsigned long *total_scanned)
1211 {
1212         return 0;
1213 }
1214
1215 static inline void mem_cgroup_split_huge_fixup(struct page *head)
1216 {
1217 }
1218
1219 static inline void count_memcg_events(struct mem_cgroup *memcg,
1220                                       enum vm_event_item idx,
1221                                       unsigned long count)
1222 {
1223 }
1224
1225 static inline void __count_memcg_events(struct mem_cgroup *memcg,
1226                                         enum vm_event_item idx,
1227                                         unsigned long count)
1228 {
1229 }
1230
1231 static inline void count_memcg_page_event(struct page *page,
1232                                           int idx)
1233 {
1234 }
1235
1236 static inline
1237 void count_memcg_event_mm(struct mm_struct *mm, enum vm_event_item idx)
1238 {
1239 }
1240 #endif /* CONFIG_MEMCG */
1241
1242 /* idx can be of type enum memcg_stat_item or node_stat_item */
1243 static inline void __inc_memcg_state(struct mem_cgroup *memcg,
1244                                      int idx)
1245 {
1246         __mod_memcg_state(memcg, idx, 1);
1247 }
1248
1249 /* idx can be of type enum memcg_stat_item or node_stat_item */
1250 static inline void __dec_memcg_state(struct mem_cgroup *memcg,
1251                                      int idx)
1252 {
1253         __mod_memcg_state(memcg, idx, -1);
1254 }
1255
1256 /* idx can be of type enum memcg_stat_item or node_stat_item */
1257 static inline void __inc_memcg_page_state(struct page *page,
1258                                           int idx)
1259 {
1260         __mod_memcg_page_state(page, idx, 1);
1261 }
1262
1263 /* idx can be of type enum memcg_stat_item or node_stat_item */
1264 static inline void __dec_memcg_page_state(struct page *page,
1265                                           int idx)
1266 {
1267         __mod_memcg_page_state(page, idx, -1);
1268 }
1269
1270 static inline void __inc_lruvec_state(struct lruvec *lruvec,
1271                                       enum node_stat_item idx)
1272 {
1273         __mod_lruvec_state(lruvec, idx, 1);
1274 }
1275
1276 static inline void __dec_lruvec_state(struct lruvec *lruvec,
1277                                       enum node_stat_item idx)
1278 {
1279         __mod_lruvec_state(lruvec, idx, -1);
1280 }
1281
1282 static inline void __inc_lruvec_page_state(struct page *page,
1283                                            enum node_stat_item idx)
1284 {
1285         __mod_lruvec_page_state(page, idx, 1);
1286 }
1287
1288 static inline void __dec_lruvec_page_state(struct page *page,
1289                                            enum node_stat_item idx)
1290 {
1291         __mod_lruvec_page_state(page, idx, -1);
1292 }
1293
1294 static inline void __inc_lruvec_slab_state(void *p, enum node_stat_item idx)
1295 {
1296         __mod_lruvec_slab_state(p, idx, 1);
1297 }
1298
1299 static inline void __dec_lruvec_slab_state(void *p, enum node_stat_item idx)
1300 {
1301         __mod_lruvec_slab_state(p, idx, -1);
1302 }
1303
1304 /* idx can be of type enum memcg_stat_item or node_stat_item */
1305 static inline void inc_memcg_state(struct mem_cgroup *memcg,
1306                                    int idx)
1307 {
1308         mod_memcg_state(memcg, idx, 1);
1309 }
1310
1311 /* idx can be of type enum memcg_stat_item or node_stat_item */
1312 static inline void dec_memcg_state(struct mem_cgroup *memcg,
1313                                    int idx)
1314 {
1315         mod_memcg_state(memcg, idx, -1);
1316 }
1317
1318 /* idx can be of type enum memcg_stat_item or node_stat_item */
1319 static inline void inc_memcg_page_state(struct page *page,
1320                                         int idx)
1321 {
1322         mod_memcg_page_state(page, idx, 1);
1323 }
1324
1325 /* idx can be of type enum memcg_stat_item or node_stat_item */
1326 static inline void dec_memcg_page_state(struct page *page,
1327                                         int idx)
1328 {
1329         mod_memcg_page_state(page, idx, -1);
1330 }
1331
1332 static inline void inc_lruvec_state(struct lruvec *lruvec,
1333                                     enum node_stat_item idx)
1334 {
1335         mod_lruvec_state(lruvec, idx, 1);
1336 }
1337
1338 static inline void dec_lruvec_state(struct lruvec *lruvec,
1339                                     enum node_stat_item idx)
1340 {
1341         mod_lruvec_state(lruvec, idx, -1);
1342 }
1343
1344 static inline void inc_lruvec_page_state(struct page *page,
1345                                          enum node_stat_item idx)
1346 {
1347         mod_lruvec_page_state(page, idx, 1);
1348 }
1349
1350 static inline void dec_lruvec_page_state(struct page *page,
1351                                          enum node_stat_item idx)
1352 {
1353         mod_lruvec_page_state(page, idx, -1);
1354 }
1355
1356 #ifdef CONFIG_CGROUP_WRITEBACK
1357
1358 struct wb_domain *mem_cgroup_wb_domain(struct bdi_writeback *wb);
1359 void mem_cgroup_wb_stats(struct bdi_writeback *wb, unsigned long *pfilepages,
1360                          unsigned long *pheadroom, unsigned long *pdirty,
1361                          unsigned long *pwriteback);
1362
1363 void mem_cgroup_track_foreign_dirty_slowpath(struct page *page,
1364                                              struct bdi_writeback *wb);
1365
1366 static inline void mem_cgroup_track_foreign_dirty(struct page *page,
1367                                                   struct bdi_writeback *wb)
1368 {
1369         if (mem_cgroup_disabled())
1370                 return;
1371
1372         if (unlikely(&page->mem_cgroup->css != wb->memcg_css))
1373                 mem_cgroup_track_foreign_dirty_slowpath(page, wb);
1374 }
1375
1376 void mem_cgroup_flush_foreign(struct bdi_writeback *wb);
1377
1378 #else   /* CONFIG_CGROUP_WRITEBACK */
1379
1380 static inline struct wb_domain *mem_cgroup_wb_domain(struct bdi_writeback *wb)
1381 {
1382         return NULL;
1383 }
1384
1385 static inline void mem_cgroup_wb_stats(struct bdi_writeback *wb,
1386                                        unsigned long *pfilepages,
1387                                        unsigned long *pheadroom,
1388                                        unsigned long *pdirty,
1389                                        unsigned long *pwriteback)
1390 {
1391 }
1392
1393 static inline void mem_cgroup_track_foreign_dirty(struct page *page,
1394                                                   struct bdi_writeback *wb)
1395 {
1396 }
1397
1398 static inline void mem_cgroup_flush_foreign(struct bdi_writeback *wb)
1399 {
1400 }
1401
1402 #endif  /* CONFIG_CGROUP_WRITEBACK */
1403
1404 struct sock;
1405 bool mem_cgroup_charge_skmem(struct mem_cgroup *memcg, unsigned int nr_pages);
1406 void mem_cgroup_uncharge_skmem(struct mem_cgroup *memcg, unsigned int nr_pages);
1407 #ifdef CONFIG_MEMCG
1408 extern struct static_key_false memcg_sockets_enabled_key;
1409 #define mem_cgroup_sockets_enabled static_branch_unlikely(&memcg_sockets_enabled_key)
1410 void mem_cgroup_sk_alloc(struct sock *sk);
1411 void mem_cgroup_sk_free(struct sock *sk);
1412 static inline bool mem_cgroup_under_socket_pressure(struct mem_cgroup *memcg)
1413 {
1414         if (!cgroup_subsys_on_dfl(memory_cgrp_subsys) && memcg->tcpmem_pressure)
1415                 return true;
1416         do {
1417                 if (time_before(jiffies, memcg->socket_pressure))
1418                         return true;
1419         } while ((memcg = parent_mem_cgroup(memcg)));
1420         return false;
1421 }
1422
1423 extern int memcg_expand_shrinker_maps(int new_id);
1424
1425 extern void memcg_set_shrinker_bit(struct mem_cgroup *memcg,
1426                                    int nid, int shrinker_id);
1427 #else
1428 #define mem_cgroup_sockets_enabled 0
1429 static inline void mem_cgroup_sk_alloc(struct sock *sk) { };
1430 static inline void mem_cgroup_sk_free(struct sock *sk) { };
1431 static inline bool mem_cgroup_under_socket_pressure(struct mem_cgroup *memcg)
1432 {
1433         return false;
1434 }
1435
1436 static inline void memcg_set_shrinker_bit(struct mem_cgroup *memcg,
1437                                           int nid, int shrinker_id)
1438 {
1439 }
1440 #endif
1441
1442 struct kmem_cache *memcg_kmem_get_cache(struct kmem_cache *cachep);
1443 void memcg_kmem_put_cache(struct kmem_cache *cachep);
1444
1445 #ifdef CONFIG_MEMCG_KMEM
1446 int __memcg_kmem_charge(struct page *page, gfp_t gfp, int order);
1447 void __memcg_kmem_uncharge(struct page *page, int order);
1448 int __memcg_kmem_charge_memcg(struct page *page, gfp_t gfp, int order,
1449                               struct mem_cgroup *memcg);
1450 void __memcg_kmem_uncharge_memcg(struct mem_cgroup *memcg,
1451                                  unsigned int nr_pages);
1452
1453 extern struct static_key_false memcg_kmem_enabled_key;
1454 extern struct workqueue_struct *memcg_kmem_cache_wq;
1455
1456 extern int memcg_nr_cache_ids;
1457 void memcg_get_cache_ids(void);
1458 void memcg_put_cache_ids(void);
1459
1460 /*
1461  * Helper macro to loop through all memcg-specific caches. Callers must still
1462  * check if the cache is valid (it is either valid or NULL).
1463  * the slab_mutex must be held when looping through those caches
1464  */
1465 #define for_each_memcg_cache_index(_idx)        \
1466         for ((_idx) = 0; (_idx) < memcg_nr_cache_ids; (_idx)++)
1467
1468 static inline bool memcg_kmem_enabled(void)
1469 {
1470         return static_branch_unlikely(&memcg_kmem_enabled_key);
1471 }
1472
1473 static inline int memcg_kmem_charge(struct page *page, gfp_t gfp, int order)
1474 {
1475         if (memcg_kmem_enabled())
1476                 return __memcg_kmem_charge(page, gfp, order);
1477         return 0;
1478 }
1479
1480 static inline void memcg_kmem_uncharge(struct page *page, int order)
1481 {
1482         if (memcg_kmem_enabled())
1483                 __memcg_kmem_uncharge(page, order);
1484 }
1485
1486 static inline int memcg_kmem_charge_memcg(struct page *page, gfp_t gfp,
1487                                           int order, struct mem_cgroup *memcg)
1488 {
1489         if (memcg_kmem_enabled())
1490                 return __memcg_kmem_charge_memcg(page, gfp, order, memcg);
1491         return 0;
1492 }
1493
1494 static inline void memcg_kmem_uncharge_memcg(struct page *page, int order,
1495                                              struct mem_cgroup *memcg)
1496 {
1497         if (memcg_kmem_enabled())
1498                 __memcg_kmem_uncharge_memcg(memcg, 1 << order);
1499 }
1500
1501 /*
1502  * helper for accessing a memcg's index. It will be used as an index in the
1503  * child cache array in kmem_cache, and also to derive its name. This function
1504  * will return -1 when this is not a kmem-limited memcg.
1505  */
1506 static inline int memcg_cache_id(struct mem_cgroup *memcg)
1507 {
1508         return memcg ? memcg->kmemcg_id : -1;
1509 }
1510
1511 struct mem_cgroup *mem_cgroup_from_obj(void *p);
1512
1513 #else
1514
1515 static inline int memcg_kmem_charge(struct page *page, gfp_t gfp, int order)
1516 {
1517         return 0;
1518 }
1519
1520 static inline void memcg_kmem_uncharge(struct page *page, int order)
1521 {
1522 }
1523
1524 static inline int __memcg_kmem_charge(struct page *page, gfp_t gfp, int order)
1525 {
1526         return 0;
1527 }
1528
1529 static inline void __memcg_kmem_uncharge(struct page *page, int order)
1530 {
1531 }
1532
1533 #define for_each_memcg_cache_index(_idx)        \
1534         for (; NULL; )
1535
1536 static inline bool memcg_kmem_enabled(void)
1537 {
1538         return false;
1539 }
1540
1541 static inline int memcg_cache_id(struct mem_cgroup *memcg)
1542 {
1543         return -1;
1544 }
1545
1546 static inline void memcg_get_cache_ids(void)
1547 {
1548 }
1549
1550 static inline void memcg_put_cache_ids(void)
1551 {
1552 }
1553
1554 static inline struct mem_cgroup *mem_cgroup_from_obj(void *p)
1555 {
1556        return NULL;
1557 }
1558
1559 #endif /* CONFIG_MEMCG_KMEM */
1560
1561 #endif /* _LINUX_MEMCONTROL_H */