Branch data Line data Source code
1 : : // SPDX-License-Identifier: GPL-2.0-or-later
2 : : /* memcontrol.c - 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 : : * Memory thresholds
11 : : * Copyright (C) 2009 Nokia Corporation
12 : : * Author: Kirill A. Shutemov
13 : : *
14 : : * Kernel Memory Controller
15 : : * Copyright (C) 2012 Parallels Inc. and Google Inc.
16 : : * Authors: Glauber Costa and Suleiman Souhlal
17 : : *
18 : : * Native page reclaim
19 : : * Charge lifetime sanitation
20 : : * Lockless page tracking & accounting
21 : : * Unified hierarchy configuration model
22 : : * Copyright (C) 2015 Red Hat, Inc., Johannes Weiner
23 : : */
24 : :
25 : : #include <linux/page_counter.h>
26 : : #include <linux/memcontrol.h>
27 : : #include <linux/cgroup.h>
28 : : #include <linux/pagewalk.h>
29 : : #include <linux/sched/mm.h>
30 : : #include <linux/shmem_fs.h>
31 : : #include <linux/hugetlb.h>
32 : : #include <linux/pagemap.h>
33 : : #include <linux/vm_event_item.h>
34 : : #include <linux/smp.h>
35 : : #include <linux/page-flags.h>
36 : : #include <linux/backing-dev.h>
37 : : #include <linux/bit_spinlock.h>
38 : : #include <linux/rcupdate.h>
39 : : #include <linux/limits.h>
40 : : #include <linux/export.h>
41 : : #include <linux/mutex.h>
42 : : #include <linux/rbtree.h>
43 : : #include <linux/slab.h>
44 : : #include <linux/swap.h>
45 : : #include <linux/swapops.h>
46 : : #include <linux/spinlock.h>
47 : : #include <linux/eventfd.h>
48 : : #include <linux/poll.h>
49 : : #include <linux/sort.h>
50 : : #include <linux/fs.h>
51 : : #include <linux/seq_file.h>
52 : : #include <linux/vmpressure.h>
53 : : #include <linux/mm_inline.h>
54 : : #include <linux/swap_cgroup.h>
55 : : #include <linux/cpu.h>
56 : : #include <linux/oom.h>
57 : : #include <linux/lockdep.h>
58 : : #include <linux/file.h>
59 : : #include <linux/tracehook.h>
60 : : #include <linux/psi.h>
61 : : #include <linux/seq_buf.h>
62 : : #include "internal.h"
63 : : #include <net/sock.h>
64 : : #include <net/ip.h>
65 : : #include "slab.h"
66 : :
67 : : #include <linux/uaccess.h>
68 : :
69 : : #include <trace/events/vmscan.h>
70 : :
71 : : struct cgroup_subsys memory_cgrp_subsys __read_mostly;
72 : : EXPORT_SYMBOL(memory_cgrp_subsys);
73 : :
74 : : struct mem_cgroup *root_mem_cgroup __read_mostly;
75 : :
76 : : #define MEM_CGROUP_RECLAIM_RETRIES 5
77 : :
78 : : /* Socket memory accounting disabled? */
79 : : static bool cgroup_memory_nosocket;
80 : :
81 : : /* Kernel memory accounting disabled? */
82 : : static bool cgroup_memory_nokmem;
83 : :
84 : : /* Whether the swap controller is active */
85 : : #ifdef CONFIG_MEMCG_SWAP
86 : : int do_swap_account __read_mostly;
87 : : #else
88 : : #define do_swap_account 0
89 : : #endif
90 : :
91 : : #ifdef CONFIG_CGROUP_WRITEBACK
92 : : static DECLARE_WAIT_QUEUE_HEAD(memcg_cgwb_frn_waitq);
93 : : #endif
94 : :
95 : : /* Whether legacy memory+swap accounting is active */
96 : : static bool do_memsw_account(void)
97 : : {
98 : : return !cgroup_subsys_on_dfl(memory_cgrp_subsys) && do_swap_account;
99 : : }
100 : :
101 : : static const char *const mem_cgroup_lru_names[] = {
102 : : "inactive_anon",
103 : : "active_anon",
104 : : "inactive_file",
105 : : "active_file",
106 : : "unevictable",
107 : : };
108 : :
109 : : #define THRESHOLDS_EVENTS_TARGET 128
110 : : #define SOFTLIMIT_EVENTS_TARGET 1024
111 : : #define NUMAINFO_EVENTS_TARGET 1024
112 : :
113 : : /*
114 : : * Cgroups above their limits are maintained in a RB-Tree, independent of
115 : : * their hierarchy representation
116 : : */
117 : :
118 : : struct mem_cgroup_tree_per_node {
119 : : struct rb_root rb_root;
120 : : struct rb_node *rb_rightmost;
121 : : spinlock_t lock;
122 : : };
123 : :
124 : : struct mem_cgroup_tree {
125 : : struct mem_cgroup_tree_per_node *rb_tree_per_node[MAX_NUMNODES];
126 : : };
127 : :
128 : : static struct mem_cgroup_tree soft_limit_tree __read_mostly;
129 : :
130 : : /* for OOM */
131 : : struct mem_cgroup_eventfd_list {
132 : : struct list_head list;
133 : : struct eventfd_ctx *eventfd;
134 : : };
135 : :
136 : : /*
137 : : * cgroup_event represents events which userspace want to receive.
138 : : */
139 : : struct mem_cgroup_event {
140 : : /*
141 : : * memcg which the event belongs to.
142 : : */
143 : : struct mem_cgroup *memcg;
144 : : /*
145 : : * eventfd to signal userspace about the event.
146 : : */
147 : : struct eventfd_ctx *eventfd;
148 : : /*
149 : : * Each of these stored in a list by the cgroup.
150 : : */
151 : : struct list_head list;
152 : : /*
153 : : * register_event() callback will be used to add new userspace
154 : : * waiter for changes related to this event. Use eventfd_signal()
155 : : * on eventfd to send notification to userspace.
156 : : */
157 : : int (*register_event)(struct mem_cgroup *memcg,
158 : : struct eventfd_ctx *eventfd, const char *args);
159 : : /*
160 : : * unregister_event() callback will be called when userspace closes
161 : : * the eventfd or on cgroup removing. This callback must be set,
162 : : * if you want provide notification functionality.
163 : : */
164 : : void (*unregister_event)(struct mem_cgroup *memcg,
165 : : struct eventfd_ctx *eventfd);
166 : : /*
167 : : * All fields below needed to unregister event when
168 : : * userspace closes eventfd.
169 : : */
170 : : poll_table pt;
171 : : wait_queue_head_t *wqh;
172 : : wait_queue_entry_t wait;
173 : : struct work_struct remove;
174 : : };
175 : :
176 : : static void mem_cgroup_threshold(struct mem_cgroup *memcg);
177 : : static void mem_cgroup_oom_notify(struct mem_cgroup *memcg);
178 : :
179 : : /* Stuffs for move charges at task migration. */
180 : : /*
181 : : * Types of charges to be moved.
182 : : */
183 : : #define MOVE_ANON 0x1U
184 : : #define MOVE_FILE 0x2U
185 : : #define MOVE_MASK (MOVE_ANON | MOVE_FILE)
186 : :
187 : : /* "mc" and its members are protected by cgroup_mutex */
188 : : static struct move_charge_struct {
189 : : spinlock_t lock; /* for from, to */
190 : : struct mm_struct *mm;
191 : : struct mem_cgroup *from;
192 : : struct mem_cgroup *to;
193 : : unsigned long flags;
194 : : unsigned long precharge;
195 : : unsigned long moved_charge;
196 : : unsigned long moved_swap;
197 : : struct task_struct *moving_task; /* a task moving charges */
198 : : wait_queue_head_t waitq; /* a waitq for other context */
199 : : } mc = {
200 : : .lock = __SPIN_LOCK_UNLOCKED(mc.lock),
201 : : .waitq = __WAIT_QUEUE_HEAD_INITIALIZER(mc.waitq),
202 : : };
203 : :
204 : : /*
205 : : * Maximum loops in mem_cgroup_hierarchical_reclaim(), used for soft
206 : : * limit reclaim to prevent infinite loops, if they ever occur.
207 : : */
208 : : #define MEM_CGROUP_MAX_RECLAIM_LOOPS 100
209 : : #define MEM_CGROUP_MAX_SOFT_LIMIT_RECLAIM_LOOPS 2
210 : :
211 : : enum charge_type {
212 : : MEM_CGROUP_CHARGE_TYPE_CACHE = 0,
213 : : MEM_CGROUP_CHARGE_TYPE_ANON,
214 : : MEM_CGROUP_CHARGE_TYPE_SWAPOUT, /* for accounting swapcache */
215 : : MEM_CGROUP_CHARGE_TYPE_DROP, /* a page was unused swap cache */
216 : : NR_CHARGE_TYPE,
217 : : };
218 : :
219 : : /* for encoding cft->private value on file */
220 : : enum res_type {
221 : : _MEM,
222 : : _MEMSWAP,
223 : : _OOM_TYPE,
224 : : _KMEM,
225 : : _TCP,
226 : : };
227 : :
228 : : #define MEMFILE_PRIVATE(x, val) ((x) << 16 | (val))
229 : : #define MEMFILE_TYPE(val) ((val) >> 16 & 0xffff)
230 : : #define MEMFILE_ATTR(val) ((val) & 0xffff)
231 : : /* Used for OOM nofiier */
232 : : #define OOM_CONTROL (0)
233 : :
234 : : /*
235 : : * Iteration constructs for visiting all cgroups (under a tree). If
236 : : * loops are exited prematurely (break), mem_cgroup_iter_break() must
237 : : * be used for reference counting.
238 : : */
239 : : #define for_each_mem_cgroup_tree(iter, root) \
240 : : for (iter = mem_cgroup_iter(root, NULL, NULL); \
241 : : iter != NULL; \
242 : : iter = mem_cgroup_iter(root, iter, NULL))
243 : :
244 : : #define for_each_mem_cgroup(iter) \
245 : : for (iter = mem_cgroup_iter(NULL, NULL, NULL); \
246 : : iter != NULL; \
247 : : iter = mem_cgroup_iter(NULL, iter, NULL))
248 : :
249 : 0 : static inline bool should_force_charge(void)
250 : : {
251 [ # # # # : 0 : return tsk_is_oom_victim(current) || fatal_signal_pending(current) ||
# # ]
252 : 0 : (current->flags & PF_EXITING);
253 : : }
254 : :
255 : : /* Some nice accessors for the vmpressure. */
256 : 0 : struct vmpressure *memcg_to_vmpressure(struct mem_cgroup *memcg)
257 : : {
258 [ # # ]: 0 : if (!memcg)
259 : 0 : memcg = root_mem_cgroup;
260 : 0 : return &memcg->vmpressure;
261 : : }
262 : :
263 : 0 : struct cgroup_subsys_state *vmpressure_to_css(struct vmpressure *vmpr)
264 : : {
265 : 0 : return &container_of(vmpr, struct mem_cgroup, vmpressure)->css;
266 : : }
267 : :
268 : : #ifdef CONFIG_MEMCG_KMEM
269 : : /*
270 : : * This will be the memcg's index in each cache's ->memcg_params.memcg_caches.
271 : : * The main reason for not using cgroup id for this:
272 : : * this works better in sparse environments, where we have a lot of memcgs,
273 : : * but only a few kmem-limited. Or also, if we have, for instance, 200
274 : : * memcgs, and none but the 200th is kmem-limited, we'd have to have a
275 : : * 200 entry array for that.
276 : : *
277 : : * The current size of the caches array is stored in memcg_nr_cache_ids. It
278 : : * will double each time we have to increase it.
279 : : */
280 : : static DEFINE_IDA(memcg_cache_ida);
281 : : int memcg_nr_cache_ids;
282 : :
283 : : /* Protects memcg_nr_cache_ids */
284 : : static DECLARE_RWSEM(memcg_cache_ids_sem);
285 : :
286 : 50928 : void memcg_get_cache_ids(void)
287 : : {
288 : 50928 : down_read(&memcg_cache_ids_sem);
289 : 50928 : }
290 : :
291 : 50928 : void memcg_put_cache_ids(void)
292 : : {
293 : 50928 : up_read(&memcg_cache_ids_sem);
294 : 50928 : }
295 : :
296 : : /*
297 : : * MIN_SIZE is different than 1, because we would like to avoid going through
298 : : * the alloc/free process all the time. In a small machine, 4 kmem-limited
299 : : * cgroups is a reasonable guess. In the future, it could be a parameter or
300 : : * tunable, but that is strictly not necessary.
301 : : *
302 : : * MAX_SIZE should be as large as the number of cgrp_ids. Ideally, we could get
303 : : * this constant directly from cgroup, but it is understandable that this is
304 : : * better kept as an internal representation in cgroup.c. In any case, the
305 : : * cgrp_id space is not getting any smaller, and we don't have to necessarily
306 : : * increase ours as well if it increases.
307 : : */
308 : : #define MEMCG_CACHES_MIN_SIZE 4
309 : : #define MEMCG_CACHES_MAX_SIZE MEM_CGROUP_ID_MAX
310 : :
311 : : /*
312 : : * A lot of the calls to the cache allocation functions are expected to be
313 : : * inlined by the compiler. Since the calls to memcg_kmem_get_cache are
314 : : * conditional to this static branch, we'll have to allow modules that does
315 : : * kmem_cache_alloc and the such to see this symbol as well
316 : : */
317 : : DEFINE_STATIC_KEY_FALSE(memcg_kmem_enabled_key);
318 : : EXPORT_SYMBOL(memcg_kmem_enabled_key);
319 : :
320 : : struct workqueue_struct *memcg_kmem_cache_wq;
321 : : #endif
322 : :
323 : : static int memcg_shrinker_map_size;
324 : : static DEFINE_MUTEX(memcg_shrinker_map_mutex);
325 : :
326 : 0 : static void memcg_free_shrinker_map_rcu(struct rcu_head *head)
327 : : {
328 : 0 : kvfree(container_of(head, struct memcg_shrinker_map, rcu));
329 : 0 : }
330 : :
331 : 0 : static int memcg_expand_one_shrinker_map(struct mem_cgroup *memcg,
332 : : int size, int old_size)
333 : : {
334 : : struct memcg_shrinker_map *new, *old;
335 : : int nid;
336 : :
337 : : lockdep_assert_held(&memcg_shrinker_map_mutex);
338 : :
339 [ # # ]: 0 : for_each_node(nid) {
340 : 0 : old = rcu_dereference_protected(
341 : : mem_cgroup_nodeinfo(memcg, nid)->shrinker_map, true);
342 : : /* Not yet online memcg */
343 [ # # ]: 0 : if (!old)
344 : : return 0;
345 : :
346 : 0 : new = kvmalloc(sizeof(*new) + size, GFP_KERNEL);
347 [ # # ]: 0 : if (!new)
348 : : return -ENOMEM;
349 : :
350 : : /* Set all old bits, clear all new bits */
351 : 0 : memset(new->map, (int)0xff, old_size);
352 : 0 : memset((void *)new->map + old_size, 0, size - old_size);
353 : :
354 : 0 : rcu_assign_pointer(memcg->nodeinfo[nid]->shrinker_map, new);
355 : 0 : call_rcu(&old->rcu, memcg_free_shrinker_map_rcu);
356 : : }
357 : :
358 : : return 0;
359 : : }
360 : :
361 : 0 : static void memcg_free_shrinker_maps(struct mem_cgroup *memcg)
362 : : {
363 : : struct mem_cgroup_per_node *pn;
364 : : struct memcg_shrinker_map *map;
365 : : int nid;
366 : :
367 [ # # ]: 0 : if (mem_cgroup_is_root(memcg))
368 : 0 : return;
369 : :
370 [ # # ]: 0 : for_each_node(nid) {
371 : : pn = mem_cgroup_nodeinfo(memcg, nid);
372 : 0 : map = rcu_dereference_protected(pn->shrinker_map, true);
373 [ # # ]: 0 : if (map)
374 : 0 : kvfree(map);
375 : : rcu_assign_pointer(pn->shrinker_map, NULL);
376 : : }
377 : : }
378 : :
379 : 207 : static int memcg_alloc_shrinker_maps(struct mem_cgroup *memcg)
380 : : {
381 : : struct memcg_shrinker_map *map;
382 : : int nid, size, ret = 0;
383 : :
384 [ - + ]: 207 : if (mem_cgroup_is_root(memcg))
385 : : return 0;
386 : :
387 : 0 : mutex_lock(&memcg_shrinker_map_mutex);
388 : 0 : size = memcg_shrinker_map_size;
389 [ # # ]: 0 : for_each_node(nid) {
390 : 0 : map = kvzalloc(sizeof(*map) + size, GFP_KERNEL);
391 [ # # ]: 0 : if (!map) {
392 : 0 : memcg_free_shrinker_maps(memcg);
393 : : ret = -ENOMEM;
394 : 0 : break;
395 : : }
396 : 0 : rcu_assign_pointer(memcg->nodeinfo[nid]->shrinker_map, map);
397 : : }
398 : 0 : mutex_unlock(&memcg_shrinker_map_mutex);
399 : :
400 : 0 : return ret;
401 : : }
402 : :
403 : 8902 : int memcg_expand_shrinker_maps(int new_id)
404 : : {
405 : : int size, old_size, ret = 0;
406 : : struct mem_cgroup *memcg;
407 : :
408 : 8902 : size = DIV_ROUND_UP(new_id + 1, BITS_PER_LONG) * sizeof(unsigned long);
409 : 8902 : old_size = memcg_shrinker_map_size;
410 [ + + ]: 8902 : if (size <= old_size)
411 : : return 0;
412 : :
413 : 414 : mutex_lock(&memcg_shrinker_map_mutex);
414 [ + + ]: 414 : if (!root_mem_cgroup)
415 : : goto unlock;
416 : :
417 [ - + ]: 207 : for_each_mem_cgroup(memcg) {
418 [ # # ]: 0 : if (mem_cgroup_is_root(memcg))
419 : 0 : continue;
420 : 0 : ret = memcg_expand_one_shrinker_map(memcg, size, old_size);
421 [ # # ]: 0 : if (ret) {
422 : 0 : mem_cgroup_iter_break(NULL, memcg);
423 : 0 : goto unlock;
424 : : }
425 : : }
426 : : unlock:
427 [ + - ]: 414 : if (!ret)
428 : 414 : memcg_shrinker_map_size = size;
429 : 414 : mutex_unlock(&memcg_shrinker_map_mutex);
430 : 414 : return ret;
431 : : }
432 : :
433 : 3103 : void memcg_set_shrinker_bit(struct mem_cgroup *memcg, int nid, int shrinker_id)
434 : : {
435 [ - + # # ]: 3103 : if (shrinker_id >= 0 && memcg && !mem_cgroup_is_root(memcg)) {
436 : : struct memcg_shrinker_map *map;
437 : :
438 : : rcu_read_lock();
439 : 0 : map = rcu_dereference(memcg->nodeinfo[nid]->shrinker_map);
440 : : /* Pairs with smp mb in shrink_slab() */
441 : 0 : smp_mb__before_atomic();
442 : 0 : set_bit(shrinker_id, map->map);
443 : : rcu_read_unlock();
444 : : }
445 : 3103 : }
446 : :
447 : : /**
448 : : * mem_cgroup_css_from_page - css of the memcg associated with a page
449 : : * @page: page of interest
450 : : *
451 : : * If memcg is bound to the default hierarchy, css of the memcg associated
452 : : * with @page is returned. The returned css remains associated with @page
453 : : * until it is released.
454 : : *
455 : : * If memcg is bound to a traditional hierarchy, the css of root_mem_cgroup
456 : : * is returned.
457 : : */
458 : 0 : struct cgroup_subsys_state *mem_cgroup_css_from_page(struct page *page)
459 : : {
460 : : struct mem_cgroup *memcg;
461 : :
462 : 0 : memcg = page->mem_cgroup;
463 : :
464 [ # # # # ]: 0 : if (!memcg || !cgroup_subsys_on_dfl(memory_cgrp_subsys))
465 : 0 : memcg = root_mem_cgroup;
466 : :
467 : 0 : return &memcg->css;
468 : : }
469 : :
470 : : /**
471 : : * page_cgroup_ino - return inode number of the memcg a page is charged to
472 : : * @page: the page
473 : : *
474 : : * Look up the closest online ancestor of the memory cgroup @page is charged to
475 : : * and return its inode number or 0 if @page is not charged to any cgroup. It
476 : : * is safe to call this function without holding a reference to @page.
477 : : *
478 : : * Note, this function is inherently racy, because there is nothing to prevent
479 : : * the cgroup inode from getting torn down and potentially reallocated a moment
480 : : * after page_cgroup_ino() returns, so it only should be used by callers that
481 : : * do not care (such as procfs interfaces).
482 : : */
483 : 0 : ino_t page_cgroup_ino(struct page *page)
484 : : {
485 : : struct mem_cgroup *memcg;
486 : : unsigned long ino = 0;
487 : :
488 : : rcu_read_lock();
489 [ # # # # ]: 0 : if (PageSlab(page) && !PageTail(page))
490 : 0 : memcg = memcg_from_slab_page(page);
491 : : else
492 : 0 : memcg = READ_ONCE(page->mem_cgroup);
493 [ # # # # ]: 0 : while (memcg && !(memcg->css.flags & CSS_ONLINE))
494 : : memcg = parent_mem_cgroup(memcg);
495 [ # # ]: 0 : if (memcg)
496 : 0 : ino = cgroup_ino(memcg->css.cgroup);
497 : : rcu_read_unlock();
498 : 0 : return ino;
499 : : }
500 : :
501 : : static struct mem_cgroup_per_node *
502 : : mem_cgroup_page_nodeinfo(struct mem_cgroup *memcg, struct page *page)
503 : : {
504 : : int nid = page_to_nid(page);
505 : :
506 : 0 : return memcg->nodeinfo[nid];
507 : : }
508 : :
509 : : static struct mem_cgroup_tree_per_node *
510 : : soft_limit_tree_node(int nid)
511 : : {
512 : 0 : return soft_limit_tree.rb_tree_per_node[nid];
513 : : }
514 : :
515 : : static struct mem_cgroup_tree_per_node *
516 : : soft_limit_tree_from_page(struct page *page)
517 : : {
518 : : int nid = page_to_nid(page);
519 : :
520 : 0 : return soft_limit_tree.rb_tree_per_node[nid];
521 : : }
522 : :
523 : 0 : static void __mem_cgroup_insert_exceeded(struct mem_cgroup_per_node *mz,
524 : : struct mem_cgroup_tree_per_node *mctz,
525 : : unsigned long new_usage_in_excess)
526 : : {
527 : 0 : struct rb_node **p = &mctz->rb_root.rb_node;
528 : : struct rb_node *parent = NULL;
529 : : struct mem_cgroup_per_node *mz_node;
530 : : bool rightmost = true;
531 : :
532 [ # # ]: 0 : if (mz->on_tree)
533 : : return;
534 : :
535 : 0 : mz->usage_in_excess = new_usage_in_excess;
536 [ # # ]: 0 : if (!mz->usage_in_excess)
537 : : return;
538 [ # # ]: 0 : while (*p) {
539 : : parent = *p;
540 : : mz_node = rb_entry(parent, struct mem_cgroup_per_node,
541 : : tree_node);
542 [ # # ]: 0 : if (mz->usage_in_excess < mz_node->usage_in_excess) {
543 : 0 : p = &(*p)->rb_left;
544 : : rightmost = false;
545 : : }
546 : :
547 : : /*
548 : : * We can't avoid mem cgroups that are over their soft
549 : : * limit by the same amount
550 : : */
551 [ # # ]: 0 : else if (mz->usage_in_excess >= mz_node->usage_in_excess)
552 : 0 : p = &(*p)->rb_right;
553 : : }
554 : :
555 [ # # ]: 0 : if (rightmost)
556 : 0 : mctz->rb_rightmost = &mz->tree_node;
557 : :
558 : 0 : rb_link_node(&mz->tree_node, parent, p);
559 : 0 : rb_insert_color(&mz->tree_node, &mctz->rb_root);
560 : 0 : mz->on_tree = true;
561 : : }
562 : :
563 : 0 : static void __mem_cgroup_remove_exceeded(struct mem_cgroup_per_node *mz,
564 : : struct mem_cgroup_tree_per_node *mctz)
565 : : {
566 [ # # ]: 0 : if (!mz->on_tree)
567 : 0 : return;
568 : :
569 [ # # ]: 0 : if (&mz->tree_node == mctz->rb_rightmost)
570 : 0 : mctz->rb_rightmost = rb_prev(&mz->tree_node);
571 : :
572 : 0 : rb_erase(&mz->tree_node, &mctz->rb_root);
573 : 0 : mz->on_tree = false;
574 : : }
575 : :
576 : 0 : static void mem_cgroup_remove_exceeded(struct mem_cgroup_per_node *mz,
577 : : struct mem_cgroup_tree_per_node *mctz)
578 : : {
579 : : unsigned long flags;
580 : :
581 : 0 : spin_lock_irqsave(&mctz->lock, flags);
582 : 0 : __mem_cgroup_remove_exceeded(mz, mctz);
583 : : spin_unlock_irqrestore(&mctz->lock, flags);
584 : 0 : }
585 : :
586 : : static unsigned long soft_limit_excess(struct mem_cgroup *memcg)
587 : : {
588 : : unsigned long nr_pages = page_counter_read(&memcg->memory);
589 : : unsigned long soft_limit = READ_ONCE(memcg->soft_limit);
590 : : unsigned long excess = 0;
591 : :
592 [ # # # # : 0 : if (nr_pages > soft_limit)
# # # # #
# ]
593 : 0 : excess = nr_pages - soft_limit;
594 : :
595 : : return excess;
596 : : }
597 : :
598 : 0 : static void mem_cgroup_update_tree(struct mem_cgroup *memcg, struct page *page)
599 : : {
600 : : unsigned long excess;
601 : : struct mem_cgroup_per_node *mz;
602 : : struct mem_cgroup_tree_per_node *mctz;
603 : :
604 : : mctz = soft_limit_tree_from_page(page);
605 [ # # ]: 0 : if (!mctz)
606 : 0 : return;
607 : : /*
608 : : * Necessary to update all ancestors when hierarchy is used.
609 : : * because their event counter is not touched.
610 : : */
611 [ # # ]: 0 : for (; memcg; memcg = parent_mem_cgroup(memcg)) {
612 : : mz = mem_cgroup_page_nodeinfo(memcg, page);
613 : : excess = soft_limit_excess(memcg);
614 : : /*
615 : : * We have to update the tree if mz is on RB-tree or
616 : : * mem is over its softlimit.
617 : : */
618 [ # # # # ]: 0 : if (excess || mz->on_tree) {
619 : : unsigned long flags;
620 : :
621 : 0 : spin_lock_irqsave(&mctz->lock, flags);
622 : : /* if on-tree, remove it */
623 [ # # ]: 0 : if (mz->on_tree)
624 : 0 : __mem_cgroup_remove_exceeded(mz, mctz);
625 : : /*
626 : : * Insert again. mz->usage_in_excess will be updated.
627 : : * If excess is 0, no tree ops.
628 : : */
629 : 0 : __mem_cgroup_insert_exceeded(mz, mctz, excess);
630 : : spin_unlock_irqrestore(&mctz->lock, flags);
631 : : }
632 : : }
633 : : }
634 : :
635 : 0 : static void mem_cgroup_remove_from_trees(struct mem_cgroup *memcg)
636 : : {
637 : : struct mem_cgroup_tree_per_node *mctz;
638 : : struct mem_cgroup_per_node *mz;
639 : : int nid;
640 : :
641 [ # # ]: 0 : for_each_node(nid) {
642 : : mz = mem_cgroup_nodeinfo(memcg, nid);
643 : : mctz = soft_limit_tree_node(nid);
644 [ # # ]: 0 : if (mctz)
645 : 0 : mem_cgroup_remove_exceeded(mz, mctz);
646 : : }
647 : 0 : }
648 : :
649 : : static struct mem_cgroup_per_node *
650 : 0 : __mem_cgroup_largest_soft_limit_node(struct mem_cgroup_tree_per_node *mctz)
651 : : {
652 : : struct mem_cgroup_per_node *mz;
653 : :
654 : : retry:
655 : : mz = NULL;
656 [ # # ]: 0 : if (!mctz->rb_rightmost)
657 : : goto done; /* Nothing to reclaim from */
658 : :
659 : 0 : mz = rb_entry(mctz->rb_rightmost,
660 : : struct mem_cgroup_per_node, tree_node);
661 : : /*
662 : : * Remove the node now but someone else can add it back,
663 : : * we will to add it back at the end of reclaim to its correct
664 : : * position in the tree.
665 : : */
666 : 0 : __mem_cgroup_remove_exceeded(mz, mctz);
667 [ # # # # ]: 0 : if (!soft_limit_excess(mz->memcg) ||
668 : : !css_tryget_online(&mz->memcg->css))
669 : : goto retry;
670 : : done:
671 : 0 : return mz;
672 : : }
673 : :
674 : : static struct mem_cgroup_per_node *
675 : 0 : mem_cgroup_largest_soft_limit_node(struct mem_cgroup_tree_per_node *mctz)
676 : : {
677 : : struct mem_cgroup_per_node *mz;
678 : :
679 : : spin_lock_irq(&mctz->lock);
680 : 0 : mz = __mem_cgroup_largest_soft_limit_node(mctz);
681 : : spin_unlock_irq(&mctz->lock);
682 : 0 : return mz;
683 : : }
684 : :
685 : : /**
686 : : * __mod_memcg_state - update cgroup memory statistics
687 : : * @memcg: the memory cgroup
688 : : * @idx: the stat item - can be enum memcg_stat_item or enum node_stat_item
689 : : * @val: delta to add to the counter, can be negative
690 : : */
691 : 0 : void __mod_memcg_state(struct mem_cgroup *memcg, int idx, int val)
692 : : {
693 : : long x;
694 : :
695 [ # # ]: 0 : if (mem_cgroup_disabled())
696 : 0 : return;
697 : :
698 : 0 : x = val + __this_cpu_read(memcg->vmstats_percpu->stat[idx]);
699 [ # # ]: 0 : if (unlikely(abs(x) > MEMCG_CHARGE_BATCH)) {
700 : : struct mem_cgroup *mi;
701 : :
702 : : /*
703 : : * Batch local counters to keep them in sync with
704 : : * the hierarchical ones.
705 : : */
706 : 0 : __this_cpu_add(memcg->vmstats_local->stat[idx], x);
707 [ # # ]: 0 : for (mi = memcg; mi; mi = parent_mem_cgroup(mi))
708 : 0 : atomic_long_add(x, &mi->vmstats[idx]);
709 : : x = 0;
710 : : }
711 : 0 : __this_cpu_write(memcg->vmstats_percpu->stat[idx], x);
712 : : }
713 : :
714 : : static struct mem_cgroup_per_node *
715 : : parent_nodeinfo(struct mem_cgroup_per_node *pn, int nid)
716 : : {
717 : : struct mem_cgroup *parent;
718 : :
719 : 0 : parent = parent_mem_cgroup(pn->memcg);
720 [ # # # # : 0 : if (!parent)
# # ]
721 : : return NULL;
722 : : return mem_cgroup_nodeinfo(parent, nid);
723 : : }
724 : :
725 : : /**
726 : : * __mod_lruvec_state - update lruvec memory statistics
727 : : * @lruvec: the lruvec
728 : : * @idx: the stat item
729 : : * @val: delta to add to the counter, can be negative
730 : : *
731 : : * The lruvec is the intersection of the NUMA node and a cgroup. This
732 : : * function updates the all three counters that are affected by a
733 : : * change of state at this level: per-node, per-cgroup, per-lruvec.
734 : : */
735 : 51657804 : void __mod_lruvec_state(struct lruvec *lruvec, enum node_stat_item idx,
736 : : int val)
737 : : {
738 : : pg_data_t *pgdat = lruvec_pgdat(lruvec);
739 : : struct mem_cgroup_per_node *pn;
740 : : struct mem_cgroup *memcg;
741 : : long x;
742 : :
743 : : /* Update node */
744 : 51657804 : __mod_node_page_state(pgdat, idx, val);
745 : :
746 [ - + ]: 51657798 : if (mem_cgroup_disabled())
747 : 51657798 : return;
748 : :
749 : : pn = container_of(lruvec, struct mem_cgroup_per_node, lruvec);
750 : 0 : memcg = pn->memcg;
751 : :
752 : : /* Update memcg */
753 : 0 : __mod_memcg_state(memcg, idx, val);
754 : :
755 : : /* Update lruvec */
756 : 0 : __this_cpu_add(pn->lruvec_stat_local->count[idx], val);
757 : :
758 : 0 : x = val + __this_cpu_read(pn->lruvec_stat_cpu->count[idx]);
759 [ # # ]: 0 : if (unlikely(abs(x) > MEMCG_CHARGE_BATCH)) {
760 : : struct mem_cgroup_per_node *pi;
761 : :
762 [ # # ]: 0 : for (pi = pn; pi; pi = parent_nodeinfo(pi, pgdat->node_id))
763 : 0 : atomic_long_add(x, &pi->lruvec_stat[idx]);
764 : : x = 0;
765 : : }
766 : 0 : __this_cpu_write(pn->lruvec_stat_cpu->count[idx], x);
767 : : }
768 : :
769 : 0 : void __mod_lruvec_slab_state(void *p, enum node_stat_item idx, int val)
770 : : {
771 : : struct page *page = virt_to_head_page(p);
772 : : pg_data_t *pgdat = page_pgdat(page);
773 : : struct mem_cgroup *memcg;
774 : : struct lruvec *lruvec;
775 : :
776 : : rcu_read_lock();
777 : : memcg = memcg_from_slab_page(page);
778 : :
779 : : /* Untracked pages have no memcg, no lruvec. Update only the node */
780 [ # # # # ]: 0 : if (!memcg || memcg == root_mem_cgroup) {
781 : 0 : __mod_node_page_state(pgdat, idx, val);
782 : : } else {
783 : : lruvec = mem_cgroup_lruvec(pgdat, memcg);
784 : 0 : __mod_lruvec_state(lruvec, idx, val);
785 : : }
786 : : rcu_read_unlock();
787 : 0 : }
788 : :
789 : 595154 : void mod_memcg_obj_state(void *p, int idx, int val)
790 : : {
791 : : struct mem_cgroup *memcg;
792 : :
793 : : rcu_read_lock();
794 : 598281 : memcg = mem_cgroup_from_obj(p);
795 [ - + ]: 598150 : if (memcg)
796 : 0 : mod_memcg_state(memcg, idx, val);
797 : : rcu_read_unlock();
798 : 598274 : }
799 : :
800 : : /**
801 : : * __count_memcg_events - account VM events in a cgroup
802 : : * @memcg: the memory cgroup
803 : : * @idx: the event item
804 : : * @count: the number of events that occured
805 : : */
806 : 0 : void __count_memcg_events(struct mem_cgroup *memcg, enum vm_event_item idx,
807 : : unsigned long count)
808 : : {
809 : : unsigned long x;
810 : :
811 [ # # ]: 0 : if (mem_cgroup_disabled())
812 : 0 : return;
813 : :
814 : 0 : x = count + __this_cpu_read(memcg->vmstats_percpu->events[idx]);
815 [ # # ]: 0 : if (unlikely(x > MEMCG_CHARGE_BATCH)) {
816 : : struct mem_cgroup *mi;
817 : :
818 : : /*
819 : : * Batch local counters to keep them in sync with
820 : : * the hierarchical ones.
821 : : */
822 : 0 : __this_cpu_add(memcg->vmstats_local->events[idx], x);
823 [ # # ]: 0 : for (mi = memcg; mi; mi = parent_mem_cgroup(mi))
824 : 0 : atomic_long_add(x, &mi->vmevents[idx]);
825 : : x = 0;
826 : : }
827 : 0 : __this_cpu_write(memcg->vmstats_percpu->events[idx], x);
828 : : }
829 : :
830 : : static unsigned long memcg_events(struct mem_cgroup *memcg, int event)
831 : : {
832 : 0 : return atomic_long_read(&memcg->vmevents[event]);
833 : : }
834 : :
835 : 0 : static unsigned long memcg_events_local(struct mem_cgroup *memcg, int event)
836 : : {
837 : : long x = 0;
838 : : int cpu;
839 : :
840 [ # # ]: 0 : for_each_possible_cpu(cpu)
841 : 0 : x += per_cpu(memcg->vmstats_local->events[event], cpu);
842 : 0 : return x;
843 : : }
844 : :
845 : 0 : static void mem_cgroup_charge_statistics(struct mem_cgroup *memcg,
846 : : struct page *page,
847 : : bool compound, int nr_pages)
848 : : {
849 : : /*
850 : : * Here, RSS means 'mapped anon' and anon's SwapCache. Shmem/tmpfs is
851 : : * counted as CACHE even if it's on ANON LRU.
852 : : */
853 [ # # ]: 0 : if (PageAnon(page))
854 : 0 : __mod_memcg_state(memcg, MEMCG_RSS, nr_pages);
855 : : else {
856 : 0 : __mod_memcg_state(memcg, MEMCG_CACHE, nr_pages);
857 [ # # ]: 0 : if (PageSwapBacked(page))
858 : 0 : __mod_memcg_state(memcg, NR_SHMEM, nr_pages);
859 : : }
860 : :
861 [ # # ]: 0 : if (compound) {
862 : : VM_BUG_ON_PAGE(!PageTransHuge(page), page);
863 : 0 : __mod_memcg_state(memcg, MEMCG_RSS_HUGE, nr_pages);
864 : : }
865 : :
866 : : /* pagein of a big page is an event. So, ignore page size */
867 [ # # ]: 0 : if (nr_pages > 0)
868 : 0 : __count_memcg_events(memcg, PGPGIN, 1);
869 : : else {
870 : 0 : __count_memcg_events(memcg, PGPGOUT, 1);
871 : 0 : nr_pages = -nr_pages; /* for event */
872 : : }
873 : :
874 : 0 : __this_cpu_add(memcg->vmstats_percpu->nr_page_events, nr_pages);
875 : 0 : }
876 : :
877 : 0 : static bool mem_cgroup_event_ratelimit(struct mem_cgroup *memcg,
878 : : enum mem_cgroup_events_target target)
879 : : {
880 : : unsigned long val, next;
881 : :
882 : 0 : val = __this_cpu_read(memcg->vmstats_percpu->nr_page_events);
883 : 0 : next = __this_cpu_read(memcg->vmstats_percpu->targets[target]);
884 : : /* from time_after() in jiffies.h */
885 [ # # ]: 0 : if ((long)(next - val) < 0) {
886 [ # # # # ]: 0 : switch (target) {
887 : : case MEM_CGROUP_TARGET_THRESH:
888 : 0 : next = val + THRESHOLDS_EVENTS_TARGET;
889 : 0 : break;
890 : : case MEM_CGROUP_TARGET_SOFTLIMIT:
891 : 0 : next = val + SOFTLIMIT_EVENTS_TARGET;
892 : 0 : break;
893 : : case MEM_CGROUP_TARGET_NUMAINFO:
894 : 0 : next = val + NUMAINFO_EVENTS_TARGET;
895 : 0 : break;
896 : : default:
897 : : break;
898 : : }
899 : 0 : __this_cpu_write(memcg->vmstats_percpu->targets[target], next);
900 : 0 : return true;
901 : : }
902 : : return false;
903 : : }
904 : :
905 : : /*
906 : : * Check events in order.
907 : : *
908 : : */
909 : 0 : static void memcg_check_events(struct mem_cgroup *memcg, struct page *page)
910 : : {
911 : : /* threshold event is triggered in finer grain than soft limit */
912 [ # # ]: 0 : if (unlikely(mem_cgroup_event_ratelimit(memcg,
913 : : MEM_CGROUP_TARGET_THRESH))) {
914 : : bool do_softlimit;
915 : : bool do_numainfo __maybe_unused;
916 : :
917 : 0 : do_softlimit = mem_cgroup_event_ratelimit(memcg,
918 : : MEM_CGROUP_TARGET_SOFTLIMIT);
919 : : #if MAX_NUMNODES > 1
920 : : do_numainfo = mem_cgroup_event_ratelimit(memcg,
921 : : MEM_CGROUP_TARGET_NUMAINFO);
922 : : #endif
923 : 0 : mem_cgroup_threshold(memcg);
924 [ # # ]: 0 : if (unlikely(do_softlimit))
925 : 0 : mem_cgroup_update_tree(memcg, page);
926 : : #if MAX_NUMNODES > 1
927 : : if (unlikely(do_numainfo))
928 : : atomic_inc(&memcg->numainfo_events);
929 : : #endif
930 : : }
931 : 0 : }
932 : :
933 : 0 : struct mem_cgroup *mem_cgroup_from_task(struct task_struct *p)
934 : : {
935 : : /*
936 : : * mm_update_next_owner() may clear mm->owner to NULL
937 : : * if it races with swapoff, page migration, etc.
938 : : * So this can be called with p == NULL.
939 : : */
940 [ # # # # : 0 : if (unlikely(!p))
# # # # #
# # # ]
941 : : return NULL;
942 : :
943 : 0 : return mem_cgroup_from_css(task_css(p, memory_cgrp_id));
944 : : }
945 : : EXPORT_SYMBOL(mem_cgroup_from_task);
946 : :
947 : : /**
948 : : * get_mem_cgroup_from_mm: Obtain a reference on given mm_struct's memcg.
949 : : * @mm: mm from which memcg should be extracted. It can be NULL.
950 : : *
951 : : * Obtain a reference on mm->memcg and returns it if successful. Otherwise
952 : : * root_mem_cgroup is returned. However if mem_cgroup is disabled, NULL is
953 : : * returned.
954 : : */
955 : 7038 : struct mem_cgroup *get_mem_cgroup_from_mm(struct mm_struct *mm)
956 : : {
957 : : struct mem_cgroup *memcg;
958 : :
959 [ - + ]: 7038 : if (mem_cgroup_disabled())
960 : : return NULL;
961 : :
962 : : rcu_read_lock();
963 : : do {
964 : : /*
965 : : * Page cache insertions can happen withou an
966 : : * actual mm context, e.g. during disk probing
967 : : * on boot, loopback IO, acct() writes etc.
968 : : */
969 [ # # ]: 0 : if (unlikely(!mm))
970 : 0 : memcg = root_mem_cgroup;
971 : : else {
972 : 0 : memcg = mem_cgroup_from_task(rcu_dereference(mm->owner));
973 [ # # ]: 0 : if (unlikely(!memcg))
974 : 0 : memcg = root_mem_cgroup;
975 : : }
976 [ # # ]: 0 : } while (!css_tryget(&memcg->css));
977 : : rcu_read_unlock();
978 : 0 : return memcg;
979 : : }
980 : : EXPORT_SYMBOL(get_mem_cgroup_from_mm);
981 : :
982 : : /**
983 : : * get_mem_cgroup_from_page: Obtain a reference on given page's memcg.
984 : : * @page: page from which memcg should be extracted.
985 : : *
986 : : * Obtain a reference on page->memcg and returns it if successful. Otherwise
987 : : * root_mem_cgroup is returned.
988 : : */
989 : 1299598 : struct mem_cgroup *get_mem_cgroup_from_page(struct page *page)
990 : : {
991 : 1299598 : struct mem_cgroup *memcg = page->mem_cgroup;
992 : :
993 [ - + ]: 1299530 : if (mem_cgroup_disabled())
994 : : return NULL;
995 : :
996 : : rcu_read_lock();
997 [ # # # # ]: 0 : if (!memcg || !css_tryget_online(&memcg->css))
998 : 0 : memcg = root_mem_cgroup;
999 : : rcu_read_unlock();
1000 : 0 : return memcg;
1001 : : }
1002 : : EXPORT_SYMBOL(get_mem_cgroup_from_page);
1003 : :
1004 : : /**
1005 : : * If current->active_memcg is non-NULL, do not fallback to current->mm->memcg.
1006 : : */
1007 : : static __always_inline struct mem_cgroup *get_mem_cgroup_from_current(void)
1008 : : {
1009 [ # # ]: 0 : if (unlikely(current->active_memcg)) {
1010 : 0 : struct mem_cgroup *memcg = root_mem_cgroup;
1011 : :
1012 : : rcu_read_lock();
1013 [ # # ]: 0 : if (css_tryget_online(¤t->active_memcg->css))
1014 : 0 : memcg = current->active_memcg;
1015 : 0 : rcu_read_unlock();
1016 : : return memcg;
1017 : : }
1018 : 0 : return get_mem_cgroup_from_mm(current->mm);
1019 : : }
1020 : :
1021 : : /**
1022 : : * mem_cgroup_iter - iterate over memory cgroup hierarchy
1023 : : * @root: hierarchy root
1024 : : * @prev: previously returned memcg, NULL on first invocation
1025 : : * @reclaim: cookie for shared reclaim walks, NULL for full walks
1026 : : *
1027 : : * Returns references to children of the hierarchy below @root, or
1028 : : * @root itself, or %NULL after a full round-trip.
1029 : : *
1030 : : * Caller must pass the return value in @prev on subsequent
1031 : : * invocations for reference counting, or use mem_cgroup_iter_break()
1032 : : * to cancel a hierarchy walk before the round-trip is complete.
1033 : : *
1034 : : * Reclaimers can specify a node and a priority level in @reclaim to
1035 : : * divide up the memcgs in the hierarchy among all concurrent
1036 : : * reclaimers operating on the same node and priority.
1037 : : */
1038 : 207 : struct mem_cgroup *mem_cgroup_iter(struct mem_cgroup *root,
1039 : : struct mem_cgroup *prev,
1040 : : struct mem_cgroup_reclaim_cookie *reclaim)
1041 : : {
1042 : : struct mem_cgroup_reclaim_iter *uninitialized_var(iter);
1043 : : struct cgroup_subsys_state *css = NULL;
1044 : : struct mem_cgroup *memcg = NULL;
1045 : : struct mem_cgroup *pos = NULL;
1046 : :
1047 [ - + ]: 207 : if (mem_cgroup_disabled())
1048 : : return NULL;
1049 : :
1050 [ # # ]: 0 : if (!root)
1051 : 0 : root = root_mem_cgroup;
1052 : :
1053 [ # # ]: 0 : if (prev && !reclaim)
1054 : : pos = prev;
1055 : :
1056 [ # # # # ]: 0 : if (!root->use_hierarchy && root != root_mem_cgroup) {
1057 [ # # ]: 0 : if (prev)
1058 : : goto out;
1059 : : return root;
1060 : : }
1061 : :
1062 : : rcu_read_lock();
1063 : :
1064 [ # # ]: 0 : if (reclaim) {
1065 : : struct mem_cgroup_per_node *mz;
1066 : :
1067 : 0 : mz = mem_cgroup_nodeinfo(root, reclaim->pgdat->node_id);
1068 : 0 : iter = &mz->iter[reclaim->priority];
1069 : :
1070 [ # # # # ]: 0 : if (prev && reclaim->generation != iter->generation)
1071 : : goto out_unlock;
1072 : :
1073 : : while (1) {
1074 : 0 : pos = READ_ONCE(iter->position);
1075 [ # # # # ]: 0 : if (!pos || css_tryget(&pos->css))
1076 : : break;
1077 : : /*
1078 : : * css reference reached zero, so iter->position will
1079 : : * be cleared by ->css_released. However, we should not
1080 : : * rely on this happening soon, because ->css_released
1081 : : * is called from a work queue, and by busy-waiting we
1082 : : * might block it. So we clear iter->position right
1083 : : * away.
1084 : : */
1085 : 0 : (void)cmpxchg(&iter->position, pos, NULL);
1086 : 0 : }
1087 : : }
1088 : :
1089 [ # # ]: 0 : if (pos)
1090 : 0 : css = &pos->css;
1091 : :
1092 : : for (;;) {
1093 : 0 : css = css_next_descendant_pre(css, &root->css);
1094 [ # # ]: 0 : if (!css) {
1095 : : /*
1096 : : * Reclaimers share the hierarchy walk, and a
1097 : : * new one might jump in right at the end of
1098 : : * the hierarchy - make sure they see at least
1099 : : * one group and restart from the beginning.
1100 : : */
1101 [ # # ]: 0 : if (!prev)
1102 : 0 : continue;
1103 : : break;
1104 : : }
1105 : :
1106 : : /*
1107 : : * Verify the css and acquire a reference. The root
1108 : : * is provided by the caller, so we know it's alive
1109 : : * and kicking, and don't take an extra reference.
1110 : : */
1111 : : memcg = mem_cgroup_from_css(css);
1112 : :
1113 [ # # ]: 0 : if (css == &root->css)
1114 : : break;
1115 : :
1116 [ # # ]: 0 : if (css_tryget(css))
1117 : : break;
1118 : :
1119 : : memcg = NULL;
1120 : : }
1121 : :
1122 [ # # ]: 0 : if (reclaim) {
1123 : : /*
1124 : : * The position could have already been updated by a competing
1125 : : * thread, so check that the value hasn't changed since we read
1126 : : * it to avoid reclaiming from the same cgroup twice.
1127 : : */
1128 : 0 : (void)cmpxchg(&iter->position, pos, memcg);
1129 : :
1130 [ # # ]: 0 : if (pos)
1131 : : css_put(&pos->css);
1132 : :
1133 [ # # ]: 0 : if (!memcg)
1134 : 0 : iter->generation++;
1135 [ # # ]: 0 : else if (!prev)
1136 : 0 : reclaim->generation = iter->generation;
1137 : : }
1138 : :
1139 : : out_unlock:
1140 : : rcu_read_unlock();
1141 : : out:
1142 [ # # ]: 0 : if (prev && prev != root)
1143 : : css_put(&prev->css);
1144 : :
1145 : 0 : return memcg;
1146 : : }
1147 : :
1148 : : /**
1149 : : * mem_cgroup_iter_break - abort a hierarchy walk prematurely
1150 : : * @root: hierarchy root
1151 : : * @prev: last visited hierarchy member as returned by mem_cgroup_iter()
1152 : : */
1153 : 0 : void mem_cgroup_iter_break(struct mem_cgroup *root,
1154 : : struct mem_cgroup *prev)
1155 : : {
1156 [ # # ]: 0 : if (!root)
1157 : 0 : root = root_mem_cgroup;
1158 [ # # ]: 0 : if (prev && prev != root)
1159 : : css_put(&prev->css);
1160 : 0 : }
1161 : :
1162 : 0 : static void __invalidate_reclaim_iterators(struct mem_cgroup *from,
1163 : : struct mem_cgroup *dead_memcg)
1164 : : {
1165 : : struct mem_cgroup_reclaim_iter *iter;
1166 : : struct mem_cgroup_per_node *mz;
1167 : : int nid;
1168 : : int i;
1169 : :
1170 [ # # ]: 0 : for_each_node(nid) {
1171 : : mz = mem_cgroup_nodeinfo(from, nid);
1172 [ # # ]: 0 : for (i = 0; i <= DEF_PRIORITY; i++) {
1173 : : iter = &mz->iter[i];
1174 : 0 : cmpxchg(&iter->position,
1175 : : dead_memcg, NULL);
1176 : : }
1177 : : }
1178 : 0 : }
1179 : :
1180 : 0 : static void invalidate_reclaim_iterators(struct mem_cgroup *dead_memcg)
1181 : : {
1182 : : struct mem_cgroup *memcg = dead_memcg;
1183 : : struct mem_cgroup *last;
1184 : :
1185 : : do {
1186 : 0 : __invalidate_reclaim_iterators(memcg, dead_memcg);
1187 : : last = memcg;
1188 [ # # ]: 0 : } while ((memcg = parent_mem_cgroup(memcg)));
1189 : :
1190 : : /*
1191 : : * When cgruop1 non-hierarchy mode is used,
1192 : : * parent_mem_cgroup() does not walk all the way up to the
1193 : : * cgroup root (root_mem_cgroup). So we have to handle
1194 : : * dead_memcg from cgroup root separately.
1195 : : */
1196 [ # # ]: 0 : if (last != root_mem_cgroup)
1197 : 0 : __invalidate_reclaim_iterators(root_mem_cgroup,
1198 : : dead_memcg);
1199 : 0 : }
1200 : :
1201 : : /**
1202 : : * mem_cgroup_scan_tasks - iterate over tasks of a memory cgroup hierarchy
1203 : : * @memcg: hierarchy root
1204 : : * @fn: function to call for each task
1205 : : * @arg: argument passed to @fn
1206 : : *
1207 : : * This function iterates over tasks attached to @memcg or to any of its
1208 : : * descendants and calls @fn for each task. If @fn returns a non-zero
1209 : : * value, the function breaks the iteration loop and returns the value.
1210 : : * Otherwise, it will iterate over all tasks and return 0.
1211 : : *
1212 : : * This function must not be called for the root memory cgroup.
1213 : : */
1214 : 0 : int mem_cgroup_scan_tasks(struct mem_cgroup *memcg,
1215 : : int (*fn)(struct task_struct *, void *), void *arg)
1216 : : {
1217 : : struct mem_cgroup *iter;
1218 : : int ret = 0;
1219 : :
1220 [ # # ]: 0 : BUG_ON(memcg == root_mem_cgroup);
1221 : :
1222 [ # # ]: 0 : for_each_mem_cgroup_tree(iter, memcg) {
1223 : : struct css_task_iter it;
1224 : : struct task_struct *task;
1225 : :
1226 : 0 : css_task_iter_start(&iter->css, CSS_TASK_ITER_PROCS, &it);
1227 [ # # # # ]: 0 : while (!ret && (task = css_task_iter_next(&it)))
1228 : 0 : ret = fn(task, arg);
1229 : 0 : css_task_iter_end(&it);
1230 [ # # ]: 0 : if (ret) {
1231 : 0 : mem_cgroup_iter_break(memcg, iter);
1232 : 0 : break;
1233 : : }
1234 : : }
1235 : 0 : return ret;
1236 : : }
1237 : :
1238 : : /**
1239 : : * mem_cgroup_page_lruvec - return lruvec for isolating/putting an LRU page
1240 : : * @page: the page
1241 : : * @pgdat: pgdat of the page
1242 : : *
1243 : : * This function is only safe when following the LRU page isolation
1244 : : * and putback protocol: the LRU lock must be held, and the page must
1245 : : * either be PageLRU() or the caller must have isolated/allocated it.
1246 : : */
1247 : 48845585 : struct lruvec *mem_cgroup_page_lruvec(struct page *page, struct pglist_data *pgdat)
1248 : : {
1249 : : struct mem_cgroup_per_node *mz;
1250 : : struct mem_cgroup *memcg;
1251 : : struct lruvec *lruvec;
1252 : :
1253 [ + - ]: 48845583 : if (mem_cgroup_disabled()) {
1254 : 48845583 : lruvec = &pgdat->lruvec;
1255 : 48845583 : goto out;
1256 : : }
1257 : :
1258 : 0 : memcg = page->mem_cgroup;
1259 : : /*
1260 : : * Swapcache readahead pages are added to the LRU - and
1261 : : * possibly migrated - before they are charged.
1262 : : */
1263 [ # # ]: 0 : if (!memcg)
1264 : 0 : memcg = root_mem_cgroup;
1265 : :
1266 : : mz = mem_cgroup_page_nodeinfo(memcg, page);
1267 : 0 : lruvec = &mz->lruvec;
1268 : : out:
1269 : : /*
1270 : : * Since a node can be onlined after the mem_cgroup was created,
1271 : : * we have to be prepared to initialize lruvec->zone here;
1272 : : * and if offlined then reonlined, we need to reinitialize it.
1273 : : */
1274 [ - + ]: 48845583 : if (unlikely(lruvec->pgdat != pgdat))
1275 : 0 : lruvec->pgdat = pgdat;
1276 : 48845583 : return lruvec;
1277 : : }
1278 : :
1279 : : /**
1280 : : * mem_cgroup_update_lru_size - account for adding or removing an lru page
1281 : : * @lruvec: mem_cgroup per zone lru vector
1282 : : * @lru: index of lru list the page is sitting on
1283 : : * @zid: zone id of the accounted pages
1284 : : * @nr_pages: positive when adding or negative when removing
1285 : : *
1286 : : * This function must be called under lru_lock, just before a page is added
1287 : : * to or just after a page is removed from an lru list (that ordering being
1288 : : * so as to allow it to check that lru_size 0 is consistent with list_empty).
1289 : : */
1290 : 51555338 : void mem_cgroup_update_lru_size(struct lruvec *lruvec, enum lru_list lru,
1291 : : int zid, int nr_pages)
1292 : : {
1293 : : struct mem_cgroup_per_node *mz;
1294 : : unsigned long *lru_size;
1295 : : long size;
1296 : :
1297 [ - + ]: 51555338 : if (mem_cgroup_disabled())
1298 : 51555338 : return;
1299 : :
1300 : : mz = container_of(lruvec, struct mem_cgroup_per_node, lruvec);
1301 : : lru_size = &mz->lru_zone_size[zid][lru];
1302 : :
1303 [ # # ]: 0 : if (nr_pages < 0)
1304 : 0 : *lru_size += nr_pages;
1305 : :
1306 : 0 : size = *lru_size;
1307 [ # # # # : 0 : if (WARN_ONCE(size < 0,
# # ]
1308 : : "%s(%p, %d, %d): lru_size %ld\n",
1309 : : __func__, lruvec, lru, nr_pages, size)) {
1310 : : VM_BUG_ON(1);
1311 : 0 : *lru_size = 0;
1312 : : }
1313 : :
1314 [ # # ]: 0 : if (nr_pages > 0)
1315 : 0 : *lru_size += nr_pages;
1316 : : }
1317 : :
1318 : : /**
1319 : : * mem_cgroup_margin - calculate chargeable space of a memory cgroup
1320 : : * @memcg: the memory cgroup
1321 : : *
1322 : : * Returns the maximum amount of memory @mem can be charged with, in
1323 : : * pages.
1324 : : */
1325 : : static unsigned long mem_cgroup_margin(struct mem_cgroup *memcg)
1326 : : {
1327 : : unsigned long margin = 0;
1328 : : unsigned long count;
1329 : : unsigned long limit;
1330 : :
1331 : : count = page_counter_read(&memcg->memory);
1332 : : limit = READ_ONCE(memcg->memory.max);
1333 [ # # ]: 0 : if (count < limit)
1334 : 0 : margin = limit - count;
1335 : :
1336 : : if (do_memsw_account()) {
1337 : : count = page_counter_read(&memcg->memsw);
1338 : : limit = READ_ONCE(memcg->memsw.max);
1339 : : if (count <= limit)
1340 : : margin = min(margin, limit - count);
1341 : : else
1342 : : margin = 0;
1343 : : }
1344 : :
1345 : : return margin;
1346 : : }
1347 : :
1348 : : /*
1349 : : * A routine for checking "mem" is under move_account() or not.
1350 : : *
1351 : : * Checking a cgroup is mc.from or mc.to or under hierarchy of
1352 : : * moving cgroups. This is for waiting at high-memory pressure
1353 : : * caused by "move".
1354 : : */
1355 : 0 : static bool mem_cgroup_under_move(struct mem_cgroup *memcg)
1356 : : {
1357 : : struct mem_cgroup *from;
1358 : : struct mem_cgroup *to;
1359 : : bool ret = false;
1360 : : /*
1361 : : * Unlike task_move routines, we access mc.to, mc.from not under
1362 : : * mutual exclusion by cgroup_mutex. Here, we take spinlock instead.
1363 : : */
1364 : : spin_lock(&mc.lock);
1365 : 0 : from = mc.from;
1366 : 0 : to = mc.to;
1367 [ # # ]: 0 : if (!from)
1368 : : goto unlock;
1369 : :
1370 [ # # # # ]: 0 : ret = mem_cgroup_is_descendant(from, memcg) ||
1371 : 0 : mem_cgroup_is_descendant(to, memcg);
1372 : : unlock:
1373 : : spin_unlock(&mc.lock);
1374 : 0 : return ret;
1375 : : }
1376 : :
1377 : 0 : static bool mem_cgroup_wait_acct_move(struct mem_cgroup *memcg)
1378 : : {
1379 [ # # # # ]: 0 : if (mc.moving_task && current != mc.moving_task) {
1380 [ # # ]: 0 : if (mem_cgroup_under_move(memcg)) {
1381 : 0 : DEFINE_WAIT(wait);
1382 : 0 : prepare_to_wait(&mc.waitq, &wait, TASK_INTERRUPTIBLE);
1383 : : /* moving charge context might have finished. */
1384 [ # # ]: 0 : if (mc.moving_task)
1385 : 0 : schedule();
1386 : 0 : finish_wait(&mc.waitq, &wait);
1387 : : return true;
1388 : : }
1389 : : }
1390 : : return false;
1391 : : }
1392 : :
1393 : 0 : static char *memory_stat_format(struct mem_cgroup *memcg)
1394 : : {
1395 : : struct seq_buf s;
1396 : : int i;
1397 : :
1398 : : seq_buf_init(&s, kmalloc(PAGE_SIZE, GFP_KERNEL), PAGE_SIZE);
1399 [ # # ]: 0 : if (!s.buffer)
1400 : : return NULL;
1401 : :
1402 : : /*
1403 : : * Provide statistics on the state of the memory subsystem as
1404 : : * well as cumulative event counters that show past behavior.
1405 : : *
1406 : : * This list is ordered following a combination of these gradients:
1407 : : * 1) generic big picture -> specifics and details
1408 : : * 2) reflecting userspace activity -> reflecting kernel heuristics
1409 : : *
1410 : : * Current memory state:
1411 : : */
1412 : :
1413 : 0 : seq_buf_printf(&s, "anon %llu\n",
1414 : 0 : (u64)memcg_page_state(memcg, MEMCG_RSS) *
1415 : : PAGE_SIZE);
1416 : 0 : seq_buf_printf(&s, "file %llu\n",
1417 : 0 : (u64)memcg_page_state(memcg, MEMCG_CACHE) *
1418 : : PAGE_SIZE);
1419 : 0 : seq_buf_printf(&s, "kernel_stack %llu\n",
1420 : 0 : (u64)memcg_page_state(memcg, MEMCG_KERNEL_STACK_KB) *
1421 : : 1024);
1422 : 0 : seq_buf_printf(&s, "slab %llu\n",
1423 : 0 : (u64)(memcg_page_state(memcg, NR_SLAB_RECLAIMABLE) +
1424 : : memcg_page_state(memcg, NR_SLAB_UNRECLAIMABLE)) *
1425 : : PAGE_SIZE);
1426 : 0 : seq_buf_printf(&s, "sock %llu\n",
1427 : 0 : (u64)memcg_page_state(memcg, MEMCG_SOCK) *
1428 : : PAGE_SIZE);
1429 : :
1430 : 0 : seq_buf_printf(&s, "shmem %llu\n",
1431 : 0 : (u64)memcg_page_state(memcg, NR_SHMEM) *
1432 : : PAGE_SIZE);
1433 : 0 : seq_buf_printf(&s, "file_mapped %llu\n",
1434 : 0 : (u64)memcg_page_state(memcg, NR_FILE_MAPPED) *
1435 : : PAGE_SIZE);
1436 : 0 : seq_buf_printf(&s, "file_dirty %llu\n",
1437 : 0 : (u64)memcg_page_state(memcg, NR_FILE_DIRTY) *
1438 : : PAGE_SIZE);
1439 : 0 : seq_buf_printf(&s, "file_writeback %llu\n",
1440 : 0 : (u64)memcg_page_state(memcg, NR_WRITEBACK) *
1441 : : PAGE_SIZE);
1442 : :
1443 : : /*
1444 : : * TODO: We should eventually replace our own MEMCG_RSS_HUGE counter
1445 : : * with the NR_ANON_THP vm counter, but right now it's a pain in the
1446 : : * arse because it requires migrating the work out of rmap to a place
1447 : : * where the page->mem_cgroup is set up and stable.
1448 : : */
1449 : 0 : seq_buf_printf(&s, "anon_thp %llu\n",
1450 : 0 : (u64)memcg_page_state(memcg, MEMCG_RSS_HUGE) *
1451 : : PAGE_SIZE);
1452 : :
1453 [ # # ]: 0 : for (i = 0; i < NR_LRU_LISTS; i++)
1454 : 0 : seq_buf_printf(&s, "%s %llu\n", mem_cgroup_lru_names[i],
1455 : 0 : (u64)memcg_page_state(memcg, NR_LRU_BASE + i) *
1456 : : PAGE_SIZE);
1457 : :
1458 : 0 : seq_buf_printf(&s, "slab_reclaimable %llu\n",
1459 : 0 : (u64)memcg_page_state(memcg, NR_SLAB_RECLAIMABLE) *
1460 : : PAGE_SIZE);
1461 : 0 : seq_buf_printf(&s, "slab_unreclaimable %llu\n",
1462 : 0 : (u64)memcg_page_state(memcg, NR_SLAB_UNRECLAIMABLE) *
1463 : : PAGE_SIZE);
1464 : :
1465 : : /* Accumulated memory events */
1466 : :
1467 : 0 : seq_buf_printf(&s, "pgfault %lu\n", memcg_events(memcg, PGFAULT));
1468 : 0 : seq_buf_printf(&s, "pgmajfault %lu\n", memcg_events(memcg, PGMAJFAULT));
1469 : :
1470 : 0 : seq_buf_printf(&s, "workingset_refault %lu\n",
1471 : : memcg_page_state(memcg, WORKINGSET_REFAULT));
1472 : 0 : seq_buf_printf(&s, "workingset_activate %lu\n",
1473 : : memcg_page_state(memcg, WORKINGSET_ACTIVATE));
1474 : 0 : seq_buf_printf(&s, "workingset_nodereclaim %lu\n",
1475 : : memcg_page_state(memcg, WORKINGSET_NODERECLAIM));
1476 : :
1477 : 0 : seq_buf_printf(&s, "pgrefill %lu\n", memcg_events(memcg, PGREFILL));
1478 : 0 : seq_buf_printf(&s, "pgscan %lu\n",
1479 : : memcg_events(memcg, PGSCAN_KSWAPD) +
1480 : : memcg_events(memcg, PGSCAN_DIRECT));
1481 : 0 : seq_buf_printf(&s, "pgsteal %lu\n",
1482 : : memcg_events(memcg, PGSTEAL_KSWAPD) +
1483 : : memcg_events(memcg, PGSTEAL_DIRECT));
1484 : 0 : seq_buf_printf(&s, "pgactivate %lu\n", memcg_events(memcg, PGACTIVATE));
1485 : 0 : seq_buf_printf(&s, "pgdeactivate %lu\n", memcg_events(memcg, PGDEACTIVATE));
1486 : 0 : seq_buf_printf(&s, "pglazyfree %lu\n", memcg_events(memcg, PGLAZYFREE));
1487 : 0 : seq_buf_printf(&s, "pglazyfreed %lu\n", memcg_events(memcg, PGLAZYFREED));
1488 : :
1489 : : #ifdef CONFIG_TRANSPARENT_HUGEPAGE
1490 : : seq_buf_printf(&s, "thp_fault_alloc %lu\n",
1491 : : memcg_events(memcg, THP_FAULT_ALLOC));
1492 : : seq_buf_printf(&s, "thp_collapse_alloc %lu\n",
1493 : : memcg_events(memcg, THP_COLLAPSE_ALLOC));
1494 : : #endif /* CONFIG_TRANSPARENT_HUGEPAGE */
1495 : :
1496 : : /* The above should easily fit into one page */
1497 [ # # # # ]: 0 : WARN_ON_ONCE(seq_buf_has_overflowed(&s));
1498 : :
1499 : 0 : return s.buffer;
1500 : : }
1501 : :
1502 : : #define K(x) ((x) << (PAGE_SHIFT-10))
1503 : : /**
1504 : : * mem_cgroup_print_oom_context: Print OOM information relevant to
1505 : : * memory controller.
1506 : : * @memcg: The memory cgroup that went over limit
1507 : : * @p: Task that is going to be killed
1508 : : *
1509 : : * NOTE: @memcg and @p's mem_cgroup can be different when hierarchy is
1510 : : * enabled
1511 : : */
1512 : 0 : void mem_cgroup_print_oom_context(struct mem_cgroup *memcg, struct task_struct *p)
1513 : : {
1514 : : rcu_read_lock();
1515 : :
1516 [ # # ]: 0 : if (memcg) {
1517 : 0 : pr_cont(",oom_memcg=");
1518 : 0 : pr_cont_cgroup_path(memcg->css.cgroup);
1519 : : } else
1520 : 0 : pr_cont(",global_oom");
1521 [ # # ]: 0 : if (p) {
1522 : 0 : pr_cont(",task_memcg=");
1523 : : pr_cont_cgroup_path(task_cgroup(p, memory_cgrp_id));
1524 : : }
1525 : : rcu_read_unlock();
1526 : 0 : }
1527 : :
1528 : : /**
1529 : : * mem_cgroup_print_oom_meminfo: Print OOM memory information relevant to
1530 : : * memory controller.
1531 : : * @memcg: The memory cgroup that went over limit
1532 : : */
1533 : 0 : void mem_cgroup_print_oom_meminfo(struct mem_cgroup *memcg)
1534 : : {
1535 : : char *buf;
1536 : :
1537 : 0 : pr_info("memory: usage %llukB, limit %llukB, failcnt %lu\n",
1538 : : K((u64)page_counter_read(&memcg->memory)),
1539 : : K((u64)memcg->memory.max), memcg->memory.failcnt);
1540 [ # # ]: 0 : if (cgroup_subsys_on_dfl(memory_cgrp_subsys))
1541 : 0 : pr_info("swap: usage %llukB, limit %llukB, failcnt %lu\n",
1542 : : K((u64)page_counter_read(&memcg->swap)),
1543 : : K((u64)memcg->swap.max), memcg->swap.failcnt);
1544 : : else {
1545 : 0 : pr_info("memory+swap: usage %llukB, limit %llukB, failcnt %lu\n",
1546 : : K((u64)page_counter_read(&memcg->memsw)),
1547 : : K((u64)memcg->memsw.max), memcg->memsw.failcnt);
1548 : 0 : pr_info("kmem: usage %llukB, limit %llukB, failcnt %lu\n",
1549 : : K((u64)page_counter_read(&memcg->kmem)),
1550 : : K((u64)memcg->kmem.max), memcg->kmem.failcnt);
1551 : : }
1552 : :
1553 : 0 : pr_info("Memory cgroup stats for ");
1554 : 0 : pr_cont_cgroup_path(memcg->css.cgroup);
1555 : 0 : pr_cont(":");
1556 : 0 : buf = memory_stat_format(memcg);
1557 [ # # ]: 0 : if (!buf)
1558 : 0 : return;
1559 : 0 : pr_info("%s", buf);
1560 : 0 : kfree(buf);
1561 : : }
1562 : :
1563 : : /*
1564 : : * Return the memory (and swap, if configured) limit for a memcg.
1565 : : */
1566 : 0 : unsigned long mem_cgroup_get_max(struct mem_cgroup *memcg)
1567 : : {
1568 : : unsigned long max;
1569 : :
1570 : 0 : max = memcg->memory.max;
1571 [ # # ]: 0 : if (mem_cgroup_swappiness(memcg)) {
1572 : : unsigned long memsw_max;
1573 : : unsigned long swap_max;
1574 : :
1575 : 0 : memsw_max = memcg->memsw.max;
1576 : 0 : swap_max = memcg->swap.max;
1577 : 0 : swap_max = min(swap_max, (unsigned long)total_swap_pages);
1578 : 0 : max = min(max + swap_max, memsw_max);
1579 : : }
1580 : 0 : return max;
1581 : : }
1582 : :
1583 : 0 : unsigned long mem_cgroup_size(struct mem_cgroup *memcg)
1584 : : {
1585 : 0 : return page_counter_read(&memcg->memory);
1586 : : }
1587 : :
1588 : 0 : static bool mem_cgroup_out_of_memory(struct mem_cgroup *memcg, gfp_t gfp_mask,
1589 : : int order)
1590 : : {
1591 : 0 : struct oom_control oc = {
1592 : : .zonelist = NULL,
1593 : : .nodemask = NULL,
1594 : : .memcg = memcg,
1595 : : .gfp_mask = gfp_mask,
1596 : : .order = order,
1597 : : };
1598 : : bool ret;
1599 : :
1600 [ # # ]: 0 : if (mutex_lock_killable(&oom_lock))
1601 : : return true;
1602 : : /*
1603 : : * A few threads which were not waiting at mutex_lock_killable() can
1604 : : * fail to bail out. Therefore, check again after holding oom_lock.
1605 : : */
1606 [ # # # # ]: 0 : ret = should_force_charge() || out_of_memory(&oc);
1607 : 0 : mutex_unlock(&oom_lock);
1608 : 0 : return ret;
1609 : : }
1610 : :
1611 : : #if MAX_NUMNODES > 1
1612 : :
1613 : : /**
1614 : : * test_mem_cgroup_node_reclaimable
1615 : : * @memcg: the target memcg
1616 : : * @nid: the node ID to be checked.
1617 : : * @noswap : specify true here if the user wants flle only information.
1618 : : *
1619 : : * This function returns whether the specified memcg contains any
1620 : : * reclaimable pages on a node. Returns true if there are any reclaimable
1621 : : * pages in the node.
1622 : : */
1623 : : static bool test_mem_cgroup_node_reclaimable(struct mem_cgroup *memcg,
1624 : : int nid, bool noswap)
1625 : : {
1626 : : struct lruvec *lruvec = mem_cgroup_lruvec(NODE_DATA(nid), memcg);
1627 : :
1628 : : if (lruvec_page_state(lruvec, NR_INACTIVE_FILE) ||
1629 : : lruvec_page_state(lruvec, NR_ACTIVE_FILE))
1630 : : return true;
1631 : : if (noswap || !total_swap_pages)
1632 : : return false;
1633 : : if (lruvec_page_state(lruvec, NR_INACTIVE_ANON) ||
1634 : : lruvec_page_state(lruvec, NR_ACTIVE_ANON))
1635 : : return true;
1636 : : return false;
1637 : :
1638 : : }
1639 : :
1640 : : /*
1641 : : * Always updating the nodemask is not very good - even if we have an empty
1642 : : * list or the wrong list here, we can start from some node and traverse all
1643 : : * nodes based on the zonelist. So update the list loosely once per 10 secs.
1644 : : *
1645 : : */
1646 : : static void mem_cgroup_may_update_nodemask(struct mem_cgroup *memcg)
1647 : : {
1648 : : int nid;
1649 : : /*
1650 : : * numainfo_events > 0 means there was at least NUMAINFO_EVENTS_TARGET
1651 : : * pagein/pageout changes since the last update.
1652 : : */
1653 : : if (!atomic_read(&memcg->numainfo_events))
1654 : : return;
1655 : : if (atomic_inc_return(&memcg->numainfo_updating) > 1)
1656 : : return;
1657 : :
1658 : : /* make a nodemask where this memcg uses memory from */
1659 : : memcg->scan_nodes = node_states[N_MEMORY];
1660 : :
1661 : : for_each_node_mask(nid, node_states[N_MEMORY]) {
1662 : :
1663 : : if (!test_mem_cgroup_node_reclaimable(memcg, nid, false))
1664 : : node_clear(nid, memcg->scan_nodes);
1665 : : }
1666 : :
1667 : : atomic_set(&memcg->numainfo_events, 0);
1668 : : atomic_set(&memcg->numainfo_updating, 0);
1669 : : }
1670 : :
1671 : : /*
1672 : : * Selecting a node where we start reclaim from. Because what we need is just
1673 : : * reducing usage counter, start from anywhere is O,K. Considering
1674 : : * memory reclaim from current node, there are pros. and cons.
1675 : : *
1676 : : * Freeing memory from current node means freeing memory from a node which
1677 : : * we'll use or we've used. So, it may make LRU bad. And if several threads
1678 : : * hit limits, it will see a contention on a node. But freeing from remote
1679 : : * node means more costs for memory reclaim because of memory latency.
1680 : : *
1681 : : * Now, we use round-robin. Better algorithm is welcomed.
1682 : : */
1683 : : int mem_cgroup_select_victim_node(struct mem_cgroup *memcg)
1684 : : {
1685 : : int node;
1686 : :
1687 : : mem_cgroup_may_update_nodemask(memcg);
1688 : : node = memcg->last_scanned_node;
1689 : :
1690 : : node = next_node_in(node, memcg->scan_nodes);
1691 : : /*
1692 : : * mem_cgroup_may_update_nodemask might have seen no reclaimmable pages
1693 : : * last time it really checked all the LRUs due to rate limiting.
1694 : : * Fallback to the current node in that case for simplicity.
1695 : : */
1696 : : if (unlikely(node == MAX_NUMNODES))
1697 : : node = numa_node_id();
1698 : :
1699 : : memcg->last_scanned_node = node;
1700 : : return node;
1701 : : }
1702 : : #else
1703 : 0 : int mem_cgroup_select_victim_node(struct mem_cgroup *memcg)
1704 : : {
1705 : 0 : return 0;
1706 : : }
1707 : : #endif
1708 : :
1709 : 0 : static int mem_cgroup_soft_reclaim(struct mem_cgroup *root_memcg,
1710 : : pg_data_t *pgdat,
1711 : : gfp_t gfp_mask,
1712 : : unsigned long *total_scanned)
1713 : : {
1714 : : struct mem_cgroup *victim = NULL;
1715 : : int total = 0;
1716 : : int loop = 0;
1717 : : unsigned long excess;
1718 : : unsigned long nr_scanned;
1719 : 0 : struct mem_cgroup_reclaim_cookie reclaim = {
1720 : : .pgdat = pgdat,
1721 : : .priority = 0,
1722 : : };
1723 : :
1724 : : excess = soft_limit_excess(root_memcg);
1725 : :
1726 : : while (1) {
1727 : 0 : victim = mem_cgroup_iter(root_memcg, victim, &reclaim);
1728 [ # # ]: 0 : if (!victim) {
1729 : 0 : loop++;
1730 [ # # ]: 0 : if (loop >= 2) {
1731 : : /*
1732 : : * If we have not been able to reclaim
1733 : : * anything, it might because there are
1734 : : * no reclaimable pages under this hierarchy
1735 : : */
1736 [ # # ]: 0 : if (!total)
1737 : : break;
1738 : : /*
1739 : : * We want to do more targeted reclaim.
1740 : : * excess >> 2 is not to excessive so as to
1741 : : * reclaim too much, nor too less that we keep
1742 : : * coming back to reclaim from this cgroup
1743 : : */
1744 [ # # # # ]: 0 : if (total >= (excess >> 2) ||
1745 : : (loop > MEM_CGROUP_MAX_RECLAIM_LOOPS))
1746 : : break;
1747 : : }
1748 : 0 : continue;
1749 : : }
1750 : 0 : total += mem_cgroup_shrink_node(victim, gfp_mask, false,
1751 : : pgdat, &nr_scanned);
1752 : 0 : *total_scanned += nr_scanned;
1753 [ # # ]: 0 : if (!soft_limit_excess(root_memcg))
1754 : : break;
1755 : : }
1756 : 0 : mem_cgroup_iter_break(root_memcg, victim);
1757 : 0 : return total;
1758 : : }
1759 : :
1760 : : #ifdef CONFIG_LOCKDEP
1761 : : static struct lockdep_map memcg_oom_lock_dep_map = {
1762 : : .name = "memcg_oom_lock",
1763 : : };
1764 : : #endif
1765 : :
1766 : : static DEFINE_SPINLOCK(memcg_oom_lock);
1767 : :
1768 : : /*
1769 : : * Check OOM-Killer is already running under our hierarchy.
1770 : : * If someone is running, return false.
1771 : : */
1772 : 0 : static bool mem_cgroup_oom_trylock(struct mem_cgroup *memcg)
1773 : : {
1774 : : struct mem_cgroup *iter, *failed = NULL;
1775 : :
1776 : : spin_lock(&memcg_oom_lock);
1777 : :
1778 [ # # ]: 0 : for_each_mem_cgroup_tree(iter, memcg) {
1779 [ # # ]: 0 : if (iter->oom_lock) {
1780 : : /*
1781 : : * this subtree of our hierarchy is already locked
1782 : : * so we cannot give a lock.
1783 : : */
1784 : 0 : failed = iter;
1785 : 0 : mem_cgroup_iter_break(memcg, iter);
1786 : 0 : break;
1787 : : } else
1788 : 0 : iter->oom_lock = true;
1789 : : }
1790 : :
1791 [ # # ]: 0 : if (failed) {
1792 : : /*
1793 : : * OK, we failed to lock the whole subtree so we have
1794 : : * to clean up what we set up to the failing subtree
1795 : : */
1796 [ # # ]: 0 : for_each_mem_cgroup_tree(iter, memcg) {
1797 [ # # ]: 0 : if (iter == failed) {
1798 : 0 : mem_cgroup_iter_break(memcg, iter);
1799 : 0 : break;
1800 : : }
1801 : 0 : iter->oom_lock = false;
1802 : : }
1803 : : } else
1804 : : mutex_acquire(&memcg_oom_lock_dep_map, 0, 1, _RET_IP_);
1805 : :
1806 : : spin_unlock(&memcg_oom_lock);
1807 : :
1808 : 0 : return !failed;
1809 : : }
1810 : :
1811 : 0 : static void mem_cgroup_oom_unlock(struct mem_cgroup *memcg)
1812 : : {
1813 : : struct mem_cgroup *iter;
1814 : :
1815 : : spin_lock(&memcg_oom_lock);
1816 : : mutex_release(&memcg_oom_lock_dep_map, 1, _RET_IP_);
1817 [ # # ]: 0 : for_each_mem_cgroup_tree(iter, memcg)
1818 : 0 : iter->oom_lock = false;
1819 : : spin_unlock(&memcg_oom_lock);
1820 : 0 : }
1821 : :
1822 : 0 : static void mem_cgroup_mark_under_oom(struct mem_cgroup *memcg)
1823 : : {
1824 : : struct mem_cgroup *iter;
1825 : :
1826 : : spin_lock(&memcg_oom_lock);
1827 [ # # ]: 0 : for_each_mem_cgroup_tree(iter, memcg)
1828 : 0 : iter->under_oom++;
1829 : : spin_unlock(&memcg_oom_lock);
1830 : 0 : }
1831 : :
1832 : 0 : static void mem_cgroup_unmark_under_oom(struct mem_cgroup *memcg)
1833 : : {
1834 : : struct mem_cgroup *iter;
1835 : :
1836 : : /*
1837 : : * When a new child is created while the hierarchy is under oom,
1838 : : * mem_cgroup_oom_lock() may not be called. Watch for underflow.
1839 : : */
1840 : : spin_lock(&memcg_oom_lock);
1841 [ # # ]: 0 : for_each_mem_cgroup_tree(iter, memcg)
1842 [ # # ]: 0 : if (iter->under_oom > 0)
1843 : 0 : iter->under_oom--;
1844 : : spin_unlock(&memcg_oom_lock);
1845 : 0 : }
1846 : :
1847 : : static DECLARE_WAIT_QUEUE_HEAD(memcg_oom_waitq);
1848 : :
1849 : : struct oom_wait_info {
1850 : : struct mem_cgroup *memcg;
1851 : : wait_queue_entry_t wait;
1852 : : };
1853 : :
1854 : 0 : static int memcg_oom_wake_function(wait_queue_entry_t *wait,
1855 : : unsigned mode, int sync, void *arg)
1856 : : {
1857 : : struct mem_cgroup *wake_memcg = (struct mem_cgroup *)arg;
1858 : : struct mem_cgroup *oom_wait_memcg;
1859 : : struct oom_wait_info *oom_wait_info;
1860 : :
1861 : : oom_wait_info = container_of(wait, struct oom_wait_info, wait);
1862 : 0 : oom_wait_memcg = oom_wait_info->memcg;
1863 : :
1864 [ # # # # ]: 0 : if (!mem_cgroup_is_descendant(wake_memcg, oom_wait_memcg) &&
1865 : 0 : !mem_cgroup_is_descendant(oom_wait_memcg, wake_memcg))
1866 : : return 0;
1867 : 0 : return autoremove_wake_function(wait, mode, sync, arg);
1868 : : }
1869 : :
1870 : 0 : static void memcg_oom_recover(struct mem_cgroup *memcg)
1871 : : {
1872 : : /*
1873 : : * For the following lockless ->under_oom test, the only required
1874 : : * guarantee is that it must see the state asserted by an OOM when
1875 : : * this function is called as a result of userland actions
1876 : : * triggered by the notification of the OOM. This is trivially
1877 : : * achieved by invoking mem_cgroup_mark_under_oom() before
1878 : : * triggering notification.
1879 : : */
1880 [ # # # # ]: 0 : if (memcg && memcg->under_oom)
1881 : 0 : __wake_up(&memcg_oom_waitq, TASK_NORMAL, 0, memcg);
1882 : 0 : }
1883 : :
1884 : : enum oom_status {
1885 : : OOM_SUCCESS,
1886 : : OOM_FAILED,
1887 : : OOM_ASYNC,
1888 : : OOM_SKIPPED
1889 : : };
1890 : :
1891 : 0 : static enum oom_status mem_cgroup_oom(struct mem_cgroup *memcg, gfp_t mask, int order)
1892 : : {
1893 : : enum oom_status ret;
1894 : : bool locked;
1895 : :
1896 [ # # ]: 0 : if (order > PAGE_ALLOC_COSTLY_ORDER)
1897 : : return OOM_SKIPPED;
1898 : :
1899 : 0 : memcg_memory_event(memcg, MEMCG_OOM);
1900 : :
1901 : : /*
1902 : : * We are in the middle of the charge context here, so we
1903 : : * don't want to block when potentially sitting on a callstack
1904 : : * that holds all kinds of filesystem and mm locks.
1905 : : *
1906 : : * cgroup1 allows disabling the OOM killer and waiting for outside
1907 : : * handling until the charge can succeed; remember the context and put
1908 : : * the task to sleep at the end of the page fault when all locks are
1909 : : * released.
1910 : : *
1911 : : * On the other hand, in-kernel OOM killer allows for an async victim
1912 : : * memory reclaim (oom_reaper) and that means that we are not solely
1913 : : * relying on the oom victim to make a forward progress and we can
1914 : : * invoke the oom killer here.
1915 : : *
1916 : : * Please note that mem_cgroup_out_of_memory might fail to find a
1917 : : * victim and then we have to bail out from the charge path.
1918 : : */
1919 [ # # ]: 0 : if (memcg->oom_kill_disable) {
1920 [ # # ]: 0 : if (!current->in_user_fault)
1921 : : return OOM_SKIPPED;
1922 : : css_get(&memcg->css);
1923 : 0 : current->memcg_in_oom = memcg;
1924 : 0 : current->memcg_oom_gfp_mask = mask;
1925 : 0 : current->memcg_oom_order = order;
1926 : :
1927 : 0 : return OOM_ASYNC;
1928 : : }
1929 : :
1930 : 0 : mem_cgroup_mark_under_oom(memcg);
1931 : :
1932 : 0 : locked = mem_cgroup_oom_trylock(memcg);
1933 : :
1934 [ # # ]: 0 : if (locked)
1935 : 0 : mem_cgroup_oom_notify(memcg);
1936 : :
1937 : 0 : mem_cgroup_unmark_under_oom(memcg);
1938 [ # # ]: 0 : if (mem_cgroup_out_of_memory(memcg, mask, order))
1939 : : ret = OOM_SUCCESS;
1940 : : else
1941 : : ret = OOM_FAILED;
1942 : :
1943 [ # # ]: 0 : if (locked)
1944 : 0 : mem_cgroup_oom_unlock(memcg);
1945 : :
1946 : 0 : return ret;
1947 : : }
1948 : :
1949 : : /**
1950 : : * mem_cgroup_oom_synchronize - complete memcg OOM handling
1951 : : * @handle: actually kill/wait or just clean up the OOM state
1952 : : *
1953 : : * This has to be called at the end of a page fault if the memcg OOM
1954 : : * handler was enabled.
1955 : : *
1956 : : * Memcg supports userspace OOM handling where failed allocations must
1957 : : * sleep on a waitqueue until the userspace task resolves the
1958 : : * situation. Sleeping directly in the charge context with all kinds
1959 : : * of locks held is not a good idea, instead we remember an OOM state
1960 : : * in the task and mem_cgroup_oom_synchronize() has to be called at
1961 : : * the end of the page fault to complete the OOM handling.
1962 : : *
1963 : : * Returns %true if an ongoing memcg OOM situation was detected and
1964 : : * completed, %false otherwise.
1965 : : */
1966 : 0 : bool mem_cgroup_oom_synchronize(bool handle)
1967 : : {
1968 : 0 : struct mem_cgroup *memcg = current->memcg_in_oom;
1969 : : struct oom_wait_info owait;
1970 : : bool locked;
1971 : :
1972 : : /* OOM is global, do not handle */
1973 [ # # ]: 0 : if (!memcg)
1974 : : return false;
1975 : :
1976 [ # # ]: 0 : if (!handle)
1977 : : goto cleanup;
1978 : :
1979 : 0 : owait.memcg = memcg;
1980 : 0 : owait.wait.flags = 0;
1981 : 0 : owait.wait.func = memcg_oom_wake_function;
1982 : 0 : owait.wait.private = current;
1983 : : INIT_LIST_HEAD(&owait.wait.entry);
1984 : :
1985 : 0 : prepare_to_wait(&memcg_oom_waitq, &owait.wait, TASK_KILLABLE);
1986 : 0 : mem_cgroup_mark_under_oom(memcg);
1987 : :
1988 : 0 : locked = mem_cgroup_oom_trylock(memcg);
1989 : :
1990 [ # # ]: 0 : if (locked)
1991 : 0 : mem_cgroup_oom_notify(memcg);
1992 : :
1993 [ # # # # ]: 0 : if (locked && !memcg->oom_kill_disable) {
1994 : 0 : mem_cgroup_unmark_under_oom(memcg);
1995 : 0 : finish_wait(&memcg_oom_waitq, &owait.wait);
1996 : 0 : mem_cgroup_out_of_memory(memcg, current->memcg_oom_gfp_mask,
1997 : : current->memcg_oom_order);
1998 : : } else {
1999 : 0 : schedule();
2000 : 0 : mem_cgroup_unmark_under_oom(memcg);
2001 : 0 : finish_wait(&memcg_oom_waitq, &owait.wait);
2002 : : }
2003 : :
2004 [ # # ]: 0 : if (locked) {
2005 : 0 : mem_cgroup_oom_unlock(memcg);
2006 : : /*
2007 : : * There is no guarantee that an OOM-lock contender
2008 : : * sees the wakeups triggered by the OOM kill
2009 : : * uncharges. Wake any sleepers explicitely.
2010 : : */
2011 : 0 : memcg_oom_recover(memcg);
2012 : : }
2013 : : cleanup:
2014 : 0 : current->memcg_in_oom = NULL;
2015 : : css_put(&memcg->css);
2016 : : return true;
2017 : : }
2018 : :
2019 : : /**
2020 : : * mem_cgroup_get_oom_group - get a memory cgroup to clean up after OOM
2021 : : * @victim: task to be killed by the OOM killer
2022 : : * @oom_domain: memcg in case of memcg OOM, NULL in case of system-wide OOM
2023 : : *
2024 : : * Returns a pointer to a memory cgroup, which has to be cleaned up
2025 : : * by killing all belonging OOM-killable tasks.
2026 : : *
2027 : : * Caller has to call mem_cgroup_put() on the returned non-NULL memcg.
2028 : : */
2029 : 0 : struct mem_cgroup *mem_cgroup_get_oom_group(struct task_struct *victim,
2030 : : struct mem_cgroup *oom_domain)
2031 : : {
2032 : : struct mem_cgroup *oom_group = NULL;
2033 : : struct mem_cgroup *memcg;
2034 : :
2035 [ # # ]: 0 : if (!cgroup_subsys_on_dfl(memory_cgrp_subsys))
2036 : : return NULL;
2037 : :
2038 [ # # ]: 0 : if (!oom_domain)
2039 : 0 : oom_domain = root_mem_cgroup;
2040 : :
2041 : : rcu_read_lock();
2042 : :
2043 : : memcg = mem_cgroup_from_task(victim);
2044 [ # # ]: 0 : if (memcg == root_mem_cgroup)
2045 : : goto out;
2046 : :
2047 : : /*
2048 : : * Traverse the memory cgroup hierarchy from the victim task's
2049 : : * cgroup up to the OOMing cgroup (or root) to find the
2050 : : * highest-level memory cgroup with oom.group set.
2051 : : */
2052 [ # # ]: 0 : for (; memcg; memcg = parent_mem_cgroup(memcg)) {
2053 [ # # ]: 0 : if (memcg->oom_group)
2054 : : oom_group = memcg;
2055 : :
2056 [ # # ]: 0 : if (memcg == oom_domain)
2057 : : break;
2058 : : }
2059 : :
2060 [ # # ]: 0 : if (oom_group)
2061 : : css_get(&oom_group->css);
2062 : : out:
2063 : : rcu_read_unlock();
2064 : :
2065 : 0 : return oom_group;
2066 : : }
2067 : :
2068 : 0 : void mem_cgroup_print_oom_group(struct mem_cgroup *memcg)
2069 : : {
2070 : 0 : pr_info("Tasks in ");
2071 : 0 : pr_cont_cgroup_path(memcg->css.cgroup);
2072 : 0 : pr_cont(" are going to be killed due to memory.oom.group set\n");
2073 : 0 : }
2074 : :
2075 : : /**
2076 : : * lock_page_memcg - lock a page->mem_cgroup binding
2077 : : * @page: the page
2078 : : *
2079 : : * This function protects unlocked LRU pages from being moved to
2080 : : * another cgroup.
2081 : : *
2082 : : * It ensures lifetime of the returned memcg. Caller is responsible
2083 : : * for the lifetime of the page; __unlock_page_memcg() is available
2084 : : * when @page might get freed inside the locked section.
2085 : : */
2086 : 335083611 : struct mem_cgroup *lock_page_memcg(struct page *page)
2087 : : {
2088 : : struct mem_cgroup *memcg;
2089 : : unsigned long flags;
2090 : :
2091 : : /*
2092 : : * The RCU lock is held throughout the transaction. The fast
2093 : : * path can get away without acquiring the memcg->move_lock
2094 : : * because page moving starts with an RCU grace period.
2095 : : *
2096 : : * The RCU lock also protects the memcg from being freed when
2097 : : * the page state that is going to change is the only thing
2098 : : * preventing the page itself from being freed. E.g. writeback
2099 : : * doesn't hold a page reference and relies on PG_writeback to
2100 : : * keep off truncation, migration and so forth.
2101 : : */
2102 : : rcu_read_lock();
2103 : :
2104 [ - + ]: 335122839 : if (mem_cgroup_disabled())
2105 : : return NULL;
2106 : : again:
2107 : 0 : memcg = page->mem_cgroup;
2108 [ # # ]: 0 : if (unlikely(!memcg))
2109 : : return NULL;
2110 : :
2111 [ # # ]: 0 : if (atomic_read(&memcg->moving_account) <= 0)
2112 : 0 : return memcg;
2113 : :
2114 : 0 : spin_lock_irqsave(&memcg->move_lock, flags);
2115 [ # # ]: 0 : if (memcg != page->mem_cgroup) {
2116 : : spin_unlock_irqrestore(&memcg->move_lock, flags);
2117 : : goto again;
2118 : : }
2119 : :
2120 : : /*
2121 : : * When charge migration first begins, we can have locked and
2122 : : * unlocked page stat updates happening concurrently. Track
2123 : : * the task who has the lock for unlock_page_memcg().
2124 : : */
2125 : 0 : memcg->move_lock_task = current;
2126 : 0 : memcg->move_lock_flags = flags;
2127 : :
2128 : 0 : return memcg;
2129 : : }
2130 : : EXPORT_SYMBOL(lock_page_memcg);
2131 : :
2132 : : /**
2133 : : * __unlock_page_memcg - unlock and unpin a memcg
2134 : : * @memcg: the memcg
2135 : : *
2136 : : * Unlock and unpin a memcg returned by lock_page_memcg().
2137 : : */
2138 : 335112535 : void __unlock_page_memcg(struct mem_cgroup *memcg)
2139 : : {
2140 [ - + # # ]: 335112535 : if (memcg && memcg->move_lock_task == current) {
2141 : 0 : unsigned long flags = memcg->move_lock_flags;
2142 : :
2143 : 0 : memcg->move_lock_task = NULL;
2144 : 0 : memcg->move_lock_flags = 0;
2145 : :
2146 : : spin_unlock_irqrestore(&memcg->move_lock, flags);
2147 : : }
2148 : :
2149 : : rcu_read_unlock();
2150 : 335098885 : }
2151 : :
2152 : : /**
2153 : : * unlock_page_memcg - unlock a page->mem_cgroup binding
2154 : : * @page: the page
2155 : : */
2156 : 334978723 : void unlock_page_memcg(struct page *page)
2157 : : {
2158 : 334978723 : __unlock_page_memcg(page->mem_cgroup);
2159 : 335002181 : }
2160 : : EXPORT_SYMBOL(unlock_page_memcg);
2161 : :
2162 : : struct memcg_stock_pcp {
2163 : : struct mem_cgroup *cached; /* this never be root cgroup */
2164 : : unsigned int nr_pages;
2165 : : struct work_struct work;
2166 : : unsigned long flags;
2167 : : #define FLUSHING_CACHED_CHARGE 0
2168 : : };
2169 : : static DEFINE_PER_CPU(struct memcg_stock_pcp, memcg_stock);
2170 : : static DEFINE_MUTEX(percpu_charge_mutex);
2171 : :
2172 : : /**
2173 : : * consume_stock: Try to consume stocked charge on this cpu.
2174 : : * @memcg: memcg to consume from.
2175 : : * @nr_pages: how many pages to charge.
2176 : : *
2177 : : * The charges will only happen if @memcg matches the current cpu's memcg
2178 : : * stock, and at least @nr_pages are available in that stock. Failure to
2179 : : * service an allocation will refill the stock.
2180 : : *
2181 : : * returns true if successful, false otherwise.
2182 : : */
2183 : 0 : static bool consume_stock(struct mem_cgroup *memcg, unsigned int nr_pages)
2184 : : {
2185 : : struct memcg_stock_pcp *stock;
2186 : : unsigned long flags;
2187 : : bool ret = false;
2188 : :
2189 [ # # ]: 0 : if (nr_pages > MEMCG_CHARGE_BATCH)
2190 : : return ret;
2191 : :
2192 : 0 : local_irq_save(flags);
2193 : :
2194 : 0 : stock = this_cpu_ptr(&memcg_stock);
2195 [ # # # # ]: 0 : if (memcg == stock->cached && stock->nr_pages >= nr_pages) {
2196 : 0 : stock->nr_pages -= nr_pages;
2197 : : ret = true;
2198 : : }
2199 : :
2200 [ # # ]: 0 : local_irq_restore(flags);
2201 : :
2202 : 0 : return ret;
2203 : : }
2204 : :
2205 : : /*
2206 : : * Returns stocks cached in percpu and reset cached information.
2207 : : */
2208 : 0 : static void drain_stock(struct memcg_stock_pcp *stock)
2209 : : {
2210 : 0 : struct mem_cgroup *old = stock->cached;
2211 : :
2212 [ # # ]: 0 : if (stock->nr_pages) {
2213 : 0 : page_counter_uncharge(&old->memory, stock->nr_pages);
2214 : : if (do_memsw_account())
2215 : : page_counter_uncharge(&old->memsw, stock->nr_pages);
2216 : 0 : css_put_many(&old->css, stock->nr_pages);
2217 : 0 : stock->nr_pages = 0;
2218 : : }
2219 : 0 : stock->cached = NULL;
2220 : 0 : }
2221 : :
2222 : 0 : static void drain_local_stock(struct work_struct *dummy)
2223 : : {
2224 : : struct memcg_stock_pcp *stock;
2225 : : unsigned long flags;
2226 : :
2227 : : /*
2228 : : * The only protection from memory hotplug vs. drain_stock races is
2229 : : * that we always operate on local CPU stock here with IRQ disabled
2230 : : */
2231 : 0 : local_irq_save(flags);
2232 : :
2233 : 0 : stock = this_cpu_ptr(&memcg_stock);
2234 : 0 : drain_stock(stock);
2235 : 0 : clear_bit(FLUSHING_CACHED_CHARGE, &stock->flags);
2236 : :
2237 [ # # ]: 0 : local_irq_restore(flags);
2238 : 0 : }
2239 : :
2240 : : /*
2241 : : * Cache charges(val) to local per_cpu area.
2242 : : * This will be consumed by consume_stock() function, later.
2243 : : */
2244 : 0 : static void refill_stock(struct mem_cgroup *memcg, unsigned int nr_pages)
2245 : : {
2246 : : struct memcg_stock_pcp *stock;
2247 : : unsigned long flags;
2248 : :
2249 : 0 : local_irq_save(flags);
2250 : :
2251 : 0 : stock = this_cpu_ptr(&memcg_stock);
2252 [ # # ]: 0 : if (stock->cached != memcg) { /* reset if necessary */
2253 : 0 : drain_stock(stock);
2254 : 0 : stock->cached = memcg;
2255 : : }
2256 : 0 : stock->nr_pages += nr_pages;
2257 : :
2258 [ # # ]: 0 : if (stock->nr_pages > MEMCG_CHARGE_BATCH)
2259 : 0 : drain_stock(stock);
2260 : :
2261 [ # # ]: 0 : local_irq_restore(flags);
2262 : 0 : }
2263 : :
2264 : : /*
2265 : : * Drains all per-CPU charge caches for given root_memcg resp. subtree
2266 : : * of the hierarchy under it.
2267 : : */
2268 : 0 : static void drain_all_stock(struct mem_cgroup *root_memcg)
2269 : : {
2270 : : int cpu, curcpu;
2271 : :
2272 : : /* If someone's already draining, avoid adding running more workers. */
2273 [ # # ]: 0 : if (!mutex_trylock(&percpu_charge_mutex))
2274 : 0 : return;
2275 : : /*
2276 : : * Notify other cpus that system-wide "drain" is running
2277 : : * We do not care about races with the cpu hotplug because cpu down
2278 : : * as well as workers from this path always operate on the local
2279 : : * per-cpu data. CPU up doesn't touch memcg_stock at all.
2280 : : */
2281 : 0 : curcpu = get_cpu();
2282 [ # # ]: 0 : for_each_online_cpu(cpu) {
2283 : 0 : struct memcg_stock_pcp *stock = &per_cpu(memcg_stock, cpu);
2284 : : struct mem_cgroup *memcg;
2285 : : bool flush = false;
2286 : :
2287 : : rcu_read_lock();
2288 : 0 : memcg = stock->cached;
2289 [ # # # # : 0 : if (memcg && stock->nr_pages &&
# # ]
2290 : 0 : mem_cgroup_is_descendant(memcg, root_memcg))
2291 : : flush = true;
2292 : : rcu_read_unlock();
2293 : :
2294 [ # # # # ]: 0 : if (flush &&
2295 : 0 : !test_and_set_bit(FLUSHING_CACHED_CHARGE, &stock->flags)) {
2296 [ # # ]: 0 : if (cpu == curcpu)
2297 : 0 : drain_local_stock(&stock->work);
2298 : : else
2299 : 0 : schedule_work_on(cpu, &stock->work);
2300 : : }
2301 : : }
2302 : 0 : put_cpu();
2303 : 0 : mutex_unlock(&percpu_charge_mutex);
2304 : : }
2305 : :
2306 : 0 : static int memcg_hotplug_cpu_dead(unsigned int cpu)
2307 : : {
2308 : : struct memcg_stock_pcp *stock;
2309 : : struct mem_cgroup *memcg, *mi;
2310 : :
2311 : 0 : stock = &per_cpu(memcg_stock, cpu);
2312 : 0 : drain_stock(stock);
2313 : :
2314 [ # # ]: 0 : for_each_mem_cgroup(memcg) {
2315 : : int i;
2316 : :
2317 [ # # ]: 0 : for (i = 0; i < MEMCG_NR_STAT; i++) {
2318 : : int nid;
2319 : : long x;
2320 : :
2321 : 0 : x = this_cpu_xchg(memcg->vmstats_percpu->stat[i], 0);
2322 [ # # ]: 0 : if (x)
2323 [ # # ]: 0 : for (mi = memcg; mi; mi = parent_mem_cgroup(mi))
2324 : 0 : atomic_long_add(x, &memcg->vmstats[i]);
2325 : :
2326 [ # # ]: 0 : if (i >= NR_VM_NODE_STAT_ITEMS)
2327 : 0 : continue;
2328 : :
2329 [ # # ]: 0 : for_each_node(nid) {
2330 : : struct mem_cgroup_per_node *pn;
2331 : :
2332 : : pn = mem_cgroup_nodeinfo(memcg, nid);
2333 : 0 : x = this_cpu_xchg(pn->lruvec_stat_cpu->count[i], 0);
2334 [ # # ]: 0 : if (x)
2335 : : do {
2336 : 0 : atomic_long_add(x, &pn->lruvec_stat[i]);
2337 [ # # ]: 0 : } while ((pn = parent_nodeinfo(pn, nid)));
2338 : : }
2339 : : }
2340 : :
2341 [ # # ]: 0 : for (i = 0; i < NR_VM_EVENT_ITEMS; i++) {
2342 : : long x;
2343 : :
2344 : 0 : x = this_cpu_xchg(memcg->vmstats_percpu->events[i], 0);
2345 [ # # ]: 0 : if (x)
2346 [ # # ]: 0 : for (mi = memcg; mi; mi = parent_mem_cgroup(mi))
2347 : 0 : atomic_long_add(x, &memcg->vmevents[i]);
2348 : : }
2349 : : }
2350 : :
2351 : 0 : return 0;
2352 : : }
2353 : :
2354 : 0 : static void reclaim_high(struct mem_cgroup *memcg,
2355 : : unsigned int nr_pages,
2356 : : gfp_t gfp_mask)
2357 : : {
2358 : : do {
2359 [ # # ]: 0 : if (page_counter_read(&memcg->memory) <= memcg->high)
2360 : 0 : continue;
2361 : 0 : memcg_memory_event(memcg, MEMCG_HIGH);
2362 : 0 : try_to_free_mem_cgroup_pages(memcg, nr_pages, gfp_mask, true);
2363 [ # # ]: 0 : } while ((memcg = parent_mem_cgroup(memcg)));
2364 : 0 : }
2365 : :
2366 : 0 : static void high_work_func(struct work_struct *work)
2367 : : {
2368 : : struct mem_cgroup *memcg;
2369 : :
2370 : 0 : memcg = container_of(work, struct mem_cgroup, high_work);
2371 : 0 : reclaim_high(memcg, MEMCG_CHARGE_BATCH, GFP_KERNEL);
2372 : 0 : }
2373 : :
2374 : : /*
2375 : : * Clamp the maximum sleep time per allocation batch to 2 seconds. This is
2376 : : * enough to still cause a significant slowdown in most cases, while still
2377 : : * allowing diagnostics and tracing to proceed without becoming stuck.
2378 : : */
2379 : : #define MEMCG_MAX_HIGH_DELAY_JIFFIES (2UL*HZ)
2380 : :
2381 : : /*
2382 : : * When calculating the delay, we use these either side of the exponentiation to
2383 : : * maintain precision and scale to a reasonable number of jiffies (see the table
2384 : : * below.
2385 : : *
2386 : : * - MEMCG_DELAY_PRECISION_SHIFT: Extra precision bits while translating the
2387 : : * overage ratio to a delay.
2388 : : * - MEMCG_DELAY_SCALING_SHIFT: The number of bits to scale down down the
2389 : : * proposed penalty in order to reduce to a reasonable number of jiffies, and
2390 : : * to produce a reasonable delay curve.
2391 : : *
2392 : : * MEMCG_DELAY_SCALING_SHIFT just happens to be a number that produces a
2393 : : * reasonable delay curve compared to precision-adjusted overage, not
2394 : : * penalising heavily at first, but still making sure that growth beyond the
2395 : : * limit penalises misbehaviour cgroups by slowing them down exponentially. For
2396 : : * example, with a high of 100 megabytes:
2397 : : *
2398 : : * +-------+------------------------+
2399 : : * | usage | time to allocate in ms |
2400 : : * +-------+------------------------+
2401 : : * | 100M | 0 |
2402 : : * | 101M | 6 |
2403 : : * | 102M | 25 |
2404 : : * | 103M | 57 |
2405 : : * | 104M | 102 |
2406 : : * | 105M | 159 |
2407 : : * | 106M | 230 |
2408 : : * | 107M | 313 |
2409 : : * | 108M | 409 |
2410 : : * | 109M | 518 |
2411 : : * | 110M | 639 |
2412 : : * | 111M | 774 |
2413 : : * | 112M | 921 |
2414 : : * | 113M | 1081 |
2415 : : * | 114M | 1254 |
2416 : : * | 115M | 1439 |
2417 : : * | 116M | 1638 |
2418 : : * | 117M | 1849 |
2419 : : * | 118M | 2000 |
2420 : : * | 119M | 2000 |
2421 : : * | 120M | 2000 |
2422 : : * +-------+------------------------+
2423 : : */
2424 : : #define MEMCG_DELAY_PRECISION_SHIFT 20
2425 : : #define MEMCG_DELAY_SCALING_SHIFT 14
2426 : :
2427 : : /*
2428 : : * Get the number of jiffies that we should penalise a mischievous cgroup which
2429 : : * is exceeding its memory.high by checking both it and its ancestors.
2430 : : */
2431 : 0 : static unsigned long calculate_high_delay(struct mem_cgroup *memcg,
2432 : : unsigned int nr_pages)
2433 : : {
2434 : : unsigned long penalty_jiffies;
2435 : : u64 max_overage = 0;
2436 : :
2437 : : do {
2438 : : unsigned long usage, high;
2439 : : u64 overage;
2440 : :
2441 : : usage = page_counter_read(&memcg->memory);
2442 : : high = READ_ONCE(memcg->high);
2443 : :
2444 [ # # ]: 0 : if (usage <= high)
2445 : 0 : continue;
2446 : :
2447 : : /*
2448 : : * Prevent division by 0 in overage calculation by acting as if
2449 : : * it was a threshold of 1 page
2450 : : */
2451 : 0 : high = max(high, 1UL);
2452 : :
2453 : 0 : overage = usage - high;
2454 : 0 : overage <<= MEMCG_DELAY_PRECISION_SHIFT;
2455 : 0 : overage = div64_u64(overage, high);
2456 : :
2457 : : if (overage > max_overage)
2458 : : max_overage = overage;
2459 [ # # ]: 0 : } while ((memcg = parent_mem_cgroup(memcg)) &&
2460 [ # # ]: 0 : !mem_cgroup_is_root(memcg));
2461 : :
2462 : : if (!max_overage)
2463 : : return 0;
2464 : :
2465 : : /*
2466 : : * We use overage compared to memory.high to calculate the number of
2467 : : * jiffies to sleep (penalty_jiffies). Ideally this value should be
2468 : : * fairly lenient on small overages, and increasingly harsh when the
2469 : : * memcg in question makes it clear that it has no intention of stopping
2470 : : * its crazy behaviour, so we exponentially increase the delay based on
2471 : : * overage amount.
2472 : : */
2473 : : penalty_jiffies = max_overage * max_overage * HZ;
2474 : : penalty_jiffies >>= MEMCG_DELAY_PRECISION_SHIFT;
2475 : : penalty_jiffies >>= MEMCG_DELAY_SCALING_SHIFT;
2476 : :
2477 : : /*
2478 : : * Factor in the task's own contribution to the overage, such that four
2479 : : * N-sized allocations are throttled approximately the same as one
2480 : : * 4N-sized allocation.
2481 : : *
2482 : : * MEMCG_CHARGE_BATCH pages is nominal, so work out how much smaller or
2483 : : * larger the current charge patch is than that.
2484 : : */
2485 : : penalty_jiffies = penalty_jiffies * nr_pages / MEMCG_CHARGE_BATCH;
2486 : :
2487 : : /*
2488 : : * Clamp the max delay per usermode return so as to still keep the
2489 : : * application moving forwards and also permit diagnostics, albeit
2490 : : * extremely slowly.
2491 : : */
2492 : : return min(penalty_jiffies, MEMCG_MAX_HIGH_DELAY_JIFFIES);
2493 : : }
2494 : :
2495 : : /*
2496 : : * Scheduled by try_charge() to be executed from the userland return path
2497 : : * and reclaims memory over the high limit.
2498 : : */
2499 : 18707964 : void mem_cgroup_handle_over_high(void)
2500 : : {
2501 : : unsigned long penalty_jiffies;
2502 : : unsigned long pflags;
2503 : 18707964 : unsigned int nr_pages = current->memcg_nr_pages_over_high;
2504 : : struct mem_cgroup *memcg;
2505 : :
2506 [ - + ]: 18707964 : if (likely(!nr_pages))
2507 : 18707964 : return;
2508 : :
2509 : 0 : memcg = get_mem_cgroup_from_mm(current->mm);
2510 : 0 : reclaim_high(memcg, nr_pages, GFP_KERNEL);
2511 : 0 : current->memcg_nr_pages_over_high = 0;
2512 : :
2513 : : /*
2514 : : * memory.high is breached and reclaim is unable to keep up. Throttle
2515 : : * allocators proactively to slow down excessive growth.
2516 : : */
2517 : 0 : penalty_jiffies = calculate_high_delay(memcg, nr_pages);
2518 : :
2519 : : /*
2520 : : * Don't sleep if the amount of jiffies this memcg owes us is so low
2521 : : * that it's not even worth doing, in an attempt to be nice to those who
2522 : : * go only a small amount over their memory.high value and maybe haven't
2523 : : * been aggressively reclaimed enough yet.
2524 : : */
2525 [ # # ]: 0 : if (penalty_jiffies <= HZ / 100)
2526 : : goto out;
2527 : :
2528 : : /*
2529 : : * If we exit early, we're guaranteed to die (since
2530 : : * schedule_timeout_killable sets TASK_KILLABLE). This means we don't
2531 : : * need to account for any ill-begotten jiffies to pay them off later.
2532 : : */
2533 : : psi_memstall_enter(&pflags);
2534 : 0 : schedule_timeout_killable(penalty_jiffies);
2535 : : psi_memstall_leave(&pflags);
2536 : :
2537 : : out:
2538 : : css_put(&memcg->css);
2539 : : }
2540 : :
2541 : 0 : static int try_charge(struct mem_cgroup *memcg, gfp_t gfp_mask,
2542 : : unsigned int nr_pages)
2543 : : {
2544 : 0 : unsigned int batch = max(MEMCG_CHARGE_BATCH, nr_pages);
2545 : : int nr_retries = MEM_CGROUP_RECLAIM_RETRIES;
2546 : : struct mem_cgroup *mem_over_limit;
2547 : : struct page_counter *counter;
2548 : : unsigned long nr_reclaimed;
2549 : : bool may_swap = true;
2550 : : bool drained = false;
2551 : : enum oom_status oom_status;
2552 : :
2553 [ # # ]: 0 : if (mem_cgroup_is_root(memcg))
2554 : : return 0;
2555 : : retry:
2556 [ # # ]: 0 : if (consume_stock(memcg, nr_pages))
2557 : : return 0;
2558 : :
2559 : : if (!do_memsw_account() ||
2560 : : page_counter_try_charge(&memcg->memsw, batch, &counter)) {
2561 [ # # ]: 0 : if (page_counter_try_charge(&memcg->memory, batch, &counter))
2562 : : goto done_restock;
2563 : : if (do_memsw_account())
2564 : : page_counter_uncharge(&memcg->memsw, batch);
2565 : 0 : mem_over_limit = mem_cgroup_from_counter(counter, memory);
2566 : : } else {
2567 : : mem_over_limit = mem_cgroup_from_counter(counter, memsw);
2568 : : may_swap = false;
2569 : : }
2570 : :
2571 [ # # ]: 0 : if (batch > nr_pages) {
2572 : : batch = nr_pages;
2573 : : goto retry;
2574 : : }
2575 : :
2576 : : /*
2577 : : * Memcg doesn't have a dedicated reserve for atomic
2578 : : * allocations. But like the global atomic pool, we need to
2579 : : * put the burden of reclaim on regular allocation requests
2580 : : * and let these go through as privileged allocations.
2581 : : */
2582 [ # # ]: 0 : if (gfp_mask & __GFP_ATOMIC)
2583 : : goto force;
2584 : :
2585 : : /*
2586 : : * Unlike in global OOM situations, memcg is not in a physical
2587 : : * memory shortage. Allow dying and OOM-killed tasks to
2588 : : * bypass the last charges so that they can exit quickly and
2589 : : * free their memory.
2590 : : */
2591 [ # # ]: 0 : if (unlikely(should_force_charge()))
2592 : : goto force;
2593 : :
2594 : : /*
2595 : : * Prevent unbounded recursion when reclaim operations need to
2596 : : * allocate memory. This might exceed the limits temporarily,
2597 : : * but we prefer facilitating memory reclaim and getting back
2598 : : * under the limit over triggering OOM kills in these cases.
2599 : : */
2600 [ # # ]: 0 : if (unlikely(current->flags & PF_MEMALLOC))
2601 : : goto force;
2602 : :
2603 [ # # ]: 0 : if (unlikely(task_in_memcg_oom(current)))
2604 : : goto nomem;
2605 : :
2606 [ # # ]: 0 : if (!gfpflags_allow_blocking(gfp_mask))
2607 : : goto nomem;
2608 : :
2609 : 0 : memcg_memory_event(mem_over_limit, MEMCG_MAX);
2610 : :
2611 : 0 : nr_reclaimed = try_to_free_mem_cgroup_pages(mem_over_limit, nr_pages,
2612 : : gfp_mask, may_swap);
2613 : :
2614 [ # # ]: 0 : if (mem_cgroup_margin(mem_over_limit) >= nr_pages)
2615 : : goto retry;
2616 : :
2617 [ # # ]: 0 : if (!drained) {
2618 : 0 : drain_all_stock(mem_over_limit);
2619 : : drained = true;
2620 : 0 : goto retry;
2621 : : }
2622 : :
2623 [ # # ]: 0 : if (gfp_mask & __GFP_NORETRY)
2624 : : goto nomem;
2625 : : /*
2626 : : * Even though the limit is exceeded at this point, reclaim
2627 : : * may have been able to free some pages. Retry the charge
2628 : : * before killing the task.
2629 : : *
2630 : : * Only for regular pages, though: huge pages are rather
2631 : : * unlikely to succeed so close to the limit, and we fall back
2632 : : * to regular pages anyway in case of failure.
2633 : : */
2634 [ # # ]: 0 : if (nr_reclaimed && nr_pages <= (1 << PAGE_ALLOC_COSTLY_ORDER))
2635 : : goto retry;
2636 : : /*
2637 : : * At task move, charge accounts can be doubly counted. So, it's
2638 : : * better to wait until the end of task_move if something is going on.
2639 : : */
2640 [ # # ]: 0 : if (mem_cgroup_wait_acct_move(mem_over_limit))
2641 : : goto retry;
2642 : :
2643 [ # # ]: 0 : if (nr_retries--)
2644 : : goto retry;
2645 : :
2646 [ # # ]: 0 : if (gfp_mask & __GFP_RETRY_MAYFAIL)
2647 : : goto nomem;
2648 : :
2649 [ # # ]: 0 : if (gfp_mask & __GFP_NOFAIL)
2650 : : goto force;
2651 : :
2652 [ # # ]: 0 : if (fatal_signal_pending(current))
2653 : : goto force;
2654 : :
2655 : : /*
2656 : : * keep retrying as long as the memcg oom killer is able to make
2657 : : * a forward progress or bypass the charge if the oom killer
2658 : : * couldn't make any progress.
2659 : : */
2660 : 0 : oom_status = mem_cgroup_oom(mem_over_limit, gfp_mask,
2661 : : get_order(nr_pages * PAGE_SIZE));
2662 [ # # # ]: 0 : switch (oom_status) {
2663 : : case OOM_SUCCESS:
2664 : : nr_retries = MEM_CGROUP_RECLAIM_RETRIES;
2665 : : goto retry;
2666 : : case OOM_FAILED:
2667 : : goto force;
2668 : : default:
2669 : : goto nomem;
2670 : : }
2671 : : nomem:
2672 [ # # ]: 0 : if (!(gfp_mask & __GFP_NOFAIL))
2673 : : return -ENOMEM;
2674 : : force:
2675 : : /*
2676 : : * The allocation either can't fail or will lead to more memory
2677 : : * being freed very soon. Allow memory usage go over the limit
2678 : : * temporarily by force charging it.
2679 : : */
2680 : 0 : page_counter_charge(&memcg->memory, nr_pages);
2681 : : if (do_memsw_account())
2682 : : page_counter_charge(&memcg->memsw, nr_pages);
2683 : : css_get_many(&memcg->css, nr_pages);
2684 : :
2685 : : return 0;
2686 : :
2687 : : done_restock:
2688 : : css_get_many(&memcg->css, batch);
2689 [ # # ]: 0 : if (batch > nr_pages)
2690 : 0 : refill_stock(memcg, batch - nr_pages);
2691 : :
2692 : : /*
2693 : : * If the hierarchy is above the normal consumption range, schedule
2694 : : * reclaim on returning to userland. We can perform reclaim here
2695 : : * if __GFP_RECLAIM but let's always punt for simplicity and so that
2696 : : * GFP_KERNEL can consistently be used during reclaim. @memcg is
2697 : : * not recorded as it most likely matches current's and won't
2698 : : * change in the meantime. As high limit is checked again before
2699 : : * reclaim, the cost of mismatch is negligible.
2700 : : */
2701 : : do {
2702 [ # # ]: 0 : if (page_counter_read(&memcg->memory) > memcg->high) {
2703 : : /* Don't bother a random interrupted task */
2704 [ # # ]: 0 : if (in_interrupt()) {
2705 : 0 : schedule_work(&memcg->high_work);
2706 : : break;
2707 : : }
2708 : 0 : current->memcg_nr_pages_over_high += batch;
2709 : 0 : set_notify_resume(current);
2710 : 0 : break;
2711 : : }
2712 [ # # ]: 0 : } while ((memcg = parent_mem_cgroup(memcg)));
2713 : :
2714 : : return 0;
2715 : : }
2716 : :
2717 : 0 : static void cancel_charge(struct mem_cgroup *memcg, unsigned int nr_pages)
2718 : : {
2719 [ # # ]: 0 : if (mem_cgroup_is_root(memcg))
2720 : 0 : return;
2721 : :
2722 : 0 : page_counter_uncharge(&memcg->memory, nr_pages);
2723 : : if (do_memsw_account())
2724 : : page_counter_uncharge(&memcg->memsw, nr_pages);
2725 : :
2726 : : css_put_many(&memcg->css, nr_pages);
2727 : : }
2728 : :
2729 : 0 : static void lock_page_lru(struct page *page, int *isolated)
2730 : : {
2731 : : pg_data_t *pgdat = page_pgdat(page);
2732 : :
2733 : : spin_lock_irq(&pgdat->lru_lock);
2734 [ # # ]: 0 : if (PageLRU(page)) {
2735 : : struct lruvec *lruvec;
2736 : :
2737 : 0 : lruvec = mem_cgroup_page_lruvec(page, pgdat);
2738 : : ClearPageLRU(page);
2739 : : del_page_from_lru_list(page, lruvec, page_lru(page));
2740 : 0 : *isolated = 1;
2741 : : } else
2742 : 0 : *isolated = 0;
2743 : 0 : }
2744 : :
2745 : 0 : static void unlock_page_lru(struct page *page, int isolated)
2746 : : {
2747 : : pg_data_t *pgdat = page_pgdat(page);
2748 : :
2749 [ # # ]: 0 : if (isolated) {
2750 : : struct lruvec *lruvec;
2751 : :
2752 : 0 : lruvec = mem_cgroup_page_lruvec(page, pgdat);
2753 : : VM_BUG_ON_PAGE(PageLRU(page), page);
2754 : : SetPageLRU(page);
2755 : : add_page_to_lru_list(page, lruvec, page_lru(page));
2756 : : }
2757 : : spin_unlock_irq(&pgdat->lru_lock);
2758 : 0 : }
2759 : :
2760 : 0 : static void commit_charge(struct page *page, struct mem_cgroup *memcg,
2761 : : bool lrucare)
2762 : : {
2763 : : int isolated;
2764 : :
2765 : : VM_BUG_ON_PAGE(page->mem_cgroup, page);
2766 : :
2767 : : /*
2768 : : * In some cases, SwapCache and FUSE(splice_buf->radixtree), the page
2769 : : * may already be on some other mem_cgroup's LRU. Take care of it.
2770 : : */
2771 [ # # ]: 0 : if (lrucare)
2772 : 0 : lock_page_lru(page, &isolated);
2773 : :
2774 : : /*
2775 : : * Nobody should be changing or seriously looking at
2776 : : * page->mem_cgroup at this point:
2777 : : *
2778 : : * - the page is uncharged
2779 : : *
2780 : : * - the page is off-LRU
2781 : : *
2782 : : * - an anonymous fault has exclusive page access, except for
2783 : : * a locked page table
2784 : : *
2785 : : * - a page cache insertion, a swapin fault, or a migration
2786 : : * have the page locked
2787 : : */
2788 : 0 : page->mem_cgroup = memcg;
2789 : :
2790 [ # # ]: 0 : if (lrucare)
2791 : 0 : unlock_page_lru(page, isolated);
2792 : 0 : }
2793 : :
2794 : : #ifdef CONFIG_MEMCG_KMEM
2795 : : /*
2796 : : * Returns a pointer to the memory cgroup to which the kernel object is charged.
2797 : : *
2798 : : * The caller must ensure the memcg lifetime, e.g. by taking rcu_read_lock(),
2799 : : * cgroup_mutex, etc.
2800 : : */
2801 : 598470 : struct mem_cgroup *mem_cgroup_from_obj(void *p)
2802 : : {
2803 : : struct page *page;
2804 : :
2805 [ - + ]: 598404 : if (mem_cgroup_disabled())
2806 : : return NULL;
2807 : :
2808 : : page = virt_to_head_page(p);
2809 : :
2810 : : /*
2811 : : * Slab pages don't have page->mem_cgroup set because corresponding
2812 : : * kmem caches can be reparented during the lifetime. That's why
2813 : : * memcg_from_slab_page() should be used instead.
2814 : : */
2815 [ # # ]: 0 : if (PageSlab(page))
2816 : 0 : return memcg_from_slab_page(page);
2817 : :
2818 : : /* All other pages use page->mem_cgroup */
2819 : 0 : return page->mem_cgroup;
2820 : : }
2821 : :
2822 : 0 : static int memcg_alloc_cache_id(void)
2823 : : {
2824 : : int id, size;
2825 : : int err;
2826 : :
2827 : 0 : id = ida_simple_get(&memcg_cache_ida,
2828 : : 0, MEMCG_CACHES_MAX_SIZE, GFP_KERNEL);
2829 [ # # ]: 0 : if (id < 0)
2830 : : return id;
2831 : :
2832 [ # # ]: 0 : if (id < memcg_nr_cache_ids)
2833 : : return id;
2834 : :
2835 : : /*
2836 : : * There's no space for the new id in memcg_caches arrays,
2837 : : * so we have to grow them.
2838 : : */
2839 : 0 : down_write(&memcg_cache_ids_sem);
2840 : :
2841 : 0 : size = 2 * (id + 1);
2842 [ # # ]: 0 : if (size < MEMCG_CACHES_MIN_SIZE)
2843 : : size = MEMCG_CACHES_MIN_SIZE;
2844 [ # # ]: 0 : else if (size > MEMCG_CACHES_MAX_SIZE)
2845 : : size = MEMCG_CACHES_MAX_SIZE;
2846 : :
2847 : 0 : err = memcg_update_all_caches(size);
2848 [ # # ]: 0 : if (!err)
2849 : 0 : err = memcg_update_all_list_lrus(size);
2850 [ # # ]: 0 : if (!err)
2851 : 0 : memcg_nr_cache_ids = size;
2852 : :
2853 : 0 : up_write(&memcg_cache_ids_sem);
2854 : :
2855 [ # # ]: 0 : if (err) {
2856 : 0 : ida_simple_remove(&memcg_cache_ida, id);
2857 : 0 : return err;
2858 : : }
2859 : : return id;
2860 : : }
2861 : :
2862 : : static void memcg_free_cache_id(int id)
2863 : : {
2864 : 0 : ida_simple_remove(&memcg_cache_ida, id);
2865 : : }
2866 : :
2867 : : struct memcg_kmem_cache_create_work {
2868 : : struct mem_cgroup *memcg;
2869 : : struct kmem_cache *cachep;
2870 : : struct work_struct work;
2871 : : };
2872 : :
2873 : 0 : static void memcg_kmem_cache_create_func(struct work_struct *w)
2874 : : {
2875 : : struct memcg_kmem_cache_create_work *cw =
2876 : 0 : container_of(w, struct memcg_kmem_cache_create_work, work);
2877 : 0 : struct mem_cgroup *memcg = cw->memcg;
2878 : 0 : struct kmem_cache *cachep = cw->cachep;
2879 : :
2880 : 0 : memcg_create_kmem_cache(memcg, cachep);
2881 : :
2882 : : css_put(&memcg->css);
2883 : 0 : kfree(cw);
2884 : 0 : }
2885 : :
2886 : : /*
2887 : : * Enqueue the creation of a per-memcg kmem_cache.
2888 : : */
2889 : 0 : static void memcg_schedule_kmem_cache_create(struct mem_cgroup *memcg,
2890 : : struct kmem_cache *cachep)
2891 : : {
2892 : : struct memcg_kmem_cache_create_work *cw;
2893 : :
2894 [ # # ]: 0 : if (!css_tryget_online(&memcg->css))
2895 : : return;
2896 : :
2897 : : cw = kmalloc(sizeof(*cw), GFP_NOWAIT | __GFP_NOWARN);
2898 [ # # ]: 0 : if (!cw) {
2899 : : css_put(&memcg->css);
2900 : : return;
2901 : : }
2902 : :
2903 : 0 : cw->memcg = memcg;
2904 : 0 : cw->cachep = cachep;
2905 : 0 : INIT_WORK(&cw->work, memcg_kmem_cache_create_func);
2906 : :
2907 : 0 : queue_work(memcg_kmem_cache_wq, &cw->work);
2908 : : }
2909 : :
2910 : 0 : static inline bool memcg_kmem_bypass(void)
2911 : : {
2912 [ # # # # : 0 : if (in_interrupt() || !current->mm || (current->flags & PF_KTHREAD))
# # ]
2913 : : return true;
2914 : 0 : return false;
2915 : : }
2916 : :
2917 : : /**
2918 : : * memcg_kmem_get_cache: select the correct per-memcg cache for allocation
2919 : : * @cachep: the original global kmem cache
2920 : : *
2921 : : * Return the kmem_cache we're supposed to use for a slab allocation.
2922 : : * We try to use the current memcg's version of the cache.
2923 : : *
2924 : : * If the cache does not exist yet, if we are the first user of it, we
2925 : : * create it asynchronously in a workqueue and let the current allocation
2926 : : * go through with the original cache.
2927 : : *
2928 : : * This function takes a reference to the cache it returns to assure it
2929 : : * won't get destroyed while we are working with it. Once the caller is
2930 : : * done with it, memcg_kmem_put_cache() must be called to release the
2931 : : * reference.
2932 : : */
2933 : 0 : struct kmem_cache *memcg_kmem_get_cache(struct kmem_cache *cachep)
2934 : : {
2935 : : struct mem_cgroup *memcg;
2936 : : struct kmem_cache *memcg_cachep;
2937 : : struct memcg_cache_array *arr;
2938 : : int kmemcg_id;
2939 : :
2940 : : VM_BUG_ON(!is_root_cache(cachep));
2941 : :
2942 [ # # ]: 0 : if (memcg_kmem_bypass())
2943 : : return cachep;
2944 : :
2945 : : rcu_read_lock();
2946 : :
2947 [ # # ]: 0 : if (unlikely(current->active_memcg))
2948 : : memcg = current->active_memcg;
2949 : : else
2950 : : memcg = mem_cgroup_from_task(current);
2951 : :
2952 [ # # # # ]: 0 : if (!memcg || memcg == root_mem_cgroup)
2953 : : goto out_unlock;
2954 : :
2955 : 0 : kmemcg_id = READ_ONCE(memcg->kmemcg_id);
2956 [ # # ]: 0 : if (kmemcg_id < 0)
2957 : : goto out_unlock;
2958 : :
2959 : 0 : arr = rcu_dereference(cachep->memcg_params.memcg_caches);
2960 : :
2961 : : /*
2962 : : * Make sure we will access the up-to-date value. The code updating
2963 : : * memcg_caches issues a write barrier to match the data dependency
2964 : : * barrier inside READ_ONCE() (see memcg_create_kmem_cache()).
2965 : : */
2966 : 0 : memcg_cachep = READ_ONCE(arr->entries[kmemcg_id]);
2967 : :
2968 : : /*
2969 : : * If we are in a safe context (can wait, and not in interrupt
2970 : : * context), we could be be predictable and return right away.
2971 : : * This would guarantee that the allocation being performed
2972 : : * already belongs in the new cache.
2973 : : *
2974 : : * However, there are some clashes that can arrive from locking.
2975 : : * For instance, because we acquire the slab_mutex while doing
2976 : : * memcg_create_kmem_cache, this means no further allocation
2977 : : * could happen with the slab_mutex held. So it's better to
2978 : : * defer everything.
2979 : : *
2980 : : * If the memcg is dying or memcg_cache is about to be released,
2981 : : * don't bother creating new kmem_caches. Because memcg_cachep
2982 : : * is ZEROed as the fist step of kmem offlining, we don't need
2983 : : * percpu_ref_tryget_live() here. css_tryget_online() check in
2984 : : * memcg_schedule_kmem_cache_create() will prevent us from
2985 : : * creation of a new kmem_cache.
2986 : : */
2987 [ # # ]: 0 : if (unlikely(!memcg_cachep))
2988 : 0 : memcg_schedule_kmem_cache_create(memcg, cachep);
2989 [ # # ]: 0 : else if (percpu_ref_tryget(&memcg_cachep->memcg_params.refcnt))
2990 : : cachep = memcg_cachep;
2991 : : out_unlock:
2992 : : rcu_read_unlock();
2993 : 0 : return cachep;
2994 : : }
2995 : :
2996 : : /**
2997 : : * memcg_kmem_put_cache: drop reference taken by memcg_kmem_get_cache
2998 : : * @cachep: the cache returned by memcg_kmem_get_cache
2999 : : */
3000 : 0 : void memcg_kmem_put_cache(struct kmem_cache *cachep)
3001 : : {
3002 [ # # ]: 0 : if (!is_root_cache(cachep))
3003 : 0 : percpu_ref_put(&cachep->memcg_params.refcnt);
3004 : 0 : }
3005 : :
3006 : : /**
3007 : : * __memcg_kmem_charge_memcg: charge a kmem page
3008 : : * @page: page to charge
3009 : : * @gfp: reclaim mode
3010 : : * @order: allocation order
3011 : : * @memcg: memory cgroup to charge
3012 : : *
3013 : : * Returns 0 on success, an error code on failure.
3014 : : */
3015 : 0 : int __memcg_kmem_charge_memcg(struct page *page, gfp_t gfp, int order,
3016 : : struct mem_cgroup *memcg)
3017 : : {
3018 : 0 : unsigned int nr_pages = 1 << order;
3019 : : struct page_counter *counter;
3020 : : int ret;
3021 : :
3022 : 0 : ret = try_charge(memcg, gfp, nr_pages);
3023 [ # # ]: 0 : if (ret)
3024 : : return ret;
3025 : :
3026 [ # # # # ]: 0 : if (!cgroup_subsys_on_dfl(memory_cgrp_subsys) &&
3027 : 0 : !page_counter_try_charge(&memcg->kmem, nr_pages, &counter)) {
3028 : :
3029 : : /*
3030 : : * Enforce __GFP_NOFAIL allocation because callers are not
3031 : : * prepared to see failures and likely do not have any failure
3032 : : * handling code.
3033 : : */
3034 [ # # ]: 0 : if (gfp & __GFP_NOFAIL) {
3035 : 0 : page_counter_charge(&memcg->kmem, nr_pages);
3036 : 0 : return 0;
3037 : : }
3038 : 0 : cancel_charge(memcg, nr_pages);
3039 : 0 : return -ENOMEM;
3040 : : }
3041 : : return 0;
3042 : : }
3043 : :
3044 : : /**
3045 : : * __memcg_kmem_charge: charge a kmem page to the current memory cgroup
3046 : : * @page: page to charge
3047 : : * @gfp: reclaim mode
3048 : : * @order: allocation order
3049 : : *
3050 : : * Returns 0 on success, an error code on failure.
3051 : : */
3052 : 0 : int __memcg_kmem_charge(struct page *page, gfp_t gfp, int order)
3053 : : {
3054 : : struct mem_cgroup *memcg;
3055 : : int ret = 0;
3056 : :
3057 [ # # ]: 0 : if (memcg_kmem_bypass())
3058 : : return 0;
3059 : :
3060 : : memcg = get_mem_cgroup_from_current();
3061 [ # # ]: 0 : if (!mem_cgroup_is_root(memcg)) {
3062 : 0 : ret = __memcg_kmem_charge_memcg(page, gfp, order, memcg);
3063 [ # # ]: 0 : if (!ret) {
3064 : 0 : page->mem_cgroup = memcg;
3065 : : __SetPageKmemcg(page);
3066 : : }
3067 : : }
3068 : : css_put(&memcg->css);
3069 : 0 : return ret;
3070 : : }
3071 : :
3072 : : /**
3073 : : * __memcg_kmem_uncharge_memcg: uncharge a kmem page
3074 : : * @memcg: memcg to uncharge
3075 : : * @nr_pages: number of pages to uncharge
3076 : : */
3077 : 0 : void __memcg_kmem_uncharge_memcg(struct mem_cgroup *memcg,
3078 : : unsigned int nr_pages)
3079 : : {
3080 [ # # ]: 0 : if (!cgroup_subsys_on_dfl(memory_cgrp_subsys))
3081 : 0 : page_counter_uncharge(&memcg->kmem, nr_pages);
3082 : :
3083 : 0 : page_counter_uncharge(&memcg->memory, nr_pages);
3084 : : if (do_memsw_account())
3085 : : page_counter_uncharge(&memcg->memsw, nr_pages);
3086 : 0 : }
3087 : : /**
3088 : : * __memcg_kmem_uncharge: uncharge a kmem page
3089 : : * @page: page to uncharge
3090 : : * @order: allocation order
3091 : : */
3092 : 0 : void __memcg_kmem_uncharge(struct page *page, int order)
3093 : : {
3094 : 0 : struct mem_cgroup *memcg = page->mem_cgroup;
3095 : 0 : unsigned int nr_pages = 1 << order;
3096 : :
3097 [ # # ]: 0 : if (!memcg)
3098 : 0 : return;
3099 : :
3100 : : VM_BUG_ON_PAGE(mem_cgroup_is_root(memcg), page);
3101 : 0 : __memcg_kmem_uncharge_memcg(memcg, nr_pages);
3102 : 0 : page->mem_cgroup = NULL;
3103 : :
3104 : : /* slab pages do not have PageKmemcg flag set */
3105 [ # # ]: 0 : if (PageKmemcg(page))
3106 : : __ClearPageKmemcg(page);
3107 : :
3108 : : css_put_many(&memcg->css, nr_pages);
3109 : : }
3110 : : #endif /* CONFIG_MEMCG_KMEM */
3111 : :
3112 : : #ifdef CONFIG_TRANSPARENT_HUGEPAGE
3113 : :
3114 : : /*
3115 : : * Because tail pages are not marked as "used", set it. We're under
3116 : : * pgdat->lru_lock and migration entries setup in all page mappings.
3117 : : */
3118 : : void mem_cgroup_split_huge_fixup(struct page *head)
3119 : : {
3120 : : int i;
3121 : :
3122 : : if (mem_cgroup_disabled())
3123 : : return;
3124 : :
3125 : : for (i = 1; i < HPAGE_PMD_NR; i++)
3126 : : head[i].mem_cgroup = head->mem_cgroup;
3127 : :
3128 : : __mod_memcg_state(head->mem_cgroup, MEMCG_RSS_HUGE, -HPAGE_PMD_NR);
3129 : : }
3130 : : #endif /* CONFIG_TRANSPARENT_HUGEPAGE */
3131 : :
3132 : : #ifdef CONFIG_MEMCG_SWAP
3133 : : /**
3134 : : * mem_cgroup_move_swap_account - move swap charge and swap_cgroup's record.
3135 : : * @entry: swap entry to be moved
3136 : : * @from: mem_cgroup which the entry is moved from
3137 : : * @to: mem_cgroup which the entry is moved to
3138 : : *
3139 : : * It succeeds only when the swap_cgroup's record for this entry is the same
3140 : : * as the mem_cgroup's id of @from.
3141 : : *
3142 : : * Returns 0 on success, -EINVAL on failure.
3143 : : *
3144 : : * The caller must have charged to @to, IOW, called page_counter_charge() about
3145 : : * both res and memsw, and called css_get().
3146 : : */
3147 : : static int mem_cgroup_move_swap_account(swp_entry_t entry,
3148 : : struct mem_cgroup *from, struct mem_cgroup *to)
3149 : : {
3150 : : unsigned short old_id, new_id;
3151 : :
3152 : : old_id = mem_cgroup_id(from);
3153 : : new_id = mem_cgroup_id(to);
3154 : :
3155 : : if (swap_cgroup_cmpxchg(entry, old_id, new_id) == old_id) {
3156 : : mod_memcg_state(from, MEMCG_SWAP, -1);
3157 : : mod_memcg_state(to, MEMCG_SWAP, 1);
3158 : : return 0;
3159 : : }
3160 : : return -EINVAL;
3161 : : }
3162 : : #else
3163 : : static inline int mem_cgroup_move_swap_account(swp_entry_t entry,
3164 : : struct mem_cgroup *from, struct mem_cgroup *to)
3165 : : {
3166 : : return -EINVAL;
3167 : : }
3168 : : #endif
3169 : :
3170 : : static DEFINE_MUTEX(memcg_max_mutex);
3171 : :
3172 : 0 : static int mem_cgroup_resize_max(struct mem_cgroup *memcg,
3173 : : unsigned long max, bool memsw)
3174 : : {
3175 : : bool enlarge = false;
3176 : : bool drained = false;
3177 : : int ret;
3178 : : bool limits_invariant;
3179 [ # # ]: 0 : struct page_counter *counter = memsw ? &memcg->memsw : &memcg->memory;
3180 : :
3181 : : do {
3182 [ # # ]: 0 : if (signal_pending(current)) {
3183 : : ret = -EINTR;
3184 : : break;
3185 : : }
3186 : :
3187 : 0 : mutex_lock(&memcg_max_mutex);
3188 : : /*
3189 : : * Make sure that the new limit (memsw or memory limit) doesn't
3190 : : * break our basic invariant rule memory.max <= memsw.max.
3191 : : */
3192 [ # # ]: 0 : limits_invariant = memsw ? max >= memcg->memory.max :
3193 : 0 : max <= memcg->memsw.max;
3194 [ # # ]: 0 : if (!limits_invariant) {
3195 : 0 : mutex_unlock(&memcg_max_mutex);
3196 : : ret = -EINVAL;
3197 : 0 : break;
3198 : : }
3199 [ # # ]: 0 : if (max > counter->max)
3200 : : enlarge = true;
3201 : 0 : ret = page_counter_set_max(counter, max);
3202 : 0 : mutex_unlock(&memcg_max_mutex);
3203 : :
3204 [ # # ]: 0 : if (!ret)
3205 : : break;
3206 : :
3207 [ # # ]: 0 : if (!drained) {
3208 : 0 : drain_all_stock(memcg);
3209 : : drained = true;
3210 : 0 : continue;
3211 : : }
3212 : :
3213 [ # # ]: 0 : if (!try_to_free_mem_cgroup_pages(memcg, 1,
3214 : 0 : GFP_KERNEL, !memsw)) {
3215 : : ret = -EBUSY;
3216 : : break;
3217 : : }
3218 : : } while (true);
3219 : :
3220 [ # # ]: 0 : if (!ret && enlarge)
3221 : 0 : memcg_oom_recover(memcg);
3222 : :
3223 : 0 : return ret;
3224 : : }
3225 : :
3226 : 0 : unsigned long mem_cgroup_soft_limit_reclaim(pg_data_t *pgdat, int order,
3227 : : gfp_t gfp_mask,
3228 : : unsigned long *total_scanned)
3229 : : {
3230 : : unsigned long nr_reclaimed = 0;
3231 : : struct mem_cgroup_per_node *mz, *next_mz = NULL;
3232 : : unsigned long reclaimed;
3233 : : int loop = 0;
3234 : : struct mem_cgroup_tree_per_node *mctz;
3235 : : unsigned long excess;
3236 : : unsigned long nr_scanned;
3237 : :
3238 [ # # ]: 0 : if (order > 0)
3239 : : return 0;
3240 : :
3241 : 0 : mctz = soft_limit_tree_node(pgdat->node_id);
3242 : :
3243 : : /*
3244 : : * Do not even bother to check the largest node if the root
3245 : : * is empty. Do it lockless to prevent lock bouncing. Races
3246 : : * are acceptable as soft limit is best effort anyway.
3247 : : */
3248 [ # # # # ]: 0 : if (!mctz || RB_EMPTY_ROOT(&mctz->rb_root))
3249 : : return 0;
3250 : :
3251 : : /*
3252 : : * This loop can run a while, specially if mem_cgroup's continuously
3253 : : * keep exceeding their soft limit and putting the system under
3254 : : * pressure
3255 : : */
3256 : : do {
3257 [ # # ]: 0 : if (next_mz)
3258 : : mz = next_mz;
3259 : : else
3260 : 0 : mz = mem_cgroup_largest_soft_limit_node(mctz);
3261 [ # # ]: 0 : if (!mz)
3262 : : break;
3263 : :
3264 : 0 : nr_scanned = 0;
3265 : 0 : reclaimed = mem_cgroup_soft_reclaim(mz->memcg, pgdat,
3266 : : gfp_mask, &nr_scanned);
3267 : 0 : nr_reclaimed += reclaimed;
3268 : 0 : *total_scanned += nr_scanned;
3269 : : spin_lock_irq(&mctz->lock);
3270 : 0 : __mem_cgroup_remove_exceeded(mz, mctz);
3271 : :
3272 : : /*
3273 : : * If we failed to reclaim anything from this memory cgroup
3274 : : * it is time to move on to the next cgroup
3275 : : */
3276 : : next_mz = NULL;
3277 [ # # ]: 0 : if (!reclaimed)
3278 : 0 : next_mz = __mem_cgroup_largest_soft_limit_node(mctz);
3279 : :
3280 : 0 : excess = soft_limit_excess(mz->memcg);
3281 : : /*
3282 : : * One school of thought says that we should not add
3283 : : * back the node to the tree if reclaim returns 0.
3284 : : * But our reclaim could return 0, simply because due
3285 : : * to priority we are exposing a smaller subset of
3286 : : * memory to reclaim from. Consider this as a longer
3287 : : * term TODO.
3288 : : */
3289 : : /* If excess == 0, no tree ops */
3290 : 0 : __mem_cgroup_insert_exceeded(mz, mctz, excess);
3291 : : spin_unlock_irq(&mctz->lock);
3292 : 0 : css_put(&mz->memcg->css);
3293 : 0 : loop++;
3294 : : /*
3295 : : * Could not reclaim anything and there are no more
3296 : : * mem cgroups to try or we seem to be looping without
3297 : : * reclaiming anything.
3298 : : */
3299 [ # # # # ]: 0 : if (!nr_reclaimed &&
3300 : 0 : (next_mz == NULL ||
3301 : 0 : loop > MEM_CGROUP_MAX_SOFT_LIMIT_RECLAIM_LOOPS))
3302 : : break;
3303 [ # # ]: 0 : } while (!nr_reclaimed);
3304 [ # # ]: 0 : if (next_mz)
3305 : 0 : css_put(&next_mz->memcg->css);
3306 : 0 : return nr_reclaimed;
3307 : : }
3308 : :
3309 : : /*
3310 : : * Test whether @memcg has children, dead or alive. Note that this
3311 : : * function doesn't care whether @memcg has use_hierarchy enabled and
3312 : : * returns %true if there are child csses according to the cgroup
3313 : : * hierarchy. Testing use_hierarchy is the caller's responsiblity.
3314 : : */
3315 : : static inline bool memcg_has_children(struct mem_cgroup *memcg)
3316 : : {
3317 : : bool ret;
3318 : :
3319 : : rcu_read_lock();
3320 : 0 : ret = css_next_child(NULL, &memcg->css);
3321 : : rcu_read_unlock();
3322 : : return ret;
3323 : : }
3324 : :
3325 : : /*
3326 : : * Reclaims as many pages from the given memcg as possible.
3327 : : *
3328 : : * Caller is responsible for holding css reference for memcg.
3329 : : */
3330 : 0 : static int mem_cgroup_force_empty(struct mem_cgroup *memcg)
3331 : : {
3332 : : int nr_retries = MEM_CGROUP_RECLAIM_RETRIES;
3333 : :
3334 : : /* we call try-to-free pages for make this cgroup empty */
3335 : 0 : lru_add_drain_all();
3336 : :
3337 : 0 : drain_all_stock(memcg);
3338 : :
3339 : : /* try to free all pages in this cgroup */
3340 [ # # # # ]: 0 : while (nr_retries && page_counter_read(&memcg->memory)) {
3341 : : int progress;
3342 : :
3343 [ # # ]: 0 : if (signal_pending(current))
3344 : : return -EINTR;
3345 : :
3346 : 0 : progress = try_to_free_mem_cgroup_pages(memcg, 1,
3347 : : GFP_KERNEL, true);
3348 [ # # ]: 0 : if (!progress) {
3349 : 0 : nr_retries--;
3350 : : /* maybe some writeback is necessary */
3351 : 0 : congestion_wait(BLK_RW_ASYNC, HZ/10);
3352 : : }
3353 : :
3354 : : }
3355 : :
3356 : : return 0;
3357 : : }
3358 : :
3359 : 0 : static ssize_t mem_cgroup_force_empty_write(struct kernfs_open_file *of,
3360 : : char *buf, size_t nbytes,
3361 : : loff_t off)
3362 : : {
3363 : 0 : struct mem_cgroup *memcg = mem_cgroup_from_css(of_css(of));
3364 : :
3365 [ # # ]: 0 : if (mem_cgroup_is_root(memcg))
3366 : : return -EINVAL;
3367 [ # # ]: 0 : return mem_cgroup_force_empty(memcg) ?: nbytes;
3368 : : }
3369 : :
3370 : 0 : static u64 mem_cgroup_hierarchy_read(struct cgroup_subsys_state *css,
3371 : : struct cftype *cft)
3372 : : {
3373 : 0 : return mem_cgroup_from_css(css)->use_hierarchy;
3374 : : }
3375 : :
3376 : 0 : static int mem_cgroup_hierarchy_write(struct cgroup_subsys_state *css,
3377 : : struct cftype *cft, u64 val)
3378 : : {
3379 : : int retval = 0;
3380 : : struct mem_cgroup *memcg = mem_cgroup_from_css(css);
3381 : 0 : struct mem_cgroup *parent_memcg = mem_cgroup_from_css(memcg->css.parent);
3382 : :
3383 [ # # ]: 0 : if (memcg->use_hierarchy == val)
3384 : : return 0;
3385 : :
3386 : : /*
3387 : : * If parent's use_hierarchy is set, we can't make any modifications
3388 : : * in the child subtrees. If it is unset, then the change can
3389 : : * occur, provided the current cgroup has no children.
3390 : : *
3391 : : * For the root cgroup, parent_mem is NULL, we allow value to be
3392 : : * set if there are no children.
3393 : : */
3394 [ # # # # : 0 : if ((!parent_memcg || !parent_memcg->use_hierarchy) &&
# # ]
3395 : : (val == 1 || val == 0)) {
3396 [ # # ]: 0 : if (!memcg_has_children(memcg))
3397 : 0 : memcg->use_hierarchy = val;
3398 : : else
3399 : : retval = -EBUSY;
3400 : : } else
3401 : : retval = -EINVAL;
3402 : :
3403 : 0 : return retval;
3404 : : }
3405 : :
3406 : 0 : static unsigned long mem_cgroup_usage(struct mem_cgroup *memcg, bool swap)
3407 : : {
3408 : : unsigned long val;
3409 : :
3410 [ # # ]: 0 : if (mem_cgroup_is_root(memcg)) {
3411 : 0 : val = memcg_page_state(memcg, MEMCG_CACHE) +
3412 : : memcg_page_state(memcg, MEMCG_RSS);
3413 [ # # ]: 0 : if (swap)
3414 : 0 : val += memcg_page_state(memcg, MEMCG_SWAP);
3415 : : } else {
3416 [ # # ]: 0 : if (!swap)
3417 : : val = page_counter_read(&memcg->memory);
3418 : : else
3419 : : val = page_counter_read(&memcg->memsw);
3420 : : }
3421 : 0 : return val;
3422 : : }
3423 : :
3424 : : enum {
3425 : : RES_USAGE,
3426 : : RES_LIMIT,
3427 : : RES_MAX_USAGE,
3428 : : RES_FAILCNT,
3429 : : RES_SOFT_LIMIT,
3430 : : };
3431 : :
3432 : 0 : static u64 mem_cgroup_read_u64(struct cgroup_subsys_state *css,
3433 : : struct cftype *cft)
3434 : : {
3435 : : struct mem_cgroup *memcg = mem_cgroup_from_css(css);
3436 : : struct page_counter *counter;
3437 : :
3438 [ # # # # : 0 : switch (MEMFILE_TYPE(cft->private)) {
# ]
3439 : : case _MEM:
3440 : 0 : counter = &memcg->memory;
3441 : 0 : break;
3442 : : case _MEMSWAP:
3443 : 0 : counter = &memcg->memsw;
3444 : 0 : break;
3445 : : case _KMEM:
3446 : 0 : counter = &memcg->kmem;
3447 : 0 : break;
3448 : : case _TCP:
3449 : 0 : counter = &memcg->tcpmem;
3450 : 0 : break;
3451 : : default:
3452 : 0 : BUG();
3453 : : }
3454 : :
3455 [ # # # # : 0 : switch (MEMFILE_ATTR(cft->private)) {
# # ]
3456 : : case RES_USAGE:
3457 [ # # ]: 0 : if (counter == &memcg->memory)
3458 : 0 : return (u64)mem_cgroup_usage(memcg, false) * PAGE_SIZE;
3459 [ # # ]: 0 : if (counter == &memcg->memsw)
3460 : 0 : return (u64)mem_cgroup_usage(memcg, true) * PAGE_SIZE;
3461 : 0 : return (u64)page_counter_read(counter) * PAGE_SIZE;
3462 : : case RES_LIMIT:
3463 : 0 : return (u64)counter->max * PAGE_SIZE;
3464 : : case RES_MAX_USAGE:
3465 : 0 : return (u64)counter->watermark * PAGE_SIZE;
3466 : : case RES_FAILCNT:
3467 : 0 : return counter->failcnt;
3468 : : case RES_SOFT_LIMIT:
3469 : 0 : return (u64)memcg->soft_limit * PAGE_SIZE;
3470 : : default:
3471 : 0 : BUG();
3472 : : }
3473 : : }
3474 : :
3475 : 0 : static void memcg_flush_percpu_vmstats(struct mem_cgroup *memcg)
3476 : : {
3477 : 0 : unsigned long stat[MEMCG_NR_STAT] = {0};
3478 : : struct mem_cgroup *mi;
3479 : : int node, cpu, i;
3480 : :
3481 [ # # ]: 0 : for_each_online_cpu(cpu)
3482 [ # # ]: 0 : for (i = 0; i < MEMCG_NR_STAT; i++)
3483 : 0 : stat[i] += per_cpu(memcg->vmstats_percpu->stat[i], cpu);
3484 : :
3485 [ # # ]: 0 : for (mi = memcg; mi; mi = parent_mem_cgroup(mi))
3486 [ # # ]: 0 : for (i = 0; i < MEMCG_NR_STAT; i++)
3487 : 0 : atomic_long_add(stat[i], &mi->vmstats[i]);
3488 : :
3489 [ # # ]: 0 : for_each_node(node) {
3490 : 0 : struct mem_cgroup_per_node *pn = memcg->nodeinfo[node];
3491 : : struct mem_cgroup_per_node *pi;
3492 : :
3493 [ # # ]: 0 : for (i = 0; i < NR_VM_NODE_STAT_ITEMS; i++)
3494 : 0 : stat[i] = 0;
3495 : :
3496 [ # # ]: 0 : for_each_online_cpu(cpu)
3497 [ # # ]: 0 : for (i = 0; i < NR_VM_NODE_STAT_ITEMS; i++)
3498 : 0 : stat[i] += per_cpu(
3499 : : pn->lruvec_stat_cpu->count[i], cpu);
3500 : :
3501 [ # # ]: 0 : for (pi = pn; pi; pi = parent_nodeinfo(pi, node))
3502 [ # # ]: 0 : for (i = 0; i < NR_VM_NODE_STAT_ITEMS; i++)
3503 : 0 : atomic_long_add(stat[i], &pi->lruvec_stat[i]);
3504 : : }
3505 : 0 : }
3506 : :
3507 : 0 : static void memcg_flush_percpu_vmevents(struct mem_cgroup *memcg)
3508 : : {
3509 : : unsigned long events[NR_VM_EVENT_ITEMS];
3510 : : struct mem_cgroup *mi;
3511 : : int cpu, i;
3512 : :
3513 [ # # ]: 0 : for (i = 0; i < NR_VM_EVENT_ITEMS; i++)
3514 : 0 : events[i] = 0;
3515 : :
3516 [ # # ]: 0 : for_each_online_cpu(cpu)
3517 [ # # ]: 0 : for (i = 0; i < NR_VM_EVENT_ITEMS; i++)
3518 : 0 : events[i] += per_cpu(memcg->vmstats_percpu->events[i],
3519 : : cpu);
3520 : :
3521 [ # # ]: 0 : for (mi = memcg; mi; mi = parent_mem_cgroup(mi))
3522 [ # # ]: 0 : for (i = 0; i < NR_VM_EVENT_ITEMS; i++)
3523 : 0 : atomic_long_add(events[i], &mi->vmevents[i]);
3524 : 0 : }
3525 : :
3526 : : #ifdef CONFIG_MEMCG_KMEM
3527 : 0 : static int memcg_online_kmem(struct mem_cgroup *memcg)
3528 : : {
3529 : : int memcg_id;
3530 : :
3531 [ # # ]: 0 : if (cgroup_memory_nokmem)
3532 : : return 0;
3533 : :
3534 [ # # ]: 0 : BUG_ON(memcg->kmemcg_id >= 0);
3535 [ # # ]: 0 : BUG_ON(memcg->kmem_state);
3536 : :
3537 : 0 : memcg_id = memcg_alloc_cache_id();
3538 [ # # ]: 0 : if (memcg_id < 0)
3539 : : return memcg_id;
3540 : :
3541 : 0 : static_branch_inc(&memcg_kmem_enabled_key);
3542 : : /*
3543 : : * A memory cgroup is considered kmem-online as soon as it gets
3544 : : * kmemcg_id. Setting the id after enabling static branching will
3545 : : * guarantee no one starts accounting before all call sites are
3546 : : * patched.
3547 : : */
3548 : 0 : memcg->kmemcg_id = memcg_id;
3549 : 0 : memcg->kmem_state = KMEM_ONLINE;
3550 : 0 : INIT_LIST_HEAD(&memcg->kmem_caches);
3551 : :
3552 : 0 : return 0;
3553 : : }
3554 : :
3555 : 0 : static void memcg_offline_kmem(struct mem_cgroup *memcg)
3556 : : {
3557 : : struct cgroup_subsys_state *css;
3558 : : struct mem_cgroup *parent, *child;
3559 : : int kmemcg_id;
3560 : :
3561 [ # # ]: 0 : if (memcg->kmem_state != KMEM_ONLINE)
3562 : 0 : return;
3563 : : /*
3564 : : * Clear the online state before clearing memcg_caches array
3565 : : * entries. The slab_mutex in memcg_deactivate_kmem_caches()
3566 : : * guarantees that no cache will be created for this cgroup
3567 : : * after we are done (see memcg_create_kmem_cache()).
3568 : : */
3569 : 0 : memcg->kmem_state = KMEM_ALLOCATED;
3570 : :
3571 : : parent = parent_mem_cgroup(memcg);
3572 [ # # ]: 0 : if (!parent)
3573 : 0 : parent = root_mem_cgroup;
3574 : :
3575 : : /*
3576 : : * Deactivate and reparent kmem_caches.
3577 : : */
3578 : 0 : memcg_deactivate_kmem_caches(memcg, parent);
3579 : :
3580 : 0 : kmemcg_id = memcg->kmemcg_id;
3581 [ # # ]: 0 : BUG_ON(kmemcg_id < 0);
3582 : :
3583 : : /*
3584 : : * Change kmemcg_id of this cgroup and all its descendants to the
3585 : : * parent's id, and then move all entries from this cgroup's list_lrus
3586 : : * to ones of the parent. After we have finished, all list_lrus
3587 : : * corresponding to this cgroup are guaranteed to remain empty. The
3588 : : * ordering is imposed by list_lru_node->lock taken by
3589 : : * memcg_drain_all_list_lrus().
3590 : : */
3591 : : rcu_read_lock(); /* can be called from css_free w/o cgroup_mutex */
3592 [ # # ]: 0 : css_for_each_descendant_pre(css, &memcg->css) {
3593 : : child = mem_cgroup_from_css(css);
3594 [ # # ]: 0 : BUG_ON(child->kmemcg_id != kmemcg_id);
3595 : 0 : child->kmemcg_id = parent->kmemcg_id;
3596 [ # # ]: 0 : if (!memcg->use_hierarchy)
3597 : : break;
3598 : : }
3599 : : rcu_read_unlock();
3600 : :
3601 : 0 : memcg_drain_all_list_lrus(kmemcg_id, parent);
3602 : :
3603 : : memcg_free_cache_id(kmemcg_id);
3604 : : }
3605 : :
3606 : 0 : static void memcg_free_kmem(struct mem_cgroup *memcg)
3607 : : {
3608 : : /* css_alloc() failed, offlining didn't happen */
3609 [ # # ]: 0 : if (unlikely(memcg->kmem_state == KMEM_ONLINE))
3610 : 0 : memcg_offline_kmem(memcg);
3611 : :
3612 [ # # ]: 0 : if (memcg->kmem_state == KMEM_ALLOCATED) {
3613 [ # # ]: 0 : WARN_ON(!list_empty(&memcg->kmem_caches));
3614 : 0 : static_branch_dec(&memcg_kmem_enabled_key);
3615 : : }
3616 : 0 : }
3617 : : #else
3618 : : static int memcg_online_kmem(struct mem_cgroup *memcg)
3619 : : {
3620 : : return 0;
3621 : : }
3622 : : static void memcg_offline_kmem(struct mem_cgroup *memcg)
3623 : : {
3624 : : }
3625 : : static void memcg_free_kmem(struct mem_cgroup *memcg)
3626 : : {
3627 : : }
3628 : : #endif /* CONFIG_MEMCG_KMEM */
3629 : :
3630 : 0 : static int memcg_update_kmem_max(struct mem_cgroup *memcg,
3631 : : unsigned long max)
3632 : : {
3633 : : int ret;
3634 : :
3635 : 0 : mutex_lock(&memcg_max_mutex);
3636 : 0 : ret = page_counter_set_max(&memcg->kmem, max);
3637 : 0 : mutex_unlock(&memcg_max_mutex);
3638 : 0 : return ret;
3639 : : }
3640 : :
3641 : 0 : static int memcg_update_tcp_max(struct mem_cgroup *memcg, unsigned long max)
3642 : : {
3643 : : int ret;
3644 : :
3645 : 0 : mutex_lock(&memcg_max_mutex);
3646 : :
3647 : 0 : ret = page_counter_set_max(&memcg->tcpmem, max);
3648 [ # # ]: 0 : if (ret)
3649 : : goto out;
3650 : :
3651 [ # # ]: 0 : if (!memcg->tcpmem_active) {
3652 : : /*
3653 : : * The active flag needs to be written after the static_key
3654 : : * update. This is what guarantees that the socket activation
3655 : : * function is the last one to run. See mem_cgroup_sk_alloc()
3656 : : * for details, and note that we don't mark any socket as
3657 : : * belonging to this memcg until that flag is up.
3658 : : *
3659 : : * We need to do this, because static_keys will span multiple
3660 : : * sites, but we can't control their order. If we mark a socket
3661 : : * as accounted, but the accounting functions are not patched in
3662 : : * yet, we'll lose accounting.
3663 : : *
3664 : : * We never race with the readers in mem_cgroup_sk_alloc(),
3665 : : * because when this value change, the code to process it is not
3666 : : * patched in yet.
3667 : : */
3668 : 0 : static_branch_inc(&memcg_sockets_enabled_key);
3669 : 0 : memcg->tcpmem_active = true;
3670 : : }
3671 : : out:
3672 : 0 : mutex_unlock(&memcg_max_mutex);
3673 : 0 : return ret;
3674 : : }
3675 : :
3676 : : /*
3677 : : * The user of this function is...
3678 : : * RES_LIMIT.
3679 : : */
3680 : 0 : static ssize_t mem_cgroup_write(struct kernfs_open_file *of,
3681 : : char *buf, size_t nbytes, loff_t off)
3682 : : {
3683 : 0 : struct mem_cgroup *memcg = mem_cgroup_from_css(of_css(of));
3684 : : unsigned long nr_pages;
3685 : : int ret;
3686 : :
3687 : : buf = strstrip(buf);
3688 : 0 : ret = page_counter_memparse(buf, "-1", &nr_pages);
3689 [ # # ]: 0 : if (ret)
3690 : : return ret;
3691 : :
3692 [ # # # ]: 0 : switch (MEMFILE_ATTR(of_cft(of)->private)) {
3693 : : case RES_LIMIT:
3694 [ # # ]: 0 : if (mem_cgroup_is_root(memcg)) { /* Can't set limit on root */
3695 : : ret = -EINVAL;
3696 : : break;
3697 : : }
3698 [ # # # # : 0 : switch (MEMFILE_TYPE(of_cft(of)->private)) {
# ]
3699 : : case _MEM:
3700 : 0 : ret = mem_cgroup_resize_max(memcg, nr_pages, false);
3701 : 0 : break;
3702 : : case _MEMSWAP:
3703 : 0 : ret = mem_cgroup_resize_max(memcg, nr_pages, true);
3704 : 0 : break;
3705 : : case _KMEM:
3706 [ # # ]: 0 : pr_warn_once("kmem.limit_in_bytes is deprecated and will be removed. "
3707 : : "Please report your usecase to linux-mm@kvack.org if you "
3708 : : "depend on this functionality.\n");
3709 : 0 : ret = memcg_update_kmem_max(memcg, nr_pages);
3710 : 0 : break;
3711 : : case _TCP:
3712 : 0 : ret = memcg_update_tcp_max(memcg, nr_pages);
3713 : 0 : break;
3714 : : }
3715 : : break;
3716 : : case RES_SOFT_LIMIT:
3717 : 0 : memcg->soft_limit = nr_pages;
3718 : : ret = 0;
3719 : 0 : break;
3720 : : }
3721 [ # # ]: 0 : return ret ?: nbytes;
3722 : : }
3723 : :
3724 : 0 : static ssize_t mem_cgroup_reset(struct kernfs_open_file *of, char *buf,
3725 : : size_t nbytes, loff_t off)
3726 : : {
3727 : 0 : struct mem_cgroup *memcg = mem_cgroup_from_css(of_css(of));
3728 : : struct page_counter *counter;
3729 : :
3730 [ # # # # : 0 : switch (MEMFILE_TYPE(of_cft(of)->private)) {
# ]
3731 : : case _MEM:
3732 : 0 : counter = &memcg->memory;
3733 : 0 : break;
3734 : : case _MEMSWAP:
3735 : 0 : counter = &memcg->memsw;
3736 : 0 : break;
3737 : : case _KMEM:
3738 : 0 : counter = &memcg->kmem;
3739 : 0 : break;
3740 : : case _TCP:
3741 : 0 : counter = &memcg->tcpmem;
3742 : 0 : break;
3743 : : default:
3744 : 0 : BUG();
3745 : : }
3746 : :
3747 [ # # # ]: 0 : switch (MEMFILE_ATTR(of_cft(of)->private)) {
3748 : : case RES_MAX_USAGE:
3749 : : page_counter_reset_watermark(counter);
3750 : : break;
3751 : : case RES_FAILCNT:
3752 : 0 : counter->failcnt = 0;
3753 : 0 : break;
3754 : : default:
3755 : 0 : BUG();
3756 : : }
3757 : :
3758 : 0 : return nbytes;
3759 : : }
3760 : :
3761 : 0 : static u64 mem_cgroup_move_charge_read(struct cgroup_subsys_state *css,
3762 : : struct cftype *cft)
3763 : : {
3764 : 0 : return mem_cgroup_from_css(css)->move_charge_at_immigrate;
3765 : : }
3766 : :
3767 : : #ifdef CONFIG_MMU
3768 : 0 : static int mem_cgroup_move_charge_write(struct cgroup_subsys_state *css,
3769 : : struct cftype *cft, u64 val)
3770 : : {
3771 : : struct mem_cgroup *memcg = mem_cgroup_from_css(css);
3772 : :
3773 [ # # ]: 0 : if (val & ~MOVE_MASK)
3774 : : return -EINVAL;
3775 : :
3776 : : /*
3777 : : * No kind of locking is needed in here, because ->can_attach() will
3778 : : * check this value once in the beginning of the process, and then carry
3779 : : * on with stale data. This means that changes to this value will only
3780 : : * affect task migrations starting after the change.
3781 : : */
3782 : 0 : memcg->move_charge_at_immigrate = val;
3783 : 0 : return 0;
3784 : : }
3785 : : #else
3786 : : static int mem_cgroup_move_charge_write(struct cgroup_subsys_state *css,
3787 : : struct cftype *cft, u64 val)
3788 : : {
3789 : : return -ENOSYS;
3790 : : }
3791 : : #endif
3792 : :
3793 : : #ifdef CONFIG_NUMA
3794 : :
3795 : : #define LRU_ALL_FILE (BIT(LRU_INACTIVE_FILE) | BIT(LRU_ACTIVE_FILE))
3796 : : #define LRU_ALL_ANON (BIT(LRU_INACTIVE_ANON) | BIT(LRU_ACTIVE_ANON))
3797 : : #define LRU_ALL ((1 << NR_LRU_LISTS) - 1)
3798 : :
3799 : : static unsigned long mem_cgroup_node_nr_lru_pages(struct mem_cgroup *memcg,
3800 : : int nid, unsigned int lru_mask)
3801 : : {
3802 : : struct lruvec *lruvec = mem_cgroup_lruvec(NODE_DATA(nid), memcg);
3803 : : unsigned long nr = 0;
3804 : : enum lru_list lru;
3805 : :
3806 : : VM_BUG_ON((unsigned)nid >= nr_node_ids);
3807 : :
3808 : : for_each_lru(lru) {
3809 : : if (!(BIT(lru) & lru_mask))
3810 : : continue;
3811 : : nr += lruvec_page_state_local(lruvec, NR_LRU_BASE + lru);
3812 : : }
3813 : : return nr;
3814 : : }
3815 : :
3816 : : static unsigned long mem_cgroup_nr_lru_pages(struct mem_cgroup *memcg,
3817 : : unsigned int lru_mask)
3818 : : {
3819 : : unsigned long nr = 0;
3820 : : enum lru_list lru;
3821 : :
3822 : : for_each_lru(lru) {
3823 : : if (!(BIT(lru) & lru_mask))
3824 : : continue;
3825 : : nr += memcg_page_state_local(memcg, NR_LRU_BASE + lru);
3826 : : }
3827 : : return nr;
3828 : : }
3829 : :
3830 : : static int memcg_numa_stat_show(struct seq_file *m, void *v)
3831 : : {
3832 : : struct numa_stat {
3833 : : const char *name;
3834 : : unsigned int lru_mask;
3835 : : };
3836 : :
3837 : : static const struct numa_stat stats[] = {
3838 : : { "total", LRU_ALL },
3839 : : { "file", LRU_ALL_FILE },
3840 : : { "anon", LRU_ALL_ANON },
3841 : : { "unevictable", BIT(LRU_UNEVICTABLE) },
3842 : : };
3843 : : const struct numa_stat *stat;
3844 : : int nid;
3845 : : unsigned long nr;
3846 : : struct mem_cgroup *memcg = mem_cgroup_from_seq(m);
3847 : :
3848 : : for (stat = stats; stat < stats + ARRAY_SIZE(stats); stat++) {
3849 : : nr = mem_cgroup_nr_lru_pages(memcg, stat->lru_mask);
3850 : : seq_printf(m, "%s=%lu", stat->name, nr);
3851 : : for_each_node_state(nid, N_MEMORY) {
3852 : : nr = mem_cgroup_node_nr_lru_pages(memcg, nid,
3853 : : stat->lru_mask);
3854 : : seq_printf(m, " N%d=%lu", nid, nr);
3855 : : }
3856 : : seq_putc(m, '\n');
3857 : : }
3858 : :
3859 : : for (stat = stats; stat < stats + ARRAY_SIZE(stats); stat++) {
3860 : : struct mem_cgroup *iter;
3861 : :
3862 : : nr = 0;
3863 : : for_each_mem_cgroup_tree(iter, memcg)
3864 : : nr += mem_cgroup_nr_lru_pages(iter, stat->lru_mask);
3865 : : seq_printf(m, "hierarchical_%s=%lu", stat->name, nr);
3866 : : for_each_node_state(nid, N_MEMORY) {
3867 : : nr = 0;
3868 : : for_each_mem_cgroup_tree(iter, memcg)
3869 : : nr += mem_cgroup_node_nr_lru_pages(
3870 : : iter, nid, stat->lru_mask);
3871 : : seq_printf(m, " N%d=%lu", nid, nr);
3872 : : }
3873 : : seq_putc(m, '\n');
3874 : : }
3875 : :
3876 : : return 0;
3877 : : }
3878 : : #endif /* CONFIG_NUMA */
3879 : :
3880 : : static const unsigned int memcg1_stats[] = {
3881 : : MEMCG_CACHE,
3882 : : MEMCG_RSS,
3883 : : MEMCG_RSS_HUGE,
3884 : : NR_SHMEM,
3885 : : NR_FILE_MAPPED,
3886 : : NR_FILE_DIRTY,
3887 : : NR_WRITEBACK,
3888 : : MEMCG_SWAP,
3889 : : };
3890 : :
3891 : : static const char *const memcg1_stat_names[] = {
3892 : : "cache",
3893 : : "rss",
3894 : : "rss_huge",
3895 : : "shmem",
3896 : : "mapped_file",
3897 : : "dirty",
3898 : : "writeback",
3899 : : "swap",
3900 : : };
3901 : :
3902 : : /* Universal VM events cgroup1 shows, original sort order */
3903 : : static const unsigned int memcg1_events[] = {
3904 : : PGPGIN,
3905 : : PGPGOUT,
3906 : : PGFAULT,
3907 : : PGMAJFAULT,
3908 : : };
3909 : :
3910 : : static const char *const memcg1_event_names[] = {
3911 : : "pgpgin",
3912 : : "pgpgout",
3913 : : "pgfault",
3914 : : "pgmajfault",
3915 : : };
3916 : :
3917 : 0 : static int memcg_stat_show(struct seq_file *m, void *v)
3918 : : {
3919 : : struct mem_cgroup *memcg = mem_cgroup_from_seq(m);
3920 : : unsigned long memory, memsw;
3921 : : struct mem_cgroup *mi;
3922 : : unsigned int i;
3923 : :
3924 : : BUILD_BUG_ON(ARRAY_SIZE(memcg1_stat_names) != ARRAY_SIZE(memcg1_stats));
3925 : : BUILD_BUG_ON(ARRAY_SIZE(mem_cgroup_lru_names) != NR_LRU_LISTS);
3926 : :
3927 [ # # ]: 0 : for (i = 0; i < ARRAY_SIZE(memcg1_stats); i++) {
3928 [ # # ]: 0 : if (memcg1_stats[i] == MEMCG_SWAP && !do_memsw_account())
3929 : 0 : continue;
3930 : 0 : seq_printf(m, "%s %lu\n", memcg1_stat_names[i],
3931 : 0 : memcg_page_state_local(memcg, memcg1_stats[i]) *
3932 : : PAGE_SIZE);
3933 : : }
3934 : :
3935 [ # # ]: 0 : for (i = 0; i < ARRAY_SIZE(memcg1_events); i++)
3936 : 0 : seq_printf(m, "%s %lu\n", memcg1_event_names[i],
3937 : 0 : memcg_events_local(memcg, memcg1_events[i]));
3938 : :
3939 [ # # ]: 0 : for (i = 0; i < NR_LRU_LISTS; i++)
3940 : 0 : seq_printf(m, "%s %lu\n", mem_cgroup_lru_names[i],
3941 : 0 : memcg_page_state_local(memcg, NR_LRU_BASE + i) *
3942 : : PAGE_SIZE);
3943 : :
3944 : : /* Hierarchical information */
3945 : : memory = memsw = PAGE_COUNTER_MAX;
3946 [ # # ]: 0 : for (mi = memcg; mi; mi = parent_mem_cgroup(mi)) {
3947 : 0 : memory = min(memory, mi->memory.max);
3948 : : memsw = min(memsw, mi->memsw.max);
3949 : : }
3950 : 0 : seq_printf(m, "hierarchical_memory_limit %llu\n",
3951 : 0 : (u64)memory * PAGE_SIZE);
3952 : : if (do_memsw_account())
3953 : : seq_printf(m, "hierarchical_memsw_limit %llu\n",
3954 : : (u64)memsw * PAGE_SIZE);
3955 : :
3956 [ # # ]: 0 : for (i = 0; i < ARRAY_SIZE(memcg1_stats); i++) {
3957 [ # # ]: 0 : if (memcg1_stats[i] == MEMCG_SWAP && !do_memsw_account())
3958 : 0 : continue;
3959 : 0 : seq_printf(m, "total_%s %llu\n", memcg1_stat_names[i],
3960 : 0 : (u64)memcg_page_state(memcg, memcg1_stats[i]) *
3961 : : PAGE_SIZE);
3962 : : }
3963 : :
3964 [ # # ]: 0 : for (i = 0; i < ARRAY_SIZE(memcg1_events); i++)
3965 : 0 : seq_printf(m, "total_%s %llu\n", memcg1_event_names[i],
3966 : 0 : (u64)memcg_events(memcg, memcg1_events[i]));
3967 : :
3968 [ # # ]: 0 : for (i = 0; i < NR_LRU_LISTS; i++)
3969 : 0 : seq_printf(m, "total_%s %llu\n", mem_cgroup_lru_names[i],
3970 : 0 : (u64)memcg_page_state(memcg, NR_LRU_BASE + i) *
3971 : : PAGE_SIZE);
3972 : :
3973 : : #ifdef CONFIG_DEBUG_VM
3974 : : {
3975 : : pg_data_t *pgdat;
3976 : : struct mem_cgroup_per_node *mz;
3977 : : struct zone_reclaim_stat *rstat;
3978 : : unsigned long recent_rotated[2] = {0, 0};
3979 : : unsigned long recent_scanned[2] = {0, 0};
3980 : :
3981 : : for_each_online_pgdat(pgdat) {
3982 : : mz = mem_cgroup_nodeinfo(memcg, pgdat->node_id);
3983 : : rstat = &mz->lruvec.reclaim_stat;
3984 : :
3985 : : recent_rotated[0] += rstat->recent_rotated[0];
3986 : : recent_rotated[1] += rstat->recent_rotated[1];
3987 : : recent_scanned[0] += rstat->recent_scanned[0];
3988 : : recent_scanned[1] += rstat->recent_scanned[1];
3989 : : }
3990 : : seq_printf(m, "recent_rotated_anon %lu\n", recent_rotated[0]);
3991 : : seq_printf(m, "recent_rotated_file %lu\n", recent_rotated[1]);
3992 : : seq_printf(m, "recent_scanned_anon %lu\n", recent_scanned[0]);
3993 : : seq_printf(m, "recent_scanned_file %lu\n", recent_scanned[1]);
3994 : : }
3995 : : #endif
3996 : :
3997 : 0 : return 0;
3998 : : }
3999 : :
4000 : 0 : static u64 mem_cgroup_swappiness_read(struct cgroup_subsys_state *css,
4001 : : struct cftype *cft)
4002 : : {
4003 : : struct mem_cgroup *memcg = mem_cgroup_from_css(css);
4004 : :
4005 : 0 : return mem_cgroup_swappiness(memcg);
4006 : : }
4007 : :
4008 : 0 : static int mem_cgroup_swappiness_write(struct cgroup_subsys_state *css,
4009 : : struct cftype *cft, u64 val)
4010 : : {
4011 : : struct mem_cgroup *memcg = mem_cgroup_from_css(css);
4012 : :
4013 [ # # ]: 0 : if (val > 100)
4014 : : return -EINVAL;
4015 : :
4016 [ # # ]: 0 : if (css->parent)
4017 : 0 : memcg->swappiness = val;
4018 : : else
4019 : 0 : vm_swappiness = val;
4020 : :
4021 : : return 0;
4022 : : }
4023 : :
4024 : 0 : static void __mem_cgroup_threshold(struct mem_cgroup *memcg, bool swap)
4025 : : {
4026 : : struct mem_cgroup_threshold_ary *t;
4027 : : unsigned long usage;
4028 : : int i;
4029 : :
4030 : : rcu_read_lock();
4031 [ # # ]: 0 : if (!swap)
4032 : 0 : t = rcu_dereference(memcg->thresholds.primary);
4033 : : else
4034 : 0 : t = rcu_dereference(memcg->memsw_thresholds.primary);
4035 : :
4036 [ # # ]: 0 : if (!t)
4037 : : goto unlock;
4038 : :
4039 : 0 : usage = mem_cgroup_usage(memcg, swap);
4040 : :
4041 : : /*
4042 : : * current_threshold points to threshold just below or equal to usage.
4043 : : * If it's not true, a threshold was crossed after last
4044 : : * call of __mem_cgroup_threshold().
4045 : : */
4046 : 0 : i = t->current_threshold;
4047 : :
4048 : : /*
4049 : : * Iterate backward over array of thresholds starting from
4050 : : * current_threshold and check if a threshold is crossed.
4051 : : * If none of thresholds below usage is crossed, we read
4052 : : * only one element of the array here.
4053 : : */
4054 [ # # # # ]: 0 : for (; i >= 0 && unlikely(t->entries[i].threshold > usage); i--)
4055 : 0 : eventfd_signal(t->entries[i].eventfd, 1);
4056 : :
4057 : : /* i = current_threshold + 1 */
4058 : 0 : i++;
4059 : :
4060 : : /*
4061 : : * Iterate forward over array of thresholds starting from
4062 : : * current_threshold+1 and check if a threshold is crossed.
4063 : : * If none of thresholds above usage is crossed, we read
4064 : : * only one element of the array here.
4065 : : */
4066 [ # # # # ]: 0 : for (; i < t->size && unlikely(t->entries[i].threshold <= usage); i++)
4067 : 0 : eventfd_signal(t->entries[i].eventfd, 1);
4068 : :
4069 : : /* Update current_threshold */
4070 : 0 : t->current_threshold = i - 1;
4071 : : unlock:
4072 : : rcu_read_unlock();
4073 : 0 : }
4074 : :
4075 : 0 : static void mem_cgroup_threshold(struct mem_cgroup *memcg)
4076 : : {
4077 [ # # ]: 0 : while (memcg) {
4078 : 0 : __mem_cgroup_threshold(memcg, false);
4079 : : if (do_memsw_account())
4080 : : __mem_cgroup_threshold(memcg, true);
4081 : :
4082 : : memcg = parent_mem_cgroup(memcg);
4083 : : }
4084 : 0 : }
4085 : :
4086 : 0 : static int compare_thresholds(const void *a, const void *b)
4087 : : {
4088 : : const struct mem_cgroup_threshold *_a = a;
4089 : : const struct mem_cgroup_threshold *_b = b;
4090 : :
4091 [ # # ]: 0 : if (_a->threshold > _b->threshold)
4092 : : return 1;
4093 : :
4094 [ # # ]: 0 : if (_a->threshold < _b->threshold)
4095 : : return -1;
4096 : :
4097 : 0 : return 0;
4098 : : }
4099 : :
4100 : 0 : static int mem_cgroup_oom_notify_cb(struct mem_cgroup *memcg)
4101 : : {
4102 : : struct mem_cgroup_eventfd_list *ev;
4103 : :
4104 : : spin_lock(&memcg_oom_lock);
4105 : :
4106 [ # # ]: 0 : list_for_each_entry(ev, &memcg->oom_notify, list)
4107 : 0 : eventfd_signal(ev->eventfd, 1);
4108 : :
4109 : : spin_unlock(&memcg_oom_lock);
4110 : 0 : return 0;
4111 : : }
4112 : :
4113 : 0 : static void mem_cgroup_oom_notify(struct mem_cgroup *memcg)
4114 : : {
4115 : : struct mem_cgroup *iter;
4116 : :
4117 [ # # ]: 0 : for_each_mem_cgroup_tree(iter, memcg)
4118 : 0 : mem_cgroup_oom_notify_cb(iter);
4119 : 0 : }
4120 : :
4121 : 0 : static int __mem_cgroup_usage_register_event(struct mem_cgroup *memcg,
4122 : : struct eventfd_ctx *eventfd, const char *args, enum res_type type)
4123 : : {
4124 : : struct mem_cgroup_thresholds *thresholds;
4125 : : struct mem_cgroup_threshold_ary *new;
4126 : : unsigned long threshold;
4127 : : unsigned long usage;
4128 : : int i, size, ret;
4129 : :
4130 : 0 : ret = page_counter_memparse(args, "-1", &threshold);
4131 [ # # ]: 0 : if (ret)
4132 : : return ret;
4133 : :
4134 : 0 : mutex_lock(&memcg->thresholds_lock);
4135 : :
4136 [ # # ]: 0 : if (type == _MEM) {
4137 : 0 : thresholds = &memcg->thresholds;
4138 : 0 : usage = mem_cgroup_usage(memcg, false);
4139 [ # # ]: 0 : } else if (type == _MEMSWAP) {
4140 : 0 : thresholds = &memcg->memsw_thresholds;
4141 : 0 : usage = mem_cgroup_usage(memcg, true);
4142 : : } else
4143 : 0 : BUG();
4144 : :
4145 : : /* Check if a threshold crossed before adding a new one */
4146 [ # # ]: 0 : if (thresholds->primary)
4147 : 0 : __mem_cgroup_threshold(memcg, type == _MEMSWAP);
4148 : :
4149 [ # # ]: 0 : size = thresholds->primary ? thresholds->primary->size + 1 : 1;
4150 : :
4151 : : /* Allocate memory for new array of thresholds */
4152 : 0 : new = kmalloc(struct_size(new, entries, size), GFP_KERNEL);
4153 [ # # ]: 0 : if (!new) {
4154 : : ret = -ENOMEM;
4155 : : goto unlock;
4156 : : }
4157 : 0 : new->size = size;
4158 : :
4159 : : /* Copy thresholds (if any) to new array */
4160 [ # # ]: 0 : if (thresholds->primary) {
4161 : 0 : memcpy(new->entries, thresholds->primary->entries, (size - 1) *
4162 : : sizeof(struct mem_cgroup_threshold));
4163 : : }
4164 : :
4165 : : /* Add new threshold */
4166 : 0 : new->entries[size - 1].eventfd = eventfd;
4167 : 0 : new->entries[size - 1].threshold = threshold;
4168 : :
4169 : : /* Sort thresholds. Registering of new threshold isn't time-critical */
4170 : 0 : sort(new->entries, size, sizeof(struct mem_cgroup_threshold),
4171 : : compare_thresholds, NULL);
4172 : :
4173 : : /* Find current threshold */
4174 : 0 : new->current_threshold = -1;
4175 [ # # ]: 0 : for (i = 0; i < size; i++) {
4176 [ # # ]: 0 : if (new->entries[i].threshold <= usage) {
4177 : : /*
4178 : : * new->current_threshold will not be used until
4179 : : * rcu_assign_pointer(), so it's safe to increment
4180 : : * it here.
4181 : : */
4182 : 0 : ++new->current_threshold;
4183 : : } else
4184 : : break;
4185 : : }
4186 : :
4187 : : /* Free old spare buffer and save old primary buffer as spare */
4188 : 0 : kfree(thresholds->spare);
4189 : 0 : thresholds->spare = thresholds->primary;
4190 : :
4191 : 0 : rcu_assign_pointer(thresholds->primary, new);
4192 : :
4193 : : /* To be sure that nobody uses thresholds */
4194 : 0 : synchronize_rcu();
4195 : :
4196 : : unlock:
4197 : 0 : mutex_unlock(&memcg->thresholds_lock);
4198 : :
4199 : 0 : return ret;
4200 : : }
4201 : :
4202 : 0 : static int mem_cgroup_usage_register_event(struct mem_cgroup *memcg,
4203 : : struct eventfd_ctx *eventfd, const char *args)
4204 : : {
4205 : 0 : return __mem_cgroup_usage_register_event(memcg, eventfd, args, _MEM);
4206 : : }
4207 : :
4208 : 0 : static int memsw_cgroup_usage_register_event(struct mem_cgroup *memcg,
4209 : : struct eventfd_ctx *eventfd, const char *args)
4210 : : {
4211 : 0 : return __mem_cgroup_usage_register_event(memcg, eventfd, args, _MEMSWAP);
4212 : : }
4213 : :
4214 : 0 : static void __mem_cgroup_usage_unregister_event(struct mem_cgroup *memcg,
4215 : : struct eventfd_ctx *eventfd, enum res_type type)
4216 : : {
4217 : : struct mem_cgroup_thresholds *thresholds;
4218 : : struct mem_cgroup_threshold_ary *new;
4219 : : unsigned long usage;
4220 : : int i, j, size, entries;
4221 : :
4222 : 0 : mutex_lock(&memcg->thresholds_lock);
4223 : :
4224 [ # # ]: 0 : if (type == _MEM) {
4225 : 0 : thresholds = &memcg->thresholds;
4226 : 0 : usage = mem_cgroup_usage(memcg, false);
4227 [ # # ]: 0 : } else if (type == _MEMSWAP) {
4228 : 0 : thresholds = &memcg->memsw_thresholds;
4229 : 0 : usage = mem_cgroup_usage(memcg, true);
4230 : : } else
4231 : 0 : BUG();
4232 : :
4233 [ # # ]: 0 : if (!thresholds->primary)
4234 : : goto unlock;
4235 : :
4236 : : /* Check if a threshold crossed before removing */
4237 : 0 : __mem_cgroup_threshold(memcg, type == _MEMSWAP);
4238 : :
4239 : : /* Calculate new number of threshold */
4240 : : size = entries = 0;
4241 [ # # ]: 0 : for (i = 0; i < thresholds->primary->size; i++) {
4242 [ # # ]: 0 : if (thresholds->primary->entries[i].eventfd != eventfd)
4243 : 0 : size++;
4244 : : else
4245 : 0 : entries++;
4246 : : }
4247 : :
4248 : 0 : new = thresholds->spare;
4249 : :
4250 : : /* If no items related to eventfd have been cleared, nothing to do */
4251 [ # # ]: 0 : if (!entries)
4252 : : goto unlock;
4253 : :
4254 : : /* Set thresholds array to NULL if we don't have thresholds */
4255 [ # # ]: 0 : if (!size) {
4256 : 0 : kfree(new);
4257 : : new = NULL;
4258 : 0 : goto swap_buffers;
4259 : : }
4260 : :
4261 : 0 : new->size = size;
4262 : :
4263 : : /* Copy thresholds and find current threshold */
4264 : 0 : new->current_threshold = -1;
4265 [ # # ]: 0 : for (i = 0, j = 0; i < thresholds->primary->size; i++) {
4266 [ # # ]: 0 : if (thresholds->primary->entries[i].eventfd == eventfd)
4267 : 0 : continue;
4268 : :
4269 : 0 : new->entries[j] = thresholds->primary->entries[i];
4270 [ # # ]: 0 : if (new->entries[j].threshold <= usage) {
4271 : : /*
4272 : : * new->current_threshold will not be used
4273 : : * until rcu_assign_pointer(), so it's safe to increment
4274 : : * it here.
4275 : : */
4276 : 0 : ++new->current_threshold;
4277 : : }
4278 : 0 : j++;
4279 : : }
4280 : :
4281 : : swap_buffers:
4282 : : /* Swap primary and spare array */
4283 : 0 : thresholds->spare = thresholds->primary;
4284 : :
4285 : 0 : rcu_assign_pointer(thresholds->primary, new);
4286 : :
4287 : : /* To be sure that nobody uses thresholds */
4288 : 0 : synchronize_rcu();
4289 : :
4290 : : /* If all events are unregistered, free the spare array */
4291 [ # # ]: 0 : if (!new) {
4292 : 0 : kfree(thresholds->spare);
4293 : 0 : thresholds->spare = NULL;
4294 : : }
4295 : : unlock:
4296 : 0 : mutex_unlock(&memcg->thresholds_lock);
4297 : 0 : }
4298 : :
4299 : 0 : static void mem_cgroup_usage_unregister_event(struct mem_cgroup *memcg,
4300 : : struct eventfd_ctx *eventfd)
4301 : : {
4302 : 0 : return __mem_cgroup_usage_unregister_event(memcg, eventfd, _MEM);
4303 : : }
4304 : :
4305 : 0 : static void memsw_cgroup_usage_unregister_event(struct mem_cgroup *memcg,
4306 : : struct eventfd_ctx *eventfd)
4307 : : {
4308 : 0 : return __mem_cgroup_usage_unregister_event(memcg, eventfd, _MEMSWAP);
4309 : : }
4310 : :
4311 : 0 : static int mem_cgroup_oom_register_event(struct mem_cgroup *memcg,
4312 : : struct eventfd_ctx *eventfd, const char *args)
4313 : : {
4314 : : struct mem_cgroup_eventfd_list *event;
4315 : :
4316 : : event = kmalloc(sizeof(*event), GFP_KERNEL);
4317 [ # # ]: 0 : if (!event)
4318 : : return -ENOMEM;
4319 : :
4320 : : spin_lock(&memcg_oom_lock);
4321 : :
4322 : 0 : event->eventfd = eventfd;
4323 : 0 : list_add(&event->list, &memcg->oom_notify);
4324 : :
4325 : : /* already in OOM ? */
4326 [ # # ]: 0 : if (memcg->under_oom)
4327 : 0 : eventfd_signal(eventfd, 1);
4328 : : spin_unlock(&memcg_oom_lock);
4329 : :
4330 : 0 : return 0;
4331 : : }
4332 : :
4333 : 0 : static void mem_cgroup_oom_unregister_event(struct mem_cgroup *memcg,
4334 : : struct eventfd_ctx *eventfd)
4335 : : {
4336 : : struct mem_cgroup_eventfd_list *ev, *tmp;
4337 : :
4338 : : spin_lock(&memcg_oom_lock);
4339 : :
4340 [ # # ]: 0 : list_for_each_entry_safe(ev, tmp, &memcg->oom_notify, list) {
4341 [ # # ]: 0 : if (ev->eventfd == eventfd) {
4342 : : list_del(&ev->list);
4343 : 0 : kfree(ev);
4344 : : }
4345 : : }
4346 : :
4347 : : spin_unlock(&memcg_oom_lock);
4348 : 0 : }
4349 : :
4350 : 0 : static int mem_cgroup_oom_control_read(struct seq_file *sf, void *v)
4351 : : {
4352 : : struct mem_cgroup *memcg = mem_cgroup_from_seq(sf);
4353 : :
4354 : 0 : seq_printf(sf, "oom_kill_disable %d\n", memcg->oom_kill_disable);
4355 : 0 : seq_printf(sf, "under_oom %d\n", (bool)memcg->under_oom);
4356 : 0 : seq_printf(sf, "oom_kill %lu\n",
4357 : : atomic_long_read(&memcg->memory_events[MEMCG_OOM_KILL]));
4358 : 0 : return 0;
4359 : : }
4360 : :
4361 : 0 : static int mem_cgroup_oom_control_write(struct cgroup_subsys_state *css,
4362 : : struct cftype *cft, u64 val)
4363 : : {
4364 : : struct mem_cgroup *memcg = mem_cgroup_from_css(css);
4365 : :
4366 : : /* cannot set to root cgroup and only 0 and 1 are allowed */
4367 [ # # # # ]: 0 : if (!css->parent || !((val == 0) || (val == 1)))
4368 : : return -EINVAL;
4369 : :
4370 : 0 : memcg->oom_kill_disable = val;
4371 [ # # ]: 0 : if (!val)
4372 : 0 : memcg_oom_recover(memcg);
4373 : :
4374 : : return 0;
4375 : : }
4376 : :
4377 : : #ifdef CONFIG_CGROUP_WRITEBACK
4378 : :
4379 : : #include <trace/events/writeback.h>
4380 : :
4381 : : static int memcg_wb_domain_init(struct mem_cgroup *memcg, gfp_t gfp)
4382 : : {
4383 : 207 : return wb_domain_init(&memcg->cgwb_domain, gfp);
4384 : : }
4385 : :
4386 : : static void memcg_wb_domain_exit(struct mem_cgroup *memcg)
4387 : : {
4388 : 0 : wb_domain_exit(&memcg->cgwb_domain);
4389 : : }
4390 : :
4391 : : static void memcg_wb_domain_size_changed(struct mem_cgroup *memcg)
4392 : : {
4393 : 2070 : wb_domain_size_changed(&memcg->cgwb_domain);
4394 : : }
4395 : :
4396 : 109798 : struct wb_domain *mem_cgroup_wb_domain(struct bdi_writeback *wb)
4397 : : {
4398 : 109798 : struct mem_cgroup *memcg = mem_cgroup_from_css(wb->memcg_css);
4399 : :
4400 [ - + ]: 109798 : if (!memcg->css.parent)
4401 : : return NULL;
4402 : :
4403 : 0 : return &memcg->cgwb_domain;
4404 : : }
4405 : :
4406 : : /*
4407 : : * idx can be of type enum memcg_stat_item or node_stat_item.
4408 : : * Keep in sync with memcg_exact_page().
4409 : : */
4410 : 0 : static unsigned long memcg_exact_page_state(struct mem_cgroup *memcg, int idx)
4411 : : {
4412 : 0 : long x = atomic_long_read(&memcg->vmstats[idx]);
4413 : : int cpu;
4414 : :
4415 [ # # ]: 0 : for_each_online_cpu(cpu)
4416 : 0 : x += per_cpu_ptr(memcg->vmstats_percpu, cpu)->stat[idx];
4417 [ # # ]: 0 : if (x < 0)
4418 : : x = 0;
4419 : 0 : return x;
4420 : : }
4421 : :
4422 : : /**
4423 : : * mem_cgroup_wb_stats - retrieve writeback related stats from its memcg
4424 : : * @wb: bdi_writeback in question
4425 : : * @pfilepages: out parameter for number of file pages
4426 : : * @pheadroom: out parameter for number of allocatable pages according to memcg
4427 : : * @pdirty: out parameter for number of dirty pages
4428 : : * @pwriteback: out parameter for number of pages under writeback
4429 : : *
4430 : : * Determine the numbers of file, headroom, dirty, and writeback pages in
4431 : : * @wb's memcg. File, dirty and writeback are self-explanatory. Headroom
4432 : : * is a bit more involved.
4433 : : *
4434 : : * A memcg's headroom is "min(max, high) - used". In the hierarchy, the
4435 : : * headroom is calculated as the lowest headroom of itself and the
4436 : : * ancestors. Note that this doesn't consider the actual amount of
4437 : : * available memory in the system. The caller should further cap
4438 : : * *@pheadroom accordingly.
4439 : : */
4440 : 0 : void mem_cgroup_wb_stats(struct bdi_writeback *wb, unsigned long *pfilepages,
4441 : : unsigned long *pheadroom, unsigned long *pdirty,
4442 : : unsigned long *pwriteback)
4443 : : {
4444 : 0 : struct mem_cgroup *memcg = mem_cgroup_from_css(wb->memcg_css);
4445 : : struct mem_cgroup *parent;
4446 : :
4447 : 0 : *pdirty = memcg_exact_page_state(memcg, NR_FILE_DIRTY);
4448 : :
4449 : : /* this should eventually include NR_UNSTABLE_NFS */
4450 : 0 : *pwriteback = memcg_exact_page_state(memcg, NR_WRITEBACK);
4451 : 0 : *pfilepages = memcg_exact_page_state(memcg, NR_INACTIVE_FILE) +
4452 : 0 : memcg_exact_page_state(memcg, NR_ACTIVE_FILE);
4453 : 0 : *pheadroom = PAGE_COUNTER_MAX;
4454 : :
4455 [ # # ]: 0 : while ((parent = parent_mem_cgroup(memcg))) {
4456 : 0 : unsigned long ceiling = min(memcg->memory.max, memcg->high);
4457 : : unsigned long used = page_counter_read(&memcg->memory);
4458 : :
4459 : 0 : *pheadroom = min(*pheadroom, ceiling - min(ceiling, used));
4460 : : memcg = parent;
4461 : : }
4462 : 0 : }
4463 : :
4464 : : /*
4465 : : * Foreign dirty flushing
4466 : : *
4467 : : * There's an inherent mismatch between memcg and writeback. The former
4468 : : * trackes ownership per-page while the latter per-inode. This was a
4469 : : * deliberate design decision because honoring per-page ownership in the
4470 : : * writeback path is complicated, may lead to higher CPU and IO overheads
4471 : : * and deemed unnecessary given that write-sharing an inode across
4472 : : * different cgroups isn't a common use-case.
4473 : : *
4474 : : * Combined with inode majority-writer ownership switching, this works well
4475 : : * enough in most cases but there are some pathological cases. For
4476 : : * example, let's say there are two cgroups A and B which keep writing to
4477 : : * different but confined parts of the same inode. B owns the inode and
4478 : : * A's memory is limited far below B's. A's dirty ratio can rise enough to
4479 : : * trigger balance_dirty_pages() sleeps but B's can be low enough to avoid
4480 : : * triggering background writeback. A will be slowed down without a way to
4481 : : * make writeback of the dirty pages happen.
4482 : : *
4483 : : * Conditions like the above can lead to a cgroup getting repatedly and
4484 : : * severely throttled after making some progress after each
4485 : : * dirty_expire_interval while the underyling IO device is almost
4486 : : * completely idle.
4487 : : *
4488 : : * Solving this problem completely requires matching the ownership tracking
4489 : : * granularities between memcg and writeback in either direction. However,
4490 : : * the more egregious behaviors can be avoided by simply remembering the
4491 : : * most recent foreign dirtying events and initiating remote flushes on
4492 : : * them when local writeback isn't enough to keep the memory clean enough.
4493 : : *
4494 : : * The following two functions implement such mechanism. When a foreign
4495 : : * page - a page whose memcg and writeback ownerships don't match - is
4496 : : * dirtied, mem_cgroup_track_foreign_dirty() records the inode owning
4497 : : * bdi_writeback on the page owning memcg. When balance_dirty_pages()
4498 : : * decides that the memcg needs to sleep due to high dirty ratio, it calls
4499 : : * mem_cgroup_flush_foreign() which queues writeback on the recorded
4500 : : * foreign bdi_writebacks which haven't expired. Both the numbers of
4501 : : * recorded bdi_writebacks and concurrent in-flight foreign writebacks are
4502 : : * limited to MEMCG_CGWB_FRN_CNT.
4503 : : *
4504 : : * The mechanism only remembers IDs and doesn't hold any object references.
4505 : : * As being wrong occasionally doesn't matter, updates and accesses to the
4506 : : * records are lockless and racy.
4507 : : */
4508 : 0 : void mem_cgroup_track_foreign_dirty_slowpath(struct page *page,
4509 : : struct bdi_writeback *wb)
4510 : : {
4511 : 0 : struct mem_cgroup *memcg = page->mem_cgroup;
4512 : : struct memcg_cgwb_frn *frn;
4513 : 0 : u64 now = get_jiffies_64();
4514 : : u64 oldest_at = now;
4515 : : int oldest = -1;
4516 : : int i;
4517 : :
4518 : 0 : trace_track_foreign_dirty(page, wb);
4519 : :
4520 : : /*
4521 : : * Pick the slot to use. If there is already a slot for @wb, keep
4522 : : * using it. If not replace the oldest one which isn't being
4523 : : * written out.
4524 : : */
4525 [ # # ]: 0 : for (i = 0; i < MEMCG_CGWB_FRN_CNT; i++) {
4526 : 0 : frn = &memcg->cgwb_frn[i];
4527 [ # # # # ]: 0 : if (frn->bdi_id == wb->bdi->id &&
4528 : 0 : frn->memcg_id == wb->memcg_css->id)
4529 : : break;
4530 [ # # # # ]: 0 : if (time_before64(frn->at, oldest_at) &&
4531 : 0 : atomic_read(&frn->done.cnt) == 1) {
4532 : : oldest = i;
4533 : : oldest_at = frn->at;
4534 : : }
4535 : : }
4536 : :
4537 [ # # ]: 0 : if (i < MEMCG_CGWB_FRN_CNT) {
4538 : : /*
4539 : : * Re-using an existing one. Update timestamp lazily to
4540 : : * avoid making the cacheline hot. We want them to be
4541 : : * reasonably up-to-date and significantly shorter than
4542 : : * dirty_expire_interval as that's what expires the record.
4543 : : * Use the shorter of 1s and dirty_expire_interval / 8.
4544 : : */
4545 : : unsigned long update_intv =
4546 : 0 : min_t(unsigned long, HZ,
4547 : : msecs_to_jiffies(dirty_expire_interval * 10) / 8);
4548 : :
4549 [ # # ]: 0 : if (time_before64(frn->at, now - update_intv))
4550 : 0 : frn->at = now;
4551 [ # # ]: 0 : } else if (oldest >= 0) {
4552 : : /* replace the oldest free one */
4553 : : frn = &memcg->cgwb_frn[oldest];
4554 : 0 : frn->bdi_id = wb->bdi->id;
4555 : 0 : frn->memcg_id = wb->memcg_css->id;
4556 : 0 : frn->at = now;
4557 : : }
4558 : 0 : }
4559 : :
4560 : : /* issue foreign writeback flushes for recorded foreign dirtying events */
4561 : 0 : void mem_cgroup_flush_foreign(struct bdi_writeback *wb)
4562 : : {
4563 : 0 : struct mem_cgroup *memcg = mem_cgroup_from_css(wb->memcg_css);
4564 : 0 : unsigned long intv = msecs_to_jiffies(dirty_expire_interval * 10);
4565 : 0 : u64 now = jiffies_64;
4566 : : int i;
4567 : :
4568 [ # # ]: 0 : for (i = 0; i < MEMCG_CGWB_FRN_CNT; i++) {
4569 : : struct memcg_cgwb_frn *frn = &memcg->cgwb_frn[i];
4570 : :
4571 : : /*
4572 : : * If the record is older than dirty_expire_interval,
4573 : : * writeback on it has already started. No need to kick it
4574 : : * off again. Also, don't start a new one if there's
4575 : : * already one in flight.
4576 : : */
4577 [ # # # # ]: 0 : if (time_after64(frn->at, now - intv) &&
4578 : 0 : atomic_read(&frn->done.cnt) == 1) {
4579 : 0 : frn->at = 0;
4580 : 0 : trace_flush_foreign(wb, frn->bdi_id, frn->memcg_id);
4581 : 0 : cgroup_writeback_by_id(frn->bdi_id, frn->memcg_id, 0,
4582 : : WB_REASON_FOREIGN_FLUSH,
4583 : : &frn->done);
4584 : : }
4585 : : }
4586 : 0 : }
4587 : :
4588 : : #else /* CONFIG_CGROUP_WRITEBACK */
4589 : :
4590 : : static int memcg_wb_domain_init(struct mem_cgroup *memcg, gfp_t gfp)
4591 : : {
4592 : : return 0;
4593 : : }
4594 : :
4595 : : static void memcg_wb_domain_exit(struct mem_cgroup *memcg)
4596 : : {
4597 : : }
4598 : :
4599 : : static void memcg_wb_domain_size_changed(struct mem_cgroup *memcg)
4600 : : {
4601 : : }
4602 : :
4603 : : #endif /* CONFIG_CGROUP_WRITEBACK */
4604 : :
4605 : : /*
4606 : : * DO NOT USE IN NEW FILES.
4607 : : *
4608 : : * "cgroup.event_control" implementation.
4609 : : *
4610 : : * This is way over-engineered. It tries to support fully configurable
4611 : : * events for each user. Such level of flexibility is completely
4612 : : * unnecessary especially in the light of the planned unified hierarchy.
4613 : : *
4614 : : * Please deprecate this and replace with something simpler if at all
4615 : : * possible.
4616 : : */
4617 : :
4618 : : /*
4619 : : * Unregister event and free resources.
4620 : : *
4621 : : * Gets called from workqueue.
4622 : : */
4623 : 0 : static void memcg_event_remove(struct work_struct *work)
4624 : : {
4625 : : struct mem_cgroup_event *event =
4626 : 0 : container_of(work, struct mem_cgroup_event, remove);
4627 : 0 : struct mem_cgroup *memcg = event->memcg;
4628 : :
4629 : 0 : remove_wait_queue(event->wqh, &event->wait);
4630 : :
4631 : 0 : event->unregister_event(memcg, event->eventfd);
4632 : :
4633 : : /* Notify userspace the event is going away. */
4634 : 0 : eventfd_signal(event->eventfd, 1);
4635 : :
4636 : 0 : eventfd_ctx_put(event->eventfd);
4637 : 0 : kfree(event);
4638 : : css_put(&memcg->css);
4639 : 0 : }
4640 : :
4641 : : /*
4642 : : * Gets called on EPOLLHUP on eventfd when user closes it.
4643 : : *
4644 : : * Called with wqh->lock held and interrupts disabled.
4645 : : */
4646 : 0 : static int memcg_event_wake(wait_queue_entry_t *wait, unsigned mode,
4647 : : int sync, void *key)
4648 : : {
4649 : : struct mem_cgroup_event *event =
4650 : : container_of(wait, struct mem_cgroup_event, wait);
4651 : 0 : struct mem_cgroup *memcg = event->memcg;
4652 : 0 : __poll_t flags = key_to_poll(key);
4653 : :
4654 [ # # ]: 0 : if (flags & EPOLLHUP) {
4655 : : /*
4656 : : * If the event has been detached at cgroup removal, we
4657 : : * can simply return knowing the other side will cleanup
4658 : : * for us.
4659 : : *
4660 : : * We can't race against event freeing since the other
4661 : : * side will require wqh->lock via remove_wait_queue(),
4662 : : * which we hold.
4663 : : */
4664 : : spin_lock(&memcg->event_list_lock);
4665 [ # # ]: 0 : if (!list_empty(&event->list)) {
4666 : : list_del_init(&event->list);
4667 : : /*
4668 : : * We are in atomic context, but cgroup_event_remove()
4669 : : * may sleep, so we have to call it in workqueue.
4670 : : */
4671 : 0 : schedule_work(&event->remove);
4672 : : }
4673 : : spin_unlock(&memcg->event_list_lock);
4674 : : }
4675 : :
4676 : 0 : return 0;
4677 : : }
4678 : :
4679 : 0 : static void memcg_event_ptable_queue_proc(struct file *file,
4680 : : wait_queue_head_t *wqh, poll_table *pt)
4681 : : {
4682 : : struct mem_cgroup_event *event =
4683 : : container_of(pt, struct mem_cgroup_event, pt);
4684 : :
4685 : 0 : event->wqh = wqh;
4686 : 0 : add_wait_queue(wqh, &event->wait);
4687 : 0 : }
4688 : :
4689 : : /*
4690 : : * DO NOT USE IN NEW FILES.
4691 : : *
4692 : : * Parse input and register new cgroup event handler.
4693 : : *
4694 : : * Input must be in format '<event_fd> <control_fd> <args>'.
4695 : : * Interpretation of args is defined by control file implementation.
4696 : : */
4697 : 0 : static ssize_t memcg_write_event_control(struct kernfs_open_file *of,
4698 : : char *buf, size_t nbytes, loff_t off)
4699 : : {
4700 : 0 : struct cgroup_subsys_state *css = of_css(of);
4701 : : struct mem_cgroup *memcg = mem_cgroup_from_css(css);
4702 : : struct mem_cgroup_event *event;
4703 : : struct cgroup_subsys_state *cfile_css;
4704 : : unsigned int efd, cfd;
4705 : : struct fd efile;
4706 : : struct fd cfile;
4707 : : const char *name;
4708 : : char *endp;
4709 : : int ret;
4710 : :
4711 : : buf = strstrip(buf);
4712 : :
4713 : 0 : efd = simple_strtoul(buf, &endp, 10);
4714 [ # # ]: 0 : if (*endp != ' ')
4715 : : return -EINVAL;
4716 : 0 : buf = endp + 1;
4717 : :
4718 : 0 : cfd = simple_strtoul(buf, &endp, 10);
4719 [ # # ]: 0 : if ((*endp != ' ') && (*endp != '\0'))
4720 : : return -EINVAL;
4721 : 0 : buf = endp + 1;
4722 : :
4723 : 0 : event = kzalloc(sizeof(*event), GFP_KERNEL);
4724 [ # # ]: 0 : if (!event)
4725 : : return -ENOMEM;
4726 : :
4727 : 0 : event->memcg = memcg;
4728 : 0 : INIT_LIST_HEAD(&event->list);
4729 : : init_poll_funcptr(&event->pt, memcg_event_ptable_queue_proc);
4730 : : init_waitqueue_func_entry(&event->wait, memcg_event_wake);
4731 : 0 : INIT_WORK(&event->remove, memcg_event_remove);
4732 : :
4733 : : efile = fdget(efd);
4734 [ # # ]: 0 : if (!efile.file) {
4735 : : ret = -EBADF;
4736 : : goto out_kfree;
4737 : : }
4738 : :
4739 : 0 : event->eventfd = eventfd_ctx_fileget(efile.file);
4740 [ # # ]: 0 : if (IS_ERR(event->eventfd)) {
4741 : : ret = PTR_ERR(event->eventfd);
4742 : 0 : goto out_put_efile;
4743 : : }
4744 : :
4745 : : cfile = fdget(cfd);
4746 [ # # ]: 0 : if (!cfile.file) {
4747 : : ret = -EBADF;
4748 : : goto out_put_eventfd;
4749 : : }
4750 : :
4751 : : /* the process need read permission on control file */
4752 : : /* AV: shouldn't we check that it's been opened for read instead? */
4753 : 0 : ret = inode_permission(file_inode(cfile.file), MAY_READ);
4754 [ # # ]: 0 : if (ret < 0)
4755 : : goto out_put_cfile;
4756 : :
4757 : : /*
4758 : : * Determine the event callbacks and set them in @event. This used
4759 : : * to be done via struct cftype but cgroup core no longer knows
4760 : : * about these events. The following is crude but the whole thing
4761 : : * is for compatibility anyway.
4762 : : *
4763 : : * DO NOT ADD NEW FILES.
4764 : : */
4765 : 0 : name = cfile.file->f_path.dentry->d_name.name;
4766 : :
4767 [ # # ]: 0 : if (!strcmp(name, "memory.usage_in_bytes")) {
4768 : 0 : event->register_event = mem_cgroup_usage_register_event;
4769 : 0 : event->unregister_event = mem_cgroup_usage_unregister_event;
4770 [ # # ]: 0 : } else if (!strcmp(name, "memory.oom_control")) {
4771 : 0 : event->register_event = mem_cgroup_oom_register_event;
4772 : 0 : event->unregister_event = mem_cgroup_oom_unregister_event;
4773 [ # # ]: 0 : } else if (!strcmp(name, "memory.pressure_level")) {
4774 : 0 : event->register_event = vmpressure_register_event;
4775 : 0 : event->unregister_event = vmpressure_unregister_event;
4776 [ # # ]: 0 : } else if (!strcmp(name, "memory.memsw.usage_in_bytes")) {
4777 : 0 : event->register_event = memsw_cgroup_usage_register_event;
4778 : 0 : event->unregister_event = memsw_cgroup_usage_unregister_event;
4779 : : } else {
4780 : : ret = -EINVAL;
4781 : : goto out_put_cfile;
4782 : : }
4783 : :
4784 : : /*
4785 : : * Verify @cfile should belong to @css. Also, remaining events are
4786 : : * automatically removed on cgroup destruction but the removal is
4787 : : * asynchronous, so take an extra ref on @css.
4788 : : */
4789 : 0 : cfile_css = css_tryget_online_from_dir(cfile.file->f_path.dentry->d_parent,
4790 : : &memory_cgrp_subsys);
4791 : : ret = -EINVAL;
4792 [ # # ]: 0 : if (IS_ERR(cfile_css))
4793 : : goto out_put_cfile;
4794 [ # # ]: 0 : if (cfile_css != css) {
4795 : : css_put(cfile_css);
4796 : : goto out_put_cfile;
4797 : : }
4798 : :
4799 : 0 : ret = event->register_event(memcg, event->eventfd, buf);
4800 [ # # ]: 0 : if (ret)
4801 : : goto out_put_css;
4802 : :
4803 : 0 : vfs_poll(efile.file, &event->pt);
4804 : :
4805 : : spin_lock(&memcg->event_list_lock);
4806 : 0 : list_add(&event->list, &memcg->event_list);
4807 : : spin_unlock(&memcg->event_list_lock);
4808 : :
4809 : : fdput(cfile);
4810 : : fdput(efile);
4811 : :
4812 : 0 : return nbytes;
4813 : :
4814 : : out_put_css:
4815 : : css_put(css);
4816 : : out_put_cfile:
4817 : : fdput(cfile);
4818 : : out_put_eventfd:
4819 : 0 : eventfd_ctx_put(event->eventfd);
4820 : : out_put_efile:
4821 : : fdput(efile);
4822 : : out_kfree:
4823 : 0 : kfree(event);
4824 : :
4825 : 0 : return ret;
4826 : : }
4827 : :
4828 : : static struct cftype mem_cgroup_legacy_files[] = {
4829 : : {
4830 : : .name = "usage_in_bytes",
4831 : : .private = MEMFILE_PRIVATE(_MEM, RES_USAGE),
4832 : : .read_u64 = mem_cgroup_read_u64,
4833 : : },
4834 : : {
4835 : : .name = "max_usage_in_bytes",
4836 : : .private = MEMFILE_PRIVATE(_MEM, RES_MAX_USAGE),
4837 : : .write = mem_cgroup_reset,
4838 : : .read_u64 = mem_cgroup_read_u64,
4839 : : },
4840 : : {
4841 : : .name = "limit_in_bytes",
4842 : : .private = MEMFILE_PRIVATE(_MEM, RES_LIMIT),
4843 : : .write = mem_cgroup_write,
4844 : : .read_u64 = mem_cgroup_read_u64,
4845 : : },
4846 : : {
4847 : : .name = "soft_limit_in_bytes",
4848 : : .private = MEMFILE_PRIVATE(_MEM, RES_SOFT_LIMIT),
4849 : : .write = mem_cgroup_write,
4850 : : .read_u64 = mem_cgroup_read_u64,
4851 : : },
4852 : : {
4853 : : .name = "failcnt",
4854 : : .private = MEMFILE_PRIVATE(_MEM, RES_FAILCNT),
4855 : : .write = mem_cgroup_reset,
4856 : : .read_u64 = mem_cgroup_read_u64,
4857 : : },
4858 : : {
4859 : : .name = "stat",
4860 : : .seq_show = memcg_stat_show,
4861 : : },
4862 : : {
4863 : : .name = "force_empty",
4864 : : .write = mem_cgroup_force_empty_write,
4865 : : },
4866 : : {
4867 : : .name = "use_hierarchy",
4868 : : .write_u64 = mem_cgroup_hierarchy_write,
4869 : : .read_u64 = mem_cgroup_hierarchy_read,
4870 : : },
4871 : : {
4872 : : .name = "cgroup.event_control", /* XXX: for compat */
4873 : : .write = memcg_write_event_control,
4874 : : .flags = CFTYPE_NO_PREFIX | CFTYPE_WORLD_WRITABLE,
4875 : : },
4876 : : {
4877 : : .name = "swappiness",
4878 : : .read_u64 = mem_cgroup_swappiness_read,
4879 : : .write_u64 = mem_cgroup_swappiness_write,
4880 : : },
4881 : : {
4882 : : .name = "move_charge_at_immigrate",
4883 : : .read_u64 = mem_cgroup_move_charge_read,
4884 : : .write_u64 = mem_cgroup_move_charge_write,
4885 : : },
4886 : : {
4887 : : .name = "oom_control",
4888 : : .seq_show = mem_cgroup_oom_control_read,
4889 : : .write_u64 = mem_cgroup_oom_control_write,
4890 : : .private = MEMFILE_PRIVATE(_OOM_TYPE, OOM_CONTROL),
4891 : : },
4892 : : {
4893 : : .name = "pressure_level",
4894 : : },
4895 : : #ifdef CONFIG_NUMA
4896 : : {
4897 : : .name = "numa_stat",
4898 : : .seq_show = memcg_numa_stat_show,
4899 : : },
4900 : : #endif
4901 : : {
4902 : : .name = "kmem.limit_in_bytes",
4903 : : .private = MEMFILE_PRIVATE(_KMEM, RES_LIMIT),
4904 : : .write = mem_cgroup_write,
4905 : : .read_u64 = mem_cgroup_read_u64,
4906 : : },
4907 : : {
4908 : : .name = "kmem.usage_in_bytes",
4909 : : .private = MEMFILE_PRIVATE(_KMEM, RES_USAGE),
4910 : : .read_u64 = mem_cgroup_read_u64,
4911 : : },
4912 : : {
4913 : : .name = "kmem.failcnt",
4914 : : .private = MEMFILE_PRIVATE(_KMEM, RES_FAILCNT),
4915 : : .write = mem_cgroup_reset,
4916 : : .read_u64 = mem_cgroup_read_u64,
4917 : : },
4918 : : {
4919 : : .name = "kmem.max_usage_in_bytes",
4920 : : .private = MEMFILE_PRIVATE(_KMEM, RES_MAX_USAGE),
4921 : : .write = mem_cgroup_reset,
4922 : : .read_u64 = mem_cgroup_read_u64,
4923 : : },
4924 : : #if defined(CONFIG_SLAB) || defined(CONFIG_SLUB_DEBUG)
4925 : : {
4926 : : .name = "kmem.slabinfo",
4927 : : .seq_start = memcg_slab_start,
4928 : : .seq_next = memcg_slab_next,
4929 : : .seq_stop = memcg_slab_stop,
4930 : : .seq_show = memcg_slab_show,
4931 : : },
4932 : : #endif
4933 : : {
4934 : : .name = "kmem.tcp.limit_in_bytes",
4935 : : .private = MEMFILE_PRIVATE(_TCP, RES_LIMIT),
4936 : : .write = mem_cgroup_write,
4937 : : .read_u64 = mem_cgroup_read_u64,
4938 : : },
4939 : : {
4940 : : .name = "kmem.tcp.usage_in_bytes",
4941 : : .private = MEMFILE_PRIVATE(_TCP, RES_USAGE),
4942 : : .read_u64 = mem_cgroup_read_u64,
4943 : : },
4944 : : {
4945 : : .name = "kmem.tcp.failcnt",
4946 : : .private = MEMFILE_PRIVATE(_TCP, RES_FAILCNT),
4947 : : .write = mem_cgroup_reset,
4948 : : .read_u64 = mem_cgroup_read_u64,
4949 : : },
4950 : : {
4951 : : .name = "kmem.tcp.max_usage_in_bytes",
4952 : : .private = MEMFILE_PRIVATE(_TCP, RES_MAX_USAGE),
4953 : : .write = mem_cgroup_reset,
4954 : : .read_u64 = mem_cgroup_read_u64,
4955 : : },
4956 : : { }, /* terminate */
4957 : : };
4958 : :
4959 : : /*
4960 : : * Private memory cgroup IDR
4961 : : *
4962 : : * Swap-out records and page cache shadow entries need to store memcg
4963 : : * references in constrained space, so we maintain an ID space that is
4964 : : * limited to 16 bit (MEM_CGROUP_ID_MAX), limiting the total number of
4965 : : * memory-controlled cgroups to 64k.
4966 : : *
4967 : : * However, there usually are many references to the oflline CSS after
4968 : : * the cgroup has been destroyed, such as page cache or reclaimable
4969 : : * slab objects, that don't need to hang on to the ID. We want to keep
4970 : : * those dead CSS from occupying IDs, or we might quickly exhaust the
4971 : : * relatively small ID space and prevent the creation of new cgroups
4972 : : * even when there are much fewer than 64k cgroups - possibly none.
4973 : : *
4974 : : * Maintain a private 16-bit ID space for memcg, and allow the ID to
4975 : : * be freed and recycled when it's no longer needed, which is usually
4976 : : * when the CSS is offlined.
4977 : : *
4978 : : * The only exception to that are records of swapped out tmpfs/shmem
4979 : : * pages that need to be attributed to live ancestors on swapin. But
4980 : : * those references are manageable from userspace.
4981 : : */
4982 : :
4983 : : static DEFINE_IDR(mem_cgroup_idr);
4984 : :
4985 : : static void mem_cgroup_id_remove(struct mem_cgroup *memcg)
4986 : : {
4987 [ # # # # : 0 : if (memcg->id.id > 0) {
# # # # ]
4988 : 0 : idr_remove(&mem_cgroup_idr, memcg->id.id);
4989 : 0 : memcg->id.id = 0;
4990 : : }
4991 : : }
4992 : :
4993 : : static void mem_cgroup_id_get_many(struct mem_cgroup *memcg, unsigned int n)
4994 : : {
4995 : : refcount_add(n, &memcg->id.ref);
4996 : : }
4997 : :
4998 : 0 : static void mem_cgroup_id_put_many(struct mem_cgroup *memcg, unsigned int n)
4999 : : {
5000 [ # # ]: 0 : if (refcount_sub_and_test(n, &memcg->id.ref)) {
5001 : : mem_cgroup_id_remove(memcg);
5002 : :
5003 : : /* Memcg ID pins CSS */
5004 : : css_put(&memcg->css);
5005 : : }
5006 : 0 : }
5007 : :
5008 : : static inline void mem_cgroup_id_put(struct mem_cgroup *memcg)
5009 : : {
5010 : 0 : mem_cgroup_id_put_many(memcg, 1);
5011 : : }
5012 : :
5013 : : /**
5014 : : * mem_cgroup_from_id - look up a memcg from a memcg id
5015 : : * @id: the memcg id to look up
5016 : : *
5017 : : * Caller must hold rcu_read_lock().
5018 : : */
5019 : 0 : struct mem_cgroup *mem_cgroup_from_id(unsigned short id)
5020 : : {
5021 : : WARN_ON_ONCE(!rcu_read_lock_held());
5022 : 0 : return idr_find(&mem_cgroup_idr, id);
5023 : : }
5024 : :
5025 : 207 : static int alloc_mem_cgroup_per_node_info(struct mem_cgroup *memcg, int node)
5026 : : {
5027 : : struct mem_cgroup_per_node *pn;
5028 : : int tmp = node;
5029 : : /*
5030 : : * This routine is called against possible nodes.
5031 : : * But it's BUG to call kmalloc() against offline node.
5032 : : *
5033 : : * TODO: this routine can waste much memory for nodes which will
5034 : : * never be onlined. It's better to use memory hotplug callback
5035 : : * function.
5036 : : */
5037 [ - + ]: 207 : if (!node_state(node, N_NORMAL_MEMORY))
5038 : : tmp = -1;
5039 : 207 : pn = kzalloc_node(sizeof(*pn), GFP_KERNEL, tmp);
5040 [ + - ]: 207 : if (!pn)
5041 : : return 1;
5042 : :
5043 : 207 : pn->lruvec_stat_local = alloc_percpu(struct lruvec_stat);
5044 [ - + ]: 207 : if (!pn->lruvec_stat_local) {
5045 : 0 : kfree(pn);
5046 : 0 : return 1;
5047 : : }
5048 : :
5049 : 207 : pn->lruvec_stat_cpu = alloc_percpu(struct lruvec_stat);
5050 [ - + ]: 207 : if (!pn->lruvec_stat_cpu) {
5051 : 0 : free_percpu(pn->lruvec_stat_local);
5052 : 0 : kfree(pn);
5053 : 0 : return 1;
5054 : : }
5055 : :
5056 : 207 : lruvec_init(&pn->lruvec);
5057 : 207 : pn->usage_in_excess = 0;
5058 : 207 : pn->on_tree = false;
5059 : 207 : pn->memcg = memcg;
5060 : :
5061 : 207 : memcg->nodeinfo[node] = pn;
5062 : 207 : return 0;
5063 : : }
5064 : :
5065 : 0 : static void free_mem_cgroup_per_node_info(struct mem_cgroup *memcg, int node)
5066 : : {
5067 : 0 : struct mem_cgroup_per_node *pn = memcg->nodeinfo[node];
5068 : :
5069 [ # # ]: 0 : if (!pn)
5070 : 0 : return;
5071 : :
5072 : 0 : free_percpu(pn->lruvec_stat_cpu);
5073 : 0 : free_percpu(pn->lruvec_stat_local);
5074 : 0 : kfree(pn);
5075 : : }
5076 : :
5077 : 0 : static void __mem_cgroup_free(struct mem_cgroup *memcg)
5078 : : {
5079 : : int node;
5080 : :
5081 [ # # ]: 0 : for_each_node(node)
5082 : 0 : free_mem_cgroup_per_node_info(memcg, node);
5083 : 0 : free_percpu(memcg->vmstats_percpu);
5084 : 0 : free_percpu(memcg->vmstats_local);
5085 : 0 : kfree(memcg);
5086 : 0 : }
5087 : :
5088 : 0 : static void mem_cgroup_free(struct mem_cgroup *memcg)
5089 : : {
5090 : : memcg_wb_domain_exit(memcg);
5091 : : /*
5092 : : * Flush percpu vmstats and vmevents to guarantee the value correctness
5093 : : * on parent's and all ancestor levels.
5094 : : */
5095 : 0 : memcg_flush_percpu_vmstats(memcg);
5096 : 0 : memcg_flush_percpu_vmevents(memcg);
5097 : 0 : __mem_cgroup_free(memcg);
5098 : 0 : }
5099 : :
5100 : 207 : static struct mem_cgroup *mem_cgroup_alloc(void)
5101 : : {
5102 : : struct mem_cgroup *memcg;
5103 : : unsigned int size;
5104 : : int node;
5105 : : int __maybe_unused i;
5106 : : long error = -ENOMEM;
5107 : :
5108 : : size = sizeof(struct mem_cgroup);
5109 : : size += nr_node_ids * sizeof(struct mem_cgroup_per_node *);
5110 : :
5111 : 207 : memcg = kzalloc(size, GFP_KERNEL);
5112 [ + - ]: 207 : if (!memcg)
5113 : : return ERR_PTR(error);
5114 : :
5115 : 207 : memcg->id.id = idr_alloc(&mem_cgroup_idr, NULL,
5116 : : 1, MEM_CGROUP_ID_MAX,
5117 : : GFP_KERNEL);
5118 [ + - ]: 207 : if (memcg->id.id < 0) {
5119 : : error = memcg->id.id;
5120 : : goto fail;
5121 : : }
5122 : :
5123 : 207 : memcg->vmstats_local = alloc_percpu(struct memcg_vmstats_percpu);
5124 [ + - ]: 207 : if (!memcg->vmstats_local)
5125 : : goto fail;
5126 : :
5127 : 207 : memcg->vmstats_percpu = alloc_percpu(struct memcg_vmstats_percpu);
5128 [ + - ]: 207 : if (!memcg->vmstats_percpu)
5129 : : goto fail;
5130 : :
5131 [ + + ]: 414 : for_each_node(node)
5132 [ + - ]: 207 : if (alloc_mem_cgroup_per_node_info(memcg, node))
5133 : : goto fail;
5134 : :
5135 [ + - ]: 207 : if (memcg_wb_domain_init(memcg, GFP_KERNEL))
5136 : : goto fail;
5137 : :
5138 : 414 : INIT_WORK(&memcg->high_work, high_work_func);
5139 : 207 : memcg->last_scanned_node = MAX_NUMNODES;
5140 : 207 : INIT_LIST_HEAD(&memcg->oom_notify);
5141 : 207 : mutex_init(&memcg->thresholds_lock);
5142 : 207 : spin_lock_init(&memcg->move_lock);
5143 : 207 : vmpressure_init(&memcg->vmpressure);
5144 : 207 : INIT_LIST_HEAD(&memcg->event_list);
5145 : 207 : spin_lock_init(&memcg->event_list_lock);
5146 : 207 : memcg->socket_pressure = jiffies;
5147 : : #ifdef CONFIG_MEMCG_KMEM
5148 : 207 : memcg->kmemcg_id = -1;
5149 : : #endif
5150 : : #ifdef CONFIG_CGROUP_WRITEBACK
5151 : 207 : INIT_LIST_HEAD(&memcg->cgwb_list);
5152 [ + + ]: 1035 : for (i = 0; i < MEMCG_CGWB_FRN_CNT; i++)
5153 : 828 : memcg->cgwb_frn[i].done =
5154 : : __WB_COMPLETION_INIT(&memcg_cgwb_frn_waitq);
5155 : : #endif
5156 : : #ifdef CONFIG_TRANSPARENT_HUGEPAGE
5157 : : spin_lock_init(&memcg->deferred_split_queue.split_queue_lock);
5158 : : INIT_LIST_HEAD(&memcg->deferred_split_queue.split_queue);
5159 : : memcg->deferred_split_queue.split_queue_len = 0;
5160 : : #endif
5161 : 207 : idr_replace(&mem_cgroup_idr, memcg, memcg->id.id);
5162 : 207 : return memcg;
5163 : : fail:
5164 : : mem_cgroup_id_remove(memcg);
5165 : 0 : __mem_cgroup_free(memcg);
5166 : 0 : return ERR_PTR(error);
5167 : : }
5168 : :
5169 : : static struct cgroup_subsys_state * __ref
5170 : 207 : mem_cgroup_css_alloc(struct cgroup_subsys_state *parent_css)
5171 : : {
5172 : : struct mem_cgroup *parent = mem_cgroup_from_css(parent_css);
5173 : : struct mem_cgroup *memcg;
5174 : : long error = -ENOMEM;
5175 : :
5176 : 207 : memcg = mem_cgroup_alloc();
5177 [ + - ]: 207 : if (IS_ERR(memcg))
5178 : : return ERR_CAST(memcg);
5179 : :
5180 : 207 : memcg->high = PAGE_COUNTER_MAX;
5181 : 207 : memcg->soft_limit = PAGE_COUNTER_MAX;
5182 [ - + ]: 207 : if (parent) {
5183 : 0 : memcg->swappiness = mem_cgroup_swappiness(parent);
5184 : 0 : memcg->oom_kill_disable = parent->oom_kill_disable;
5185 : : }
5186 [ - + # # ]: 207 : if (parent && parent->use_hierarchy) {
5187 : 0 : memcg->use_hierarchy = true;
5188 : 0 : page_counter_init(&memcg->memory, &parent->memory);
5189 : 0 : page_counter_init(&memcg->swap, &parent->swap);
5190 : 0 : page_counter_init(&memcg->memsw, &parent->memsw);
5191 : 0 : page_counter_init(&memcg->kmem, &parent->kmem);
5192 : 0 : page_counter_init(&memcg->tcpmem, &parent->tcpmem);
5193 : : } else {
5194 : : page_counter_init(&memcg->memory, NULL);
5195 : : page_counter_init(&memcg->swap, NULL);
5196 : : page_counter_init(&memcg->memsw, NULL);
5197 : : page_counter_init(&memcg->kmem, NULL);
5198 : : page_counter_init(&memcg->tcpmem, NULL);
5199 : : /*
5200 : : * Deeper hierachy with use_hierarchy == false doesn't make
5201 : : * much sense so let cgroup subsystem know about this
5202 : : * unfortunate state in our controller.
5203 : : */
5204 [ - + ]: 207 : if (parent != root_mem_cgroup)
5205 : 0 : memory_cgrp_subsys.broken_hierarchy = true;
5206 : : }
5207 : :
5208 : : /* The following stuff does not apply to the root */
5209 [ + - ]: 207 : if (!parent) {
5210 : : #ifdef CONFIG_MEMCG_KMEM
5211 : 207 : INIT_LIST_HEAD(&memcg->kmem_caches);
5212 : : #endif
5213 : 207 : root_mem_cgroup = memcg;
5214 : 207 : return &memcg->css;
5215 : : }
5216 : :
5217 : 0 : error = memcg_online_kmem(memcg);
5218 [ # # ]: 0 : if (error)
5219 : : goto fail;
5220 : :
5221 [ # # # # ]: 0 : if (cgroup_subsys_on_dfl(memory_cgrp_subsys) && !cgroup_memory_nosocket)
5222 : 0 : static_branch_inc(&memcg_sockets_enabled_key);
5223 : :
5224 : 0 : return &memcg->css;
5225 : : fail:
5226 : : mem_cgroup_id_remove(memcg);
5227 : 0 : mem_cgroup_free(memcg);
5228 : 0 : return ERR_PTR(error);
5229 : : }
5230 : :
5231 : 207 : static int mem_cgroup_css_online(struct cgroup_subsys_state *css)
5232 : : {
5233 : : struct mem_cgroup *memcg = mem_cgroup_from_css(css);
5234 : :
5235 : : /*
5236 : : * A memcg must be visible for memcg_expand_shrinker_maps()
5237 : : * by the time the maps are allocated. So, we allocate maps
5238 : : * here, when for_each_mem_cgroup() can't skip it.
5239 : : */
5240 [ - + ]: 207 : if (memcg_alloc_shrinker_maps(memcg)) {
5241 : : mem_cgroup_id_remove(memcg);
5242 : : return -ENOMEM;
5243 : : }
5244 : :
5245 : : /* Online state pins memcg ID, memcg ID pins CSS */
5246 : : refcount_set(&memcg->id.ref, 1);
5247 : : css_get(css);
5248 : : return 0;
5249 : : }
5250 : :
5251 : 0 : static void mem_cgroup_css_offline(struct cgroup_subsys_state *css)
5252 : : {
5253 : : struct mem_cgroup *memcg = mem_cgroup_from_css(css);
5254 : : struct mem_cgroup_event *event, *tmp;
5255 : :
5256 : : /*
5257 : : * Unregister events and notify userspace.
5258 : : * Notify userspace about cgroup removing only after rmdir of cgroup
5259 : : * directory to avoid race between userspace and kernelspace.
5260 : : */
5261 : : spin_lock(&memcg->event_list_lock);
5262 [ # # ]: 0 : list_for_each_entry_safe(event, tmp, &memcg->event_list, list) {
5263 : : list_del_init(&event->list);
5264 : 0 : schedule_work(&event->remove);
5265 : : }
5266 : : spin_unlock(&memcg->event_list_lock);
5267 : :
5268 : 0 : page_counter_set_min(&memcg->memory, 0);
5269 : 0 : page_counter_set_low(&memcg->memory, 0);
5270 : :
5271 : 0 : memcg_offline_kmem(memcg);
5272 : 0 : wb_memcg_offline(memcg);
5273 : :
5274 : 0 : drain_all_stock(memcg);
5275 : :
5276 : : mem_cgroup_id_put(memcg);
5277 : 0 : }
5278 : :
5279 : 0 : static void mem_cgroup_css_released(struct cgroup_subsys_state *css)
5280 : : {
5281 : : struct mem_cgroup *memcg = mem_cgroup_from_css(css);
5282 : :
5283 : 0 : invalidate_reclaim_iterators(memcg);
5284 : 0 : }
5285 : :
5286 : 0 : static void mem_cgroup_css_free(struct cgroup_subsys_state *css)
5287 : : {
5288 : : struct mem_cgroup *memcg = mem_cgroup_from_css(css);
5289 : : int __maybe_unused i;
5290 : :
5291 : : #ifdef CONFIG_CGROUP_WRITEBACK
5292 [ # # ]: 0 : for (i = 0; i < MEMCG_CGWB_FRN_CNT; i++)
5293 : 0 : wb_wait_for_completion(&memcg->cgwb_frn[i].done);
5294 : : #endif
5295 [ # # # # ]: 0 : if (cgroup_subsys_on_dfl(memory_cgrp_subsys) && !cgroup_memory_nosocket)
5296 : 0 : static_branch_dec(&memcg_sockets_enabled_key);
5297 : :
5298 [ # # # # ]: 0 : if (!cgroup_subsys_on_dfl(memory_cgrp_subsys) && memcg->tcpmem_active)
5299 : 0 : static_branch_dec(&memcg_sockets_enabled_key);
5300 : :
5301 : 0 : vmpressure_cleanup(&memcg->vmpressure);
5302 : 0 : cancel_work_sync(&memcg->high_work);
5303 : 0 : mem_cgroup_remove_from_trees(memcg);
5304 : 0 : memcg_free_shrinker_maps(memcg);
5305 : 0 : memcg_free_kmem(memcg);
5306 : 0 : mem_cgroup_free(memcg);
5307 : 0 : }
5308 : :
5309 : : /**
5310 : : * mem_cgroup_css_reset - reset the states of a mem_cgroup
5311 : : * @css: the target css
5312 : : *
5313 : : * Reset the states of the mem_cgroup associated with @css. This is
5314 : : * invoked when the userland requests disabling on the default hierarchy
5315 : : * but the memcg is pinned through dependency. The memcg should stop
5316 : : * applying policies and should revert to the vanilla state as it may be
5317 : : * made visible again.
5318 : : *
5319 : : * The current implementation only resets the essential configurations.
5320 : : * This needs to be expanded to cover all the visible parts.
5321 : : */
5322 : 2070 : static void mem_cgroup_css_reset(struct cgroup_subsys_state *css)
5323 : : {
5324 : : struct mem_cgroup *memcg = mem_cgroup_from_css(css);
5325 : :
5326 : 2070 : page_counter_set_max(&memcg->memory, PAGE_COUNTER_MAX);
5327 : 2070 : page_counter_set_max(&memcg->swap, PAGE_COUNTER_MAX);
5328 : 2070 : page_counter_set_max(&memcg->memsw, PAGE_COUNTER_MAX);
5329 : 2070 : page_counter_set_max(&memcg->kmem, PAGE_COUNTER_MAX);
5330 : 2070 : page_counter_set_max(&memcg->tcpmem, PAGE_COUNTER_MAX);
5331 : 2070 : page_counter_set_min(&memcg->memory, 0);
5332 : 2070 : page_counter_set_low(&memcg->memory, 0);
5333 : 2070 : memcg->high = PAGE_COUNTER_MAX;
5334 : 2070 : memcg->soft_limit = PAGE_COUNTER_MAX;
5335 : : memcg_wb_domain_size_changed(memcg);
5336 : 2070 : }
5337 : :
5338 : : #ifdef CONFIG_MMU
5339 : : /* Handlers for move charge at task migration. */
5340 : 0 : static int mem_cgroup_do_precharge(unsigned long count)
5341 : : {
5342 : : int ret;
5343 : :
5344 : : /* Try a single bulk charge without reclaim first, kswapd may wake */
5345 : 0 : ret = try_charge(mc.to, GFP_KERNEL & ~__GFP_DIRECT_RECLAIM, count);
5346 [ # # ]: 0 : if (!ret) {
5347 : 0 : mc.precharge += count;
5348 : 0 : return ret;
5349 : : }
5350 : :
5351 : : /* Try charges one by one with reclaim, but do not retry */
5352 [ # # ]: 0 : while (count--) {
5353 : 0 : ret = try_charge(mc.to, GFP_KERNEL | __GFP_NORETRY, 1);
5354 [ # # ]: 0 : if (ret)
5355 : 0 : return ret;
5356 : 0 : mc.precharge++;
5357 : 0 : cond_resched();
5358 : : }
5359 : : return 0;
5360 : : }
5361 : :
5362 : : union mc_target {
5363 : : struct page *page;
5364 : : swp_entry_t ent;
5365 : : };
5366 : :
5367 : : enum mc_target_type {
5368 : : MC_TARGET_NONE = 0,
5369 : : MC_TARGET_PAGE,
5370 : : MC_TARGET_SWAP,
5371 : : MC_TARGET_DEVICE,
5372 : : };
5373 : :
5374 : 0 : static struct page *mc_handle_present_pte(struct vm_area_struct *vma,
5375 : : unsigned long addr, pte_t ptent)
5376 : : {
5377 : 0 : struct page *page = vm_normal_page(vma, addr, ptent);
5378 : :
5379 [ # # # # ]: 0 : if (!page || !page_mapped(page))
5380 : : return NULL;
5381 [ # # ]: 0 : if (PageAnon(page)) {
5382 [ # # ]: 0 : if (!(mc.flags & MOVE_ANON))
5383 : : return NULL;
5384 : : } else {
5385 [ # # ]: 0 : if (!(mc.flags & MOVE_FILE))
5386 : : return NULL;
5387 : : }
5388 [ # # ]: 0 : if (!get_page_unless_zero(page))
5389 : : return NULL;
5390 : :
5391 : 0 : return page;
5392 : : }
5393 : :
5394 : : #if defined(CONFIG_SWAP) || defined(CONFIG_DEVICE_PRIVATE)
5395 : 0 : static struct page *mc_handle_swap_pte(struct vm_area_struct *vma,
5396 : : pte_t ptent, swp_entry_t *entry)
5397 : : {
5398 : : struct page *page = NULL;
5399 : : swp_entry_t ent = pte_to_swp_entry(ptent);
5400 : :
5401 [ # # # # ]: 0 : if (!(mc.flags & MOVE_ANON) || non_swap_entry(ent))
5402 : : return NULL;
5403 : :
5404 : : /*
5405 : : * Handle MEMORY_DEVICE_PRIVATE which are ZONE_DEVICE page belonging to
5406 : : * a device and because they are not accessible by CPU they are store
5407 : : * as special swap entry in the CPU page table.
5408 : : */
5409 : : if (is_device_private_entry(ent)) {
5410 : : page = device_private_entry_to_page(ent);
5411 : : /*
5412 : : * MEMORY_DEVICE_PRIVATE means ZONE_DEVICE page and which have
5413 : : * a refcount of 1 when free (unlike normal page)
5414 : : */
5415 : : if (!page_ref_add_unless(page, 1, 1))
5416 : : return NULL;
5417 : : return page;
5418 : : }
5419 : :
5420 : : /*
5421 : : * Because lookup_swap_cache() updates some statistics counter,
5422 : : * we call find_get_page() with swapper_space directly.
5423 : : */
5424 : 0 : page = find_get_page(swap_address_space(ent), swp_offset(ent));
5425 : : if (do_memsw_account())
5426 : : entry->val = ent.val;
5427 : :
5428 : : return page;
5429 : : }
5430 : : #else
5431 : : static struct page *mc_handle_swap_pte(struct vm_area_struct *vma,
5432 : : pte_t ptent, swp_entry_t *entry)
5433 : : {
5434 : : return NULL;
5435 : : }
5436 : : #endif
5437 : :
5438 : 0 : static struct page *mc_handle_file_pte(struct vm_area_struct *vma,
5439 : : unsigned long addr, pte_t ptent, swp_entry_t *entry)
5440 : : {
5441 : : struct page *page = NULL;
5442 : : struct address_space *mapping;
5443 : : pgoff_t pgoff;
5444 : :
5445 [ # # ]: 0 : if (!vma->vm_file) /* anonymous vma */
5446 : : return NULL;
5447 [ # # ]: 0 : if (!(mc.flags & MOVE_FILE))
5448 : : return NULL;
5449 : :
5450 : 0 : mapping = vma->vm_file->f_mapping;
5451 : : pgoff = linear_page_index(vma, addr);
5452 : :
5453 : : /* page is moved even if it's not RSS of this task(page-faulted). */
5454 : : #ifdef CONFIG_SWAP
5455 : : /* shmem/tmpfs may report page out on swap: account for that too. */
5456 [ # # ]: 0 : if (shmem_mapping(mapping)) {
5457 : 0 : page = find_get_entry(mapping, pgoff);
5458 [ # # ]: 0 : if (xa_is_value(page)) {
5459 : : swp_entry_t swp = radix_to_swp_entry(page);
5460 : : if (do_memsw_account())
5461 : : *entry = swp;
5462 : 0 : page = find_get_page(swap_address_space(swp),
5463 : : swp_offset(swp));
5464 : : }
5465 : : } else
5466 : : page = find_get_page(mapping, pgoff);
5467 : : #else
5468 : : page = find_get_page(mapping, pgoff);
5469 : : #endif
5470 : 0 : return page;
5471 : : }
5472 : :
5473 : : /**
5474 : : * mem_cgroup_move_account - move account of the page
5475 : : * @page: the page
5476 : : * @compound: charge the page as compound or small page
5477 : : * @from: mem_cgroup which the page is moved from.
5478 : : * @to: mem_cgroup which the page is moved to. @from != @to.
5479 : : *
5480 : : * The caller must make sure the page is not on LRU (isolate_page() is useful.)
5481 : : *
5482 : : * This function doesn't do "charge" to new cgroup and doesn't do "uncharge"
5483 : : * from old cgroup.
5484 : : */
5485 : 0 : static int mem_cgroup_move_account(struct page *page,
5486 : : bool compound,
5487 : : struct mem_cgroup *from,
5488 : : struct mem_cgroup *to)
5489 : : {
5490 : : struct lruvec *from_vec, *to_vec;
5491 : : struct pglist_data *pgdat;
5492 : : unsigned long flags;
5493 : : unsigned int nr_pages = compound ? hpage_nr_pages(page) : 1;
5494 : : int ret;
5495 : : bool anon;
5496 : :
5497 : : VM_BUG_ON(from == to);
5498 : : VM_BUG_ON_PAGE(PageLRU(page), page);
5499 : : VM_BUG_ON(compound && !PageTransHuge(page));
5500 : :
5501 : : /*
5502 : : * Prevent mem_cgroup_migrate() from looking at
5503 : : * page->mem_cgroup of its source page while we change it.
5504 : : */
5505 : : ret = -EBUSY;
5506 [ # # ]: 0 : if (!trylock_page(page))
5507 : : goto out;
5508 : :
5509 : : ret = -EINVAL;
5510 [ # # ]: 0 : if (page->mem_cgroup != from)
5511 : : goto out_unlock;
5512 : :
5513 : : anon = PageAnon(page);
5514 : :
5515 : : pgdat = page_pgdat(page);
5516 : : from_vec = mem_cgroup_lruvec(pgdat, from);
5517 : : to_vec = mem_cgroup_lruvec(pgdat, to);
5518 : :
5519 : 0 : spin_lock_irqsave(&from->move_lock, flags);
5520 : :
5521 [ # # # # ]: 0 : if (!anon && page_mapped(page)) {
5522 : 0 : __mod_lruvec_state(from_vec, NR_FILE_MAPPED, -nr_pages);
5523 : 0 : __mod_lruvec_state(to_vec, NR_FILE_MAPPED, nr_pages);
5524 : : }
5525 : :
5526 : : /*
5527 : : * move_lock grabbed above and caller set from->moving_account, so
5528 : : * mod_memcg_page_state will serialize updates to PageDirty.
5529 : : * So mapping should be stable for dirty pages.
5530 : : */
5531 [ # # # # ]: 0 : if (!anon && PageDirty(page)) {
5532 : 0 : struct address_space *mapping = page_mapping(page);
5533 : :
5534 [ # # ]: 0 : if (mapping_cap_account_dirty(mapping)) {
5535 : 0 : __mod_lruvec_state(from_vec, NR_FILE_DIRTY, -nr_pages);
5536 : 0 : __mod_lruvec_state(to_vec, NR_FILE_DIRTY, nr_pages);
5537 : : }
5538 : : }
5539 : :
5540 [ # # ]: 0 : if (PageWriteback(page)) {
5541 : 0 : __mod_lruvec_state(from_vec, NR_WRITEBACK, -nr_pages);
5542 : 0 : __mod_lruvec_state(to_vec, NR_WRITEBACK, nr_pages);
5543 : : }
5544 : :
5545 : : /*
5546 : : * It is safe to change page->mem_cgroup here because the page
5547 : : * is referenced, charged, and isolated - we can't race with
5548 : : * uncharging, charging, migration, or LRU putback.
5549 : : */
5550 : :
5551 : : /* caller should have done css_get */
5552 : 0 : page->mem_cgroup = to;
5553 : :
5554 : : spin_unlock_irqrestore(&from->move_lock, flags);
5555 : :
5556 : : ret = 0;
5557 : :
5558 : 0 : local_irq_disable();
5559 : 0 : mem_cgroup_charge_statistics(to, page, compound, nr_pages);
5560 : 0 : memcg_check_events(to, page);
5561 : 0 : mem_cgroup_charge_statistics(from, page, compound, -nr_pages);
5562 : 0 : memcg_check_events(from, page);
5563 : 0 : local_irq_enable();
5564 : : out_unlock:
5565 : 0 : unlock_page(page);
5566 : : out:
5567 : 0 : return ret;
5568 : : }
5569 : :
5570 : : /**
5571 : : * get_mctgt_type - get target type of moving charge
5572 : : * @vma: the vma the pte to be checked belongs
5573 : : * @addr: the address corresponding to the pte to be checked
5574 : : * @ptent: the pte to be checked
5575 : : * @target: the pointer the target page or swap ent will be stored(can be NULL)
5576 : : *
5577 : : * Returns
5578 : : * 0(MC_TARGET_NONE): if the pte is not a target for move charge.
5579 : : * 1(MC_TARGET_PAGE): if the page corresponding to this pte is a target for
5580 : : * move charge. if @target is not NULL, the page is stored in target->page
5581 : : * with extra refcnt got(Callers should handle it).
5582 : : * 2(MC_TARGET_SWAP): if the swap entry corresponding to this pte is a
5583 : : * target for charge migration. if @target is not NULL, the entry is stored
5584 : : * in target->ent.
5585 : : * 3(MC_TARGET_DEVICE): like MC_TARGET_PAGE but page is MEMORY_DEVICE_PRIVATE
5586 : : * (so ZONE_DEVICE page and thus not on the lru).
5587 : : * For now we such page is charge like a regular page would be as for all
5588 : : * intent and purposes it is just special memory taking the place of a
5589 : : * regular page.
5590 : : *
5591 : : * See Documentations/vm/hmm.txt and include/linux/hmm.h
5592 : : *
5593 : : * Called with pte lock held.
5594 : : */
5595 : :
5596 : 0 : static enum mc_target_type get_mctgt_type(struct vm_area_struct *vma,
5597 : : unsigned long addr, pte_t ptent, union mc_target *target)
5598 : : {
5599 : : struct page *page = NULL;
5600 : : enum mc_target_type ret = MC_TARGET_NONE;
5601 : 0 : swp_entry_t ent = { .val = 0 };
5602 : :
5603 [ # # ]: 0 : if (pte_present(ptent))
5604 : 0 : page = mc_handle_present_pte(vma, addr, ptent);
5605 [ # # ]: 0 : else if (is_swap_pte(ptent))
5606 : 0 : page = mc_handle_swap_pte(vma, ptent, &ent);
5607 [ # # ]: 0 : else if (pte_none(ptent))
5608 : 0 : page = mc_handle_file_pte(vma, addr, ptent, &ent);
5609 : :
5610 [ # # # # ]: 0 : if (!page && !ent.val)
5611 : : return ret;
5612 [ # # ]: 0 : if (page) {
5613 : : /*
5614 : : * Do only loose check w/o serialization.
5615 : : * mem_cgroup_move_account() checks the page is valid or
5616 : : * not under LRU exclusion.
5617 : : */
5618 [ # # ]: 0 : if (page->mem_cgroup == mc.from) {
5619 : : ret = MC_TARGET_PAGE;
5620 : : if (is_device_private_page(page))
5621 : : ret = MC_TARGET_DEVICE;
5622 [ # # ]: 0 : if (target)
5623 : 0 : target->page = page;
5624 : : }
5625 [ # # ]: 0 : if (!ret || !target)
5626 : 0 : put_page(page);
5627 : : }
5628 : : /*
5629 : : * There is a swap entry and a page doesn't exist or isn't charged.
5630 : : * But we cannot move a tail-page in a THP.
5631 : : */
5632 [ # # # # : 0 : if (ent.val && !ret && (!page || !PageTransCompound(page)) &&
# # ]
5633 : 0 : mem_cgroup_id(mc.from) == lookup_swap_cgroup_id(ent)) {
5634 : : ret = MC_TARGET_SWAP;
5635 [ # # ]: 0 : if (target)
5636 : 0 : target->ent = ent;
5637 : : }
5638 : 0 : return ret;
5639 : : }
5640 : :
5641 : : #ifdef CONFIG_TRANSPARENT_HUGEPAGE
5642 : : /*
5643 : : * We don't consider PMD mapped swapping or file mapped pages because THP does
5644 : : * not support them for now.
5645 : : * Caller should make sure that pmd_trans_huge(pmd) is true.
5646 : : */
5647 : : static enum mc_target_type get_mctgt_type_thp(struct vm_area_struct *vma,
5648 : : unsigned long addr, pmd_t pmd, union mc_target *target)
5649 : : {
5650 : : struct page *page = NULL;
5651 : : enum mc_target_type ret = MC_TARGET_NONE;
5652 : :
5653 : : if (unlikely(is_swap_pmd(pmd))) {
5654 : : VM_BUG_ON(thp_migration_supported() &&
5655 : : !is_pmd_migration_entry(pmd));
5656 : : return ret;
5657 : : }
5658 : : page = pmd_page(pmd);
5659 : : VM_BUG_ON_PAGE(!page || !PageHead(page), page);
5660 : : if (!(mc.flags & MOVE_ANON))
5661 : : return ret;
5662 : : if (page->mem_cgroup == mc.from) {
5663 : : ret = MC_TARGET_PAGE;
5664 : : if (target) {
5665 : : get_page(page);
5666 : : target->page = page;
5667 : : }
5668 : : }
5669 : : return ret;
5670 : : }
5671 : : #else
5672 : : static inline enum mc_target_type get_mctgt_type_thp(struct vm_area_struct *vma,
5673 : : unsigned long addr, pmd_t pmd, union mc_target *target)
5674 : : {
5675 : : return MC_TARGET_NONE;
5676 : : }
5677 : : #endif
5678 : :
5679 : 0 : static int mem_cgroup_count_precharge_pte_range(pmd_t *pmd,
5680 : : unsigned long addr, unsigned long end,
5681 : : struct mm_walk *walk)
5682 : : {
5683 : 0 : struct vm_area_struct *vma = walk->vma;
5684 : : pte_t *pte;
5685 : : spinlock_t *ptl;
5686 : :
5687 : : ptl = pmd_trans_huge_lock(pmd, vma);
5688 : : if (ptl) {
5689 : : /*
5690 : : * Note their can not be MC_TARGET_DEVICE for now as we do not
5691 : : * support transparent huge page with MEMORY_DEVICE_PRIVATE but
5692 : : * this might change.
5693 : : */
5694 : : if (get_mctgt_type_thp(vma, addr, *pmd, NULL) == MC_TARGET_PAGE)
5695 : : mc.precharge += HPAGE_PMD_NR;
5696 : : spin_unlock(ptl);
5697 : : return 0;
5698 : : }
5699 : :
5700 : : if (pmd_trans_unstable(pmd))
5701 : : return 0;
5702 : 0 : pte = pte_offset_map_lock(vma->vm_mm, pmd, addr, &ptl);
5703 [ # # ]: 0 : for (; addr != end; pte++, addr += PAGE_SIZE)
5704 [ # # ]: 0 : if (get_mctgt_type(vma, addr, *pte, NULL))
5705 : 0 : mc.precharge++; /* increment precharge temporarily */
5706 : : pte_unmap_unlock(pte - 1, ptl);
5707 : 0 : cond_resched();
5708 : :
5709 : : return 0;
5710 : : }
5711 : :
5712 : : static const struct mm_walk_ops precharge_walk_ops = {
5713 : : .pmd_entry = mem_cgroup_count_precharge_pte_range,
5714 : : };
5715 : :
5716 : 0 : static unsigned long mem_cgroup_count_precharge(struct mm_struct *mm)
5717 : : {
5718 : : unsigned long precharge;
5719 : :
5720 : 0 : down_read(&mm->mmap_sem);
5721 : 0 : walk_page_range(mm, 0, mm->highest_vm_end, &precharge_walk_ops, NULL);
5722 : 0 : up_read(&mm->mmap_sem);
5723 : :
5724 : 0 : precharge = mc.precharge;
5725 : 0 : mc.precharge = 0;
5726 : :
5727 : 0 : return precharge;
5728 : : }
5729 : :
5730 : 0 : static int mem_cgroup_precharge_mc(struct mm_struct *mm)
5731 : : {
5732 : 0 : unsigned long precharge = mem_cgroup_count_precharge(mm);
5733 : :
5734 : : VM_BUG_ON(mc.moving_task);
5735 : 0 : mc.moving_task = current;
5736 : 0 : return mem_cgroup_do_precharge(precharge);
5737 : : }
5738 : :
5739 : : /* cancels all extra charges on mc.from and mc.to, and wakes up all waiters. */
5740 : 0 : static void __mem_cgroup_clear_mc(void)
5741 : : {
5742 : 0 : struct mem_cgroup *from = mc.from;
5743 : 0 : struct mem_cgroup *to = mc.to;
5744 : :
5745 : : /* we must uncharge all the leftover precharges from mc.to */
5746 [ # # ]: 0 : if (mc.precharge) {
5747 : 0 : cancel_charge(mc.to, mc.precharge);
5748 : 0 : mc.precharge = 0;
5749 : : }
5750 : : /*
5751 : : * we didn't uncharge from mc.from at mem_cgroup_move_account(), so
5752 : : * we must uncharge here.
5753 : : */
5754 [ # # ]: 0 : if (mc.moved_charge) {
5755 : 0 : cancel_charge(mc.from, mc.moved_charge);
5756 : 0 : mc.moved_charge = 0;
5757 : : }
5758 : : /* we must fixup refcnts and charges */
5759 [ # # ]: 0 : if (mc.moved_swap) {
5760 : : /* uncharge swap account from the old cgroup */
5761 [ # # ]: 0 : if (!mem_cgroup_is_root(mc.from))
5762 : 0 : page_counter_uncharge(&mc.from->memsw, mc.moved_swap);
5763 : :
5764 : 0 : mem_cgroup_id_put_many(mc.from, mc.moved_swap);
5765 : :
5766 : : /*
5767 : : * we charged both to->memory and to->memsw, so we
5768 : : * should uncharge to->memory.
5769 : : */
5770 [ # # ]: 0 : if (!mem_cgroup_is_root(mc.to))
5771 : 0 : page_counter_uncharge(&mc.to->memory, mc.moved_swap);
5772 : :
5773 : 0 : css_put_many(&mc.to->css, mc.moved_swap);
5774 : :
5775 : 0 : mc.moved_swap = 0;
5776 : : }
5777 : 0 : memcg_oom_recover(from);
5778 : 0 : memcg_oom_recover(to);
5779 : 0 : wake_up_all(&mc.waitq);
5780 : 0 : }
5781 : :
5782 : 0 : static void mem_cgroup_clear_mc(void)
5783 : : {
5784 : 0 : struct mm_struct *mm = mc.mm;
5785 : :
5786 : : /*
5787 : : * we must clear moving_task before waking up waiters at the end of
5788 : : * task migration.
5789 : : */
5790 : 0 : mc.moving_task = NULL;
5791 : 0 : __mem_cgroup_clear_mc();
5792 : : spin_lock(&mc.lock);
5793 : 0 : mc.from = NULL;
5794 : 0 : mc.to = NULL;
5795 : 0 : mc.mm = NULL;
5796 : : spin_unlock(&mc.lock);
5797 : :
5798 : 0 : mmput(mm);
5799 : 0 : }
5800 : :
5801 : 0 : static int mem_cgroup_can_attach(struct cgroup_taskset *tset)
5802 : : {
5803 : : struct cgroup_subsys_state *css;
5804 : : struct mem_cgroup *memcg = NULL; /* unneeded init to make gcc happy */
5805 : : struct mem_cgroup *from;
5806 : : struct task_struct *leader, *p;
5807 : : struct mm_struct *mm;
5808 : : unsigned long move_flags;
5809 : : int ret = 0;
5810 : :
5811 : : /* charge immigration isn't supported on the default hierarchy */
5812 [ # # ]: 0 : if (cgroup_subsys_on_dfl(memory_cgrp_subsys))
5813 : : return 0;
5814 : :
5815 : : /*
5816 : : * Multi-process migrations only happen on the default hierarchy
5817 : : * where charge immigration is not used. Perform charge
5818 : : * immigration if @tset contains a leader and whine if there are
5819 : : * multiple.
5820 : : */
5821 : : p = NULL;
5822 [ # # # # ]: 0 : cgroup_taskset_for_each_leader(leader, css, tset) {
5823 [ # # # # ]: 0 : WARN_ON_ONCE(p);
5824 : : p = leader;
5825 : 0 : memcg = mem_cgroup_from_css(css);
5826 : : }
5827 [ # # ]: 0 : if (!p)
5828 : : return 0;
5829 : :
5830 : : /*
5831 : : * We are now commited to this value whatever it is. Changes in this
5832 : : * tunable will only affect upcoming migrations, not the current one.
5833 : : * So we need to save it, and keep it going.
5834 : : */
5835 : : move_flags = READ_ONCE(memcg->move_charge_at_immigrate);
5836 [ # # ]: 0 : if (!move_flags)
5837 : : return 0;
5838 : :
5839 : : from = mem_cgroup_from_task(p);
5840 : :
5841 : : VM_BUG_ON(from == memcg);
5842 : :
5843 : 0 : mm = get_task_mm(p);
5844 [ # # ]: 0 : if (!mm)
5845 : : return 0;
5846 : : /* We move charges only when we move a owner of the mm */
5847 [ # # ]: 0 : if (mm->owner == p) {
5848 : : VM_BUG_ON(mc.from);
5849 : : VM_BUG_ON(mc.to);
5850 : : VM_BUG_ON(mc.precharge);
5851 : : VM_BUG_ON(mc.moved_charge);
5852 : : VM_BUG_ON(mc.moved_swap);
5853 : :
5854 : : spin_lock(&mc.lock);
5855 : 0 : mc.mm = mm;
5856 : 0 : mc.from = from;
5857 : 0 : mc.to = memcg;
5858 : 0 : mc.flags = move_flags;
5859 : : spin_unlock(&mc.lock);
5860 : : /* We set mc.moving_task later */
5861 : :
5862 : 0 : ret = mem_cgroup_precharge_mc(mm);
5863 [ # # ]: 0 : if (ret)
5864 : 0 : mem_cgroup_clear_mc();
5865 : : } else {
5866 : 0 : mmput(mm);
5867 : : }
5868 : 0 : return ret;
5869 : : }
5870 : :
5871 : 0 : static void mem_cgroup_cancel_attach(struct cgroup_taskset *tset)
5872 : : {
5873 [ # # ]: 0 : if (mc.to)
5874 : 0 : mem_cgroup_clear_mc();
5875 : 0 : }
5876 : :
5877 : 0 : static int mem_cgroup_move_charge_pte_range(pmd_t *pmd,
5878 : : unsigned long addr, unsigned long end,
5879 : : struct mm_walk *walk)
5880 : : {
5881 : : int ret = 0;
5882 : 0 : struct vm_area_struct *vma = walk->vma;
5883 : : pte_t *pte;
5884 : : spinlock_t *ptl;
5885 : : enum mc_target_type target_type;
5886 : : union mc_target target;
5887 : : struct page *page;
5888 : :
5889 : : ptl = pmd_trans_huge_lock(pmd, vma);
5890 : : if (ptl) {
5891 : : if (mc.precharge < HPAGE_PMD_NR) {
5892 : : spin_unlock(ptl);
5893 : : return 0;
5894 : : }
5895 : : target_type = get_mctgt_type_thp(vma, addr, *pmd, &target);
5896 : : if (target_type == MC_TARGET_PAGE) {
5897 : : page = target.page;
5898 : : if (!isolate_lru_page(page)) {
5899 : : if (!mem_cgroup_move_account(page, true,
5900 : : mc.from, mc.to)) {
5901 : : mc.precharge -= HPAGE_PMD_NR;
5902 : : mc.moved_charge += HPAGE_PMD_NR;
5903 : : }
5904 : : putback_lru_page(page);
5905 : : }
5906 : : put_page(page);
5907 : : } else if (target_type == MC_TARGET_DEVICE) {
5908 : : page = target.page;
5909 : : if (!mem_cgroup_move_account(page, true,
5910 : : mc.from, mc.to)) {
5911 : : mc.precharge -= HPAGE_PMD_NR;
5912 : : mc.moved_charge += HPAGE_PMD_NR;
5913 : : }
5914 : : put_page(page);
5915 : : }
5916 : : spin_unlock(ptl);
5917 : : return 0;
5918 : : }
5919 : :
5920 : : if (pmd_trans_unstable(pmd))
5921 : : return 0;
5922 : : retry:
5923 : 0 : pte = pte_offset_map_lock(vma->vm_mm, pmd, addr, &ptl);
5924 [ # # ]: 0 : for (; addr != end; addr += PAGE_SIZE) {
5925 : 0 : pte_t ptent = *(pte++);
5926 : : bool device = false;
5927 : : swp_entry_t ent;
5928 : :
5929 [ # # ]: 0 : if (!mc.precharge)
5930 : : break;
5931 : :
5932 [ # # # ]: 0 : switch (get_mctgt_type(vma, addr, ptent, &target)) {
5933 : : case MC_TARGET_DEVICE:
5934 : : device = true;
5935 : : /* fall through */
5936 : : case MC_TARGET_PAGE:
5937 : 0 : page = target.page;
5938 : : /*
5939 : : * We can have a part of the split pmd here. Moving it
5940 : : * can be done but it would be too convoluted so simply
5941 : : * ignore such a partial THP and keep it in original
5942 : : * memcg. There should be somebody mapping the head.
5943 : : */
5944 : : if (PageTransCompound(page))
5945 : : goto put;
5946 [ # # # # ]: 0 : if (!device && isolate_lru_page(page))
5947 : : goto put;
5948 [ # # ]: 0 : if (!mem_cgroup_move_account(page, false,
5949 : : mc.from, mc.to)) {
5950 : 0 : mc.precharge--;
5951 : : /* we uncharge from mc.from later. */
5952 : 0 : mc.moved_charge++;
5953 : : }
5954 [ # # ]: 0 : if (!device)
5955 : 0 : putback_lru_page(page);
5956 : : put: /* get_mctgt_type() gets the page */
5957 : 0 : put_page(page);
5958 : 0 : break;
5959 : : case MC_TARGET_SWAP:
5960 : : ent = target.ent;
5961 : : if (!mem_cgroup_move_swap_account(ent, mc.from, mc.to)) {
5962 : : mc.precharge--;
5963 : : mem_cgroup_id_get_many(mc.to, 1);
5964 : : /* we fixup other refcnts and charges later. */
5965 : : mc.moved_swap++;
5966 : : }
5967 : : break;
5968 : : default:
5969 : : break;
5970 : : }
5971 : : }
5972 : : pte_unmap_unlock(pte - 1, ptl);
5973 : 0 : cond_resched();
5974 : :
5975 [ # # ]: 0 : if (addr != end) {
5976 : : /*
5977 : : * We have consumed all precharges we got in can_attach().
5978 : : * We try charge one by one, but don't do any additional
5979 : : * charges to mc.to if we have failed in charge once in attach()
5980 : : * phase.
5981 : : */
5982 : 0 : ret = mem_cgroup_do_precharge(1);
5983 [ # # ]: 0 : if (!ret)
5984 : : goto retry;
5985 : : }
5986 : :
5987 : : return ret;
5988 : : }
5989 : :
5990 : : static const struct mm_walk_ops charge_walk_ops = {
5991 : : .pmd_entry = mem_cgroup_move_charge_pte_range,
5992 : : };
5993 : :
5994 : 0 : static void mem_cgroup_move_charge(void)
5995 : : {
5996 : 0 : lru_add_drain_all();
5997 : : /*
5998 : : * Signal lock_page_memcg() to take the memcg's move_lock
5999 : : * while we're moving its pages to another memcg. Then wait
6000 : : * for already started RCU-only updates to finish.
6001 : : */
6002 : 0 : atomic_inc(&mc.from->moving_account);
6003 : 0 : synchronize_rcu();
6004 : : retry:
6005 [ # # ]: 0 : if (unlikely(!down_read_trylock(&mc.mm->mmap_sem))) {
6006 : : /*
6007 : : * Someone who are holding the mmap_sem might be waiting in
6008 : : * waitq. So we cancel all extra charges, wake up all waiters,
6009 : : * and retry. Because we cancel precharges, we might not be able
6010 : : * to move enough charges, but moving charge is a best-effort
6011 : : * feature anyway, so it wouldn't be a big problem.
6012 : : */
6013 : 0 : __mem_cgroup_clear_mc();
6014 : 0 : cond_resched();
6015 : 0 : goto retry;
6016 : : }
6017 : : /*
6018 : : * When we have consumed all precharges and failed in doing
6019 : : * additional charge, the page walk just aborts.
6020 : : */
6021 : 0 : walk_page_range(mc.mm, 0, mc.mm->highest_vm_end, &charge_walk_ops,
6022 : : NULL);
6023 : :
6024 : 0 : up_read(&mc.mm->mmap_sem);
6025 : 0 : atomic_dec(&mc.from->moving_account);
6026 : 0 : }
6027 : :
6028 : 109798 : static void mem_cgroup_move_task(void)
6029 : : {
6030 [ - + ]: 109798 : if (mc.to) {
6031 : 0 : mem_cgroup_move_charge();
6032 : 0 : mem_cgroup_clear_mc();
6033 : : }
6034 : 109798 : }
6035 : : #else /* !CONFIG_MMU */
6036 : : static int mem_cgroup_can_attach(struct cgroup_taskset *tset)
6037 : : {
6038 : : return 0;
6039 : : }
6040 : : static void mem_cgroup_cancel_attach(struct cgroup_taskset *tset)
6041 : : {
6042 : : }
6043 : : static void mem_cgroup_move_task(void)
6044 : : {
6045 : : }
6046 : : #endif
6047 : :
6048 : : /*
6049 : : * Cgroup retains root cgroups across [un]mount cycles making it necessary
6050 : : * to verify whether we're attached to the default hierarchy on each mount
6051 : : * attempt.
6052 : : */
6053 : 0 : static void mem_cgroup_bind(struct cgroup_subsys_state *root_css)
6054 : : {
6055 : : /*
6056 : : * use_hierarchy is forced on the default hierarchy. cgroup core
6057 : : * guarantees that @root doesn't have any children, so turning it
6058 : : * on for the root memcg is enough.
6059 : : */
6060 [ # # ]: 0 : if (cgroup_subsys_on_dfl(memory_cgrp_subsys))
6061 : 0 : root_mem_cgroup->use_hierarchy = true;
6062 : : else
6063 : 0 : root_mem_cgroup->use_hierarchy = false;
6064 : 0 : }
6065 : :
6066 : 0 : static int seq_puts_memcg_tunable(struct seq_file *m, unsigned long value)
6067 : : {
6068 [ # # ]: 0 : if (value == PAGE_COUNTER_MAX)
6069 : 0 : seq_puts(m, "max\n");
6070 : : else
6071 : 0 : seq_printf(m, "%llu\n", (u64)value * PAGE_SIZE);
6072 : :
6073 : 0 : return 0;
6074 : : }
6075 : :
6076 : 0 : static u64 memory_current_read(struct cgroup_subsys_state *css,
6077 : : struct cftype *cft)
6078 : : {
6079 : : struct mem_cgroup *memcg = mem_cgroup_from_css(css);
6080 : :
6081 : 0 : return (u64)page_counter_read(&memcg->memory) * PAGE_SIZE;
6082 : : }
6083 : :
6084 : 0 : static int memory_min_show(struct seq_file *m, void *v)
6085 : : {
6086 : 0 : return seq_puts_memcg_tunable(m,
6087 : : READ_ONCE(mem_cgroup_from_seq(m)->memory.min));
6088 : : }
6089 : :
6090 : 0 : static ssize_t memory_min_write(struct kernfs_open_file *of,
6091 : : char *buf, size_t nbytes, loff_t off)
6092 : : {
6093 : 0 : struct mem_cgroup *memcg = mem_cgroup_from_css(of_css(of));
6094 : : unsigned long min;
6095 : : int err;
6096 : :
6097 : : buf = strstrip(buf);
6098 : 0 : err = page_counter_memparse(buf, "max", &min);
6099 [ # # ]: 0 : if (err)
6100 : : return err;
6101 : :
6102 : 0 : page_counter_set_min(&memcg->memory, min);
6103 : :
6104 : 0 : return nbytes;
6105 : : }
6106 : :
6107 : 0 : static int memory_low_show(struct seq_file *m, void *v)
6108 : : {
6109 : 0 : return seq_puts_memcg_tunable(m,
6110 : : READ_ONCE(mem_cgroup_from_seq(m)->memory.low));
6111 : : }
6112 : :
6113 : 0 : static ssize_t memory_low_write(struct kernfs_open_file *of,
6114 : : char *buf, size_t nbytes, loff_t off)
6115 : : {
6116 : 0 : struct mem_cgroup *memcg = mem_cgroup_from_css(of_css(of));
6117 : : unsigned long low;
6118 : : int err;
6119 : :
6120 : : buf = strstrip(buf);
6121 : 0 : err = page_counter_memparse(buf, "max", &low);
6122 [ # # ]: 0 : if (err)
6123 : : return err;
6124 : :
6125 : 0 : page_counter_set_low(&memcg->memory, low);
6126 : :
6127 : 0 : return nbytes;
6128 : : }
6129 : :
6130 : 0 : static int memory_high_show(struct seq_file *m, void *v)
6131 : : {
6132 : 0 : return seq_puts_memcg_tunable(m, READ_ONCE(mem_cgroup_from_seq(m)->high));
6133 : : }
6134 : :
6135 : 0 : static ssize_t memory_high_write(struct kernfs_open_file *of,
6136 : : char *buf, size_t nbytes, loff_t off)
6137 : : {
6138 : 0 : struct mem_cgroup *memcg = mem_cgroup_from_css(of_css(of));
6139 : : unsigned long nr_pages;
6140 : : unsigned long high;
6141 : : int err;
6142 : :
6143 : : buf = strstrip(buf);
6144 : 0 : err = page_counter_memparse(buf, "max", &high);
6145 [ # # ]: 0 : if (err)
6146 : : return err;
6147 : :
6148 : 0 : memcg->high = high;
6149 : :
6150 : : nr_pages = page_counter_read(&memcg->memory);
6151 [ # # ]: 0 : if (nr_pages > high)
6152 : 0 : try_to_free_mem_cgroup_pages(memcg, nr_pages - high,
6153 : : GFP_KERNEL, true);
6154 : :
6155 : : memcg_wb_domain_size_changed(memcg);
6156 : 0 : return nbytes;
6157 : : }
6158 : :
6159 : 0 : static int memory_max_show(struct seq_file *m, void *v)
6160 : : {
6161 : 0 : return seq_puts_memcg_tunable(m,
6162 : : READ_ONCE(mem_cgroup_from_seq(m)->memory.max));
6163 : : }
6164 : :
6165 : 0 : static ssize_t memory_max_write(struct kernfs_open_file *of,
6166 : : char *buf, size_t nbytes, loff_t off)
6167 : : {
6168 : 0 : struct mem_cgroup *memcg = mem_cgroup_from_css(of_css(of));
6169 : : unsigned int nr_reclaims = MEM_CGROUP_RECLAIM_RETRIES;
6170 : : bool drained = false;
6171 : : unsigned long max;
6172 : : int err;
6173 : :
6174 : : buf = strstrip(buf);
6175 : 0 : err = page_counter_memparse(buf, "max", &max);
6176 [ # # ]: 0 : if (err)
6177 : : return err;
6178 : :
6179 : 0 : xchg(&memcg->memory.max, max);
6180 : :
6181 : : for (;;) {
6182 : : unsigned long nr_pages = page_counter_read(&memcg->memory);
6183 : :
6184 [ # # ]: 0 : if (nr_pages <= max)
6185 : : break;
6186 : :
6187 [ # # ]: 0 : if (signal_pending(current)) {
6188 : : err = -EINTR;
6189 : : break;
6190 : : }
6191 : :
6192 [ # # ]: 0 : if (!drained) {
6193 : 0 : drain_all_stock(memcg);
6194 : : drained = true;
6195 : 0 : continue;
6196 : : }
6197 : :
6198 [ # # ]: 0 : if (nr_reclaims) {
6199 [ # # ]: 0 : if (!try_to_free_mem_cgroup_pages(memcg, nr_pages - max,
6200 : : GFP_KERNEL, true))
6201 : 0 : nr_reclaims--;
6202 : 0 : continue;
6203 : : }
6204 : :
6205 : 0 : memcg_memory_event(memcg, MEMCG_OOM);
6206 [ # # ]: 0 : if (!mem_cgroup_out_of_memory(memcg, GFP_KERNEL, 0))
6207 : : break;
6208 : : }
6209 : :
6210 : : memcg_wb_domain_size_changed(memcg);
6211 : 0 : return nbytes;
6212 : : }
6213 : :
6214 : 0 : static void __memory_events_show(struct seq_file *m, atomic_long_t *events)
6215 : : {
6216 : 0 : seq_printf(m, "low %lu\n", atomic_long_read(&events[MEMCG_LOW]));
6217 : 0 : seq_printf(m, "high %lu\n", atomic_long_read(&events[MEMCG_HIGH]));
6218 : 0 : seq_printf(m, "max %lu\n", atomic_long_read(&events[MEMCG_MAX]));
6219 : 0 : seq_printf(m, "oom %lu\n", atomic_long_read(&events[MEMCG_OOM]));
6220 : 0 : seq_printf(m, "oom_kill %lu\n",
6221 : : atomic_long_read(&events[MEMCG_OOM_KILL]));
6222 : 0 : }
6223 : :
6224 : 0 : static int memory_events_show(struct seq_file *m, void *v)
6225 : : {
6226 : : struct mem_cgroup *memcg = mem_cgroup_from_seq(m);
6227 : :
6228 : 0 : __memory_events_show(m, memcg->memory_events);
6229 : 0 : return 0;
6230 : : }
6231 : :
6232 : 0 : static int memory_events_local_show(struct seq_file *m, void *v)
6233 : : {
6234 : : struct mem_cgroup *memcg = mem_cgroup_from_seq(m);
6235 : :
6236 : 0 : __memory_events_show(m, memcg->memory_events_local);
6237 : 0 : return 0;
6238 : : }
6239 : :
6240 : 0 : static int memory_stat_show(struct seq_file *m, void *v)
6241 : : {
6242 : : struct mem_cgroup *memcg = mem_cgroup_from_seq(m);
6243 : : char *buf;
6244 : :
6245 : 0 : buf = memory_stat_format(memcg);
6246 [ # # ]: 0 : if (!buf)
6247 : : return -ENOMEM;
6248 : 0 : seq_puts(m, buf);
6249 : 0 : kfree(buf);
6250 : 0 : return 0;
6251 : : }
6252 : :
6253 : 0 : static int memory_oom_group_show(struct seq_file *m, void *v)
6254 : : {
6255 : : struct mem_cgroup *memcg = mem_cgroup_from_seq(m);
6256 : :
6257 : 0 : seq_printf(m, "%d\n", memcg->oom_group);
6258 : :
6259 : 0 : return 0;
6260 : : }
6261 : :
6262 : 0 : static ssize_t memory_oom_group_write(struct kernfs_open_file *of,
6263 : : char *buf, size_t nbytes, loff_t off)
6264 : : {
6265 : 0 : struct mem_cgroup *memcg = mem_cgroup_from_css(of_css(of));
6266 : : int ret, oom_group;
6267 : :
6268 : : buf = strstrip(buf);
6269 [ # # ]: 0 : if (!buf)
6270 : : return -EINVAL;
6271 : :
6272 : 0 : ret = kstrtoint(buf, 0, &oom_group);
6273 [ # # ]: 0 : if (ret)
6274 : : return ret;
6275 : :
6276 [ # # ]: 0 : if (oom_group != 0 && oom_group != 1)
6277 : : return -EINVAL;
6278 : :
6279 : 0 : memcg->oom_group = oom_group;
6280 : :
6281 : 0 : return nbytes;
6282 : : }
6283 : :
6284 : : static struct cftype memory_files[] = {
6285 : : {
6286 : : .name = "current",
6287 : : .flags = CFTYPE_NOT_ON_ROOT,
6288 : : .read_u64 = memory_current_read,
6289 : : },
6290 : : {
6291 : : .name = "min",
6292 : : .flags = CFTYPE_NOT_ON_ROOT,
6293 : : .seq_show = memory_min_show,
6294 : : .write = memory_min_write,
6295 : : },
6296 : : {
6297 : : .name = "low",
6298 : : .flags = CFTYPE_NOT_ON_ROOT,
6299 : : .seq_show = memory_low_show,
6300 : : .write = memory_low_write,
6301 : : },
6302 : : {
6303 : : .name = "high",
6304 : : .flags = CFTYPE_NOT_ON_ROOT,
6305 : : .seq_show = memory_high_show,
6306 : : .write = memory_high_write,
6307 : : },
6308 : : {
6309 : : .name = "max",
6310 : : .flags = CFTYPE_NOT_ON_ROOT,
6311 : : .seq_show = memory_max_show,
6312 : : .write = memory_max_write,
6313 : : },
6314 : : {
6315 : : .name = "events",
6316 : : .flags = CFTYPE_NOT_ON_ROOT,
6317 : : .file_offset = offsetof(struct mem_cgroup, events_file),
6318 : : .seq_show = memory_events_show,
6319 : : },
6320 : : {
6321 : : .name = "events.local",
6322 : : .flags = CFTYPE_NOT_ON_ROOT,
6323 : : .file_offset = offsetof(struct mem_cgroup, events_local_file),
6324 : : .seq_show = memory_events_local_show,
6325 : : },
6326 : : {
6327 : : .name = "stat",
6328 : : .flags = CFTYPE_NOT_ON_ROOT,
6329 : : .seq_show = memory_stat_show,
6330 : : },
6331 : : {
6332 : : .name = "oom.group",
6333 : : .flags = CFTYPE_NOT_ON_ROOT | CFTYPE_NS_DELEGATABLE,
6334 : : .seq_show = memory_oom_group_show,
6335 : : .write = memory_oom_group_write,
6336 : : },
6337 : : { } /* terminate */
6338 : : };
6339 : :
6340 : : struct cgroup_subsys memory_cgrp_subsys = {
6341 : : .css_alloc = mem_cgroup_css_alloc,
6342 : : .css_online = mem_cgroup_css_online,
6343 : : .css_offline = mem_cgroup_css_offline,
6344 : : .css_released = mem_cgroup_css_released,
6345 : : .css_free = mem_cgroup_css_free,
6346 : : .css_reset = mem_cgroup_css_reset,
6347 : : .can_attach = mem_cgroup_can_attach,
6348 : : .cancel_attach = mem_cgroup_cancel_attach,
6349 : : .post_attach = mem_cgroup_move_task,
6350 : : .bind = mem_cgroup_bind,
6351 : : .dfl_cftypes = memory_files,
6352 : : .legacy_cftypes = mem_cgroup_legacy_files,
6353 : : .early_init = 0,
6354 : : };
6355 : :
6356 : : /**
6357 : : * mem_cgroup_protected - check if memory consumption is in the normal range
6358 : : * @root: the top ancestor of the sub-tree being checked
6359 : : * @memcg: the memory cgroup to check
6360 : : *
6361 : : * WARNING: This function is not stateless! It can only be used as part
6362 : : * of a top-down tree iteration, not for isolated queries.
6363 : : *
6364 : : * Returns one of the following:
6365 : : * MEMCG_PROT_NONE: cgroup memory is not protected
6366 : : * MEMCG_PROT_LOW: cgroup memory is protected as long there is
6367 : : * an unprotected supply of reclaimable memory from other cgroups.
6368 : : * MEMCG_PROT_MIN: cgroup memory is protected
6369 : : *
6370 : : * @root is exclusive; it is never protected when looked at directly
6371 : : *
6372 : : * To provide a proper hierarchical behavior, effective memory.min/low values
6373 : : * are used. Below is the description of how effective memory.low is calculated.
6374 : : * Effective memory.min values is calculated in the same way.
6375 : : *
6376 : : * Effective memory.low is always equal or less than the original memory.low.
6377 : : * If there is no memory.low overcommittment (which is always true for
6378 : : * top-level memory cgroups), these two values are equal.
6379 : : * Otherwise, it's a part of parent's effective memory.low,
6380 : : * calculated as a cgroup's memory.low usage divided by sum of sibling's
6381 : : * memory.low usages, where memory.low usage is the size of actually
6382 : : * protected memory.
6383 : : *
6384 : : * low_usage
6385 : : * elow = min( memory.low, parent->elow * ------------------ ),
6386 : : * siblings_low_usage
6387 : : *
6388 : : * | memory.current, if memory.current < memory.low
6389 : : * low_usage = |
6390 : : * | 0, otherwise.
6391 : : *
6392 : : *
6393 : : * Such definition of the effective memory.low provides the expected
6394 : : * hierarchical behavior: parent's memory.low value is limiting
6395 : : * children, unprotected memory is reclaimed first and cgroups,
6396 : : * which are not using their guarantee do not affect actual memory
6397 : : * distribution.
6398 : : *
6399 : : * For example, if there are memcgs A, A/B, A/C, A/D and A/E:
6400 : : *
6401 : : * A A/memory.low = 2G, A/memory.current = 6G
6402 : : * //\\
6403 : : * BC DE B/memory.low = 3G B/memory.current = 2G
6404 : : * C/memory.low = 1G C/memory.current = 2G
6405 : : * D/memory.low = 0 D/memory.current = 2G
6406 : : * E/memory.low = 10G E/memory.current = 0
6407 : : *
6408 : : * and the memory pressure is applied, the following memory distribution
6409 : : * is expected (approximately):
6410 : : *
6411 : : * A/memory.current = 2G
6412 : : *
6413 : : * B/memory.current = 1.3G
6414 : : * C/memory.current = 0.6G
6415 : : * D/memory.current = 0
6416 : : * E/memory.current = 0
6417 : : *
6418 : : * These calculations require constant tracking of the actual low usages
6419 : : * (see propagate_protected_usage()), as well as recursive calculation of
6420 : : * effective memory.low values. But as we do call mem_cgroup_protected()
6421 : : * path for each memory cgroup top-down from the reclaim,
6422 : : * it's possible to optimize this part, and save calculated elow
6423 : : * for next usage. This part is intentionally racy, but it's ok,
6424 : : * as memory.low is a best-effort mechanism.
6425 : : */
6426 : 0 : enum mem_cgroup_protection mem_cgroup_protected(struct mem_cgroup *root,
6427 : : struct mem_cgroup *memcg)
6428 : : {
6429 : : struct mem_cgroup *parent;
6430 : : unsigned long emin, parent_emin;
6431 : : unsigned long elow, parent_elow;
6432 : : unsigned long usage;
6433 : :
6434 [ # # ]: 0 : if (mem_cgroup_disabled())
6435 : : return MEMCG_PROT_NONE;
6436 : :
6437 [ # # ]: 0 : if (!root)
6438 : 0 : root = root_mem_cgroup;
6439 [ # # ]: 0 : if (memcg == root)
6440 : : return MEMCG_PROT_NONE;
6441 : :
6442 : : usage = page_counter_read(&memcg->memory);
6443 [ # # ]: 0 : if (!usage)
6444 : : return MEMCG_PROT_NONE;
6445 : :
6446 : 0 : emin = memcg->memory.min;
6447 : 0 : elow = memcg->memory.low;
6448 : :
6449 : : parent = parent_mem_cgroup(memcg);
6450 : : /* No parent means a non-hierarchical mode on v1 memcg */
6451 [ # # ]: 0 : if (!parent)
6452 : : return MEMCG_PROT_NONE;
6453 : :
6454 [ # # ]: 0 : if (parent == root)
6455 : : goto exit;
6456 : :
6457 : : parent_emin = READ_ONCE(parent->memory.emin);
6458 : 0 : emin = min(emin, parent_emin);
6459 [ # # ]: 0 : if (emin && parent_emin) {
6460 : : unsigned long min_usage, siblings_min_usage;
6461 : :
6462 : 0 : min_usage = min(usage, memcg->memory.min);
6463 : 0 : siblings_min_usage = atomic_long_read(
6464 : : &parent->memory.children_min_usage);
6465 : :
6466 [ # # ]: 0 : if (min_usage && siblings_min_usage)
6467 : 0 : emin = min(emin, parent_emin * min_usage /
6468 : : siblings_min_usage);
6469 : : }
6470 : :
6471 : : parent_elow = READ_ONCE(parent->memory.elow);
6472 : 0 : elow = min(elow, parent_elow);
6473 [ # # ]: 0 : if (elow && parent_elow) {
6474 : : unsigned long low_usage, siblings_low_usage;
6475 : :
6476 : 0 : low_usage = min(usage, memcg->memory.low);
6477 : 0 : siblings_low_usage = atomic_long_read(
6478 : : &parent->memory.children_low_usage);
6479 : :
6480 [ # # ]: 0 : if (low_usage && siblings_low_usage)
6481 : 0 : elow = min(elow, parent_elow * low_usage /
6482 : : siblings_low_usage);
6483 : : }
6484 : :
6485 : : exit:
6486 : 0 : memcg->memory.emin = emin;
6487 : 0 : memcg->memory.elow = elow;
6488 : :
6489 [ # # ]: 0 : if (usage <= emin)
6490 : : return MEMCG_PROT_MIN;
6491 [ # # ]: 0 : else if (usage <= elow)
6492 : : return MEMCG_PROT_LOW;
6493 : : else
6494 : 0 : return MEMCG_PROT_NONE;
6495 : : }
6496 : :
6497 : : /**
6498 : : * mem_cgroup_try_charge - try charging a page
6499 : : * @page: page to charge
6500 : : * @mm: mm context of the victim
6501 : : * @gfp_mask: reclaim mode
6502 : : * @memcgp: charged memcg return
6503 : : * @compound: charge the page as compound or small page
6504 : : *
6505 : : * Try to charge @page to the memcg that @mm belongs to, reclaiming
6506 : : * pages according to @gfp_mask if necessary.
6507 : : *
6508 : : * Returns 0 on success, with *@memcgp pointing to the charged memcg.
6509 : : * Otherwise, an error code is returned.
6510 : : *
6511 : : * After page->mapping has been set up, the caller must finalize the
6512 : : * charge with mem_cgroup_commit_charge(). Or abort the transaction
6513 : : * with mem_cgroup_cancel_charge() in case page instantiation fails.
6514 : : */
6515 : 28441855 : int mem_cgroup_try_charge(struct page *page, struct mm_struct *mm,
6516 : : gfp_t gfp_mask, struct mem_cgroup **memcgp,
6517 : : bool compound)
6518 : : {
6519 : : struct mem_cgroup *memcg = NULL;
6520 : : unsigned int nr_pages = compound ? hpage_nr_pages(page) : 1;
6521 : : int ret = 0;
6522 : :
6523 [ - + ]: 28438711 : if (mem_cgroup_disabled())
6524 : : goto out;
6525 : :
6526 [ # # ]: 0 : if (PageSwapCache(page)) {
6527 : : /*
6528 : : * Every swap fault against a single page tries to charge the
6529 : : * page, bail as early as possible. shmem_unuse() encounters
6530 : : * already charged pages, too. The USED bit is protected by
6531 : : * the page lock, which serializes swap cache removal, which
6532 : : * in turn serializes uncharging.
6533 : : */
6534 : : VM_BUG_ON_PAGE(!PageLocked(page), page);
6535 [ # # ]: 0 : if (compound_head(page)->mem_cgroup)
6536 : : goto out;
6537 : :
6538 : : if (do_swap_account) {
6539 : : swp_entry_t ent = { .val = page_private(page), };
6540 : : unsigned short id = lookup_swap_cgroup_id(ent);
6541 : :
6542 : : rcu_read_lock();
6543 : : memcg = mem_cgroup_from_id(id);
6544 : : if (memcg && !css_tryget_online(&memcg->css))
6545 : : memcg = NULL;
6546 : : rcu_read_unlock();
6547 : : }
6548 : : }
6549 : :
6550 : : if (!memcg)
6551 : 0 : memcg = get_mem_cgroup_from_mm(mm);
6552 : :
6553 : 0 : ret = try_charge(memcg, gfp_mask, nr_pages);
6554 : :
6555 : : css_put(&memcg->css);
6556 : : out:
6557 : 28438711 : *memcgp = memcg;
6558 : 28438711 : return ret;
6559 : : }
6560 : :
6561 : 20159536 : int mem_cgroup_try_charge_delay(struct page *page, struct mm_struct *mm,
6562 : : gfp_t gfp_mask, struct mem_cgroup **memcgp,
6563 : : bool compound)
6564 : : {
6565 : : struct mem_cgroup *memcg;
6566 : : int ret;
6567 : :
6568 : 20159536 : ret = mem_cgroup_try_charge(page, mm, gfp_mask, memcgp, compound);
6569 : 20149278 : memcg = *memcgp;
6570 : 20149278 : mem_cgroup_throttle_swaprate(memcg, page_to_nid(page), gfp_mask);
6571 : 20160897 : return ret;
6572 : : }
6573 : :
6574 : : /**
6575 : : * mem_cgroup_commit_charge - commit a page charge
6576 : : * @page: page to charge
6577 : : * @memcg: memcg to charge the page to
6578 : : * @lrucare: page might be on LRU already
6579 : : * @compound: charge the page as compound or small page
6580 : : *
6581 : : * Finalize a charge transaction started by mem_cgroup_try_charge(),
6582 : : * after page->mapping has been set up. This must happen atomically
6583 : : * as part of the page instantiation, i.e. under the page table lock
6584 : : * for anonymous pages, under the page lock for page and swap cache.
6585 : : *
6586 : : * In addition, the page must not be on the LRU during the commit, to
6587 : : * prevent racing with task migration. If it might be, use @lrucare.
6588 : : *
6589 : : * Use mem_cgroup_cancel_charge() to cancel the transaction instead.
6590 : : */
6591 : 28356377 : void mem_cgroup_commit_charge(struct page *page, struct mem_cgroup *memcg,
6592 : : bool lrucare, bool compound)
6593 : : {
6594 : : unsigned int nr_pages = compound ? hpage_nr_pages(page) : 1;
6595 : :
6596 : : VM_BUG_ON_PAGE(!page->mapping, page);
6597 : : VM_BUG_ON_PAGE(PageLRU(page) && !lrucare, page);
6598 : :
6599 [ - + ]: 28355478 : if (mem_cgroup_disabled())
6600 : : return;
6601 : : /*
6602 : : * Swap faults will attempt to charge the same page multiple
6603 : : * times. But reuse_swap_page() might have removed the page
6604 : : * from swapcache already, so we can't check PageSwapCache().
6605 : : */
6606 [ # # ]: 0 : if (!memcg)
6607 : : return;
6608 : :
6609 : 0 : commit_charge(page, memcg, lrucare);
6610 : :
6611 : 0 : local_irq_disable();
6612 : 0 : mem_cgroup_charge_statistics(memcg, page, compound, nr_pages);
6613 : 0 : memcg_check_events(memcg, page);
6614 : 0 : local_irq_enable();
6615 : :
6616 : : if (do_memsw_account() && PageSwapCache(page)) {
6617 : : swp_entry_t entry = { .val = page_private(page) };
6618 : : /*
6619 : : * The swap entry might not get freed for a long time,
6620 : : * let's not wait for it. The page already received a
6621 : : * memory+swap charge, drop the swap entry duplicate.
6622 : : */
6623 : : mem_cgroup_uncharge_swap(entry, nr_pages);
6624 : : }
6625 : : }
6626 : :
6627 : : /**
6628 : : * mem_cgroup_cancel_charge - cancel a page charge
6629 : : * @page: page to charge
6630 : : * @memcg: memcg to charge the page to
6631 : : * @compound: charge the page as compound or small page
6632 : : *
6633 : : * Cancel a charge transaction started by mem_cgroup_try_charge().
6634 : : */
6635 : 82628 : void mem_cgroup_cancel_charge(struct page *page, struct mem_cgroup *memcg,
6636 : : bool compound)
6637 : : {
6638 : : unsigned int nr_pages = compound ? hpage_nr_pages(page) : 1;
6639 : :
6640 [ - + ]: 82618 : if (mem_cgroup_disabled())
6641 : : return;
6642 : : /*
6643 : : * Swap faults will attempt to charge the same page multiple
6644 : : * times. But reuse_swap_page() might have removed the page
6645 : : * from swapcache already, so we can't check PageSwapCache().
6646 : : */
6647 [ # # ]: 0 : if (!memcg)
6648 : : return;
6649 : :
6650 : 0 : cancel_charge(memcg, nr_pages);
6651 : : }
6652 : :
6653 : : struct uncharge_gather {
6654 : : struct mem_cgroup *memcg;
6655 : : unsigned long pgpgout;
6656 : : unsigned long nr_anon;
6657 : : unsigned long nr_file;
6658 : : unsigned long nr_kmem;
6659 : : unsigned long nr_huge;
6660 : : unsigned long nr_shmem;
6661 : : struct page *dummy_page;
6662 : : };
6663 : :
6664 : : static inline void uncharge_gather_clear(struct uncharge_gather *ug)
6665 : : {
6666 : 0 : memset(ug, 0, sizeof(*ug));
6667 : : }
6668 : :
6669 : 0 : static void uncharge_batch(const struct uncharge_gather *ug)
6670 : : {
6671 : 0 : unsigned long nr_pages = ug->nr_anon + ug->nr_file + ug->nr_kmem;
6672 : : unsigned long flags;
6673 : :
6674 [ # # ]: 0 : if (!mem_cgroup_is_root(ug->memcg)) {
6675 : 0 : page_counter_uncharge(&ug->memcg->memory, nr_pages);
6676 : : if (do_memsw_account())
6677 : : page_counter_uncharge(&ug->memcg->memsw, nr_pages);
6678 [ # # # # ]: 0 : if (!cgroup_subsys_on_dfl(memory_cgrp_subsys) && ug->nr_kmem)
6679 : 0 : page_counter_uncharge(&ug->memcg->kmem, ug->nr_kmem);
6680 : 0 : memcg_oom_recover(ug->memcg);
6681 : : }
6682 : :
6683 : 0 : local_irq_save(flags);
6684 : 0 : __mod_memcg_state(ug->memcg, MEMCG_RSS, -ug->nr_anon);
6685 : 0 : __mod_memcg_state(ug->memcg, MEMCG_CACHE, -ug->nr_file);
6686 : 0 : __mod_memcg_state(ug->memcg, MEMCG_RSS_HUGE, -ug->nr_huge);
6687 : 0 : __mod_memcg_state(ug->memcg, NR_SHMEM, -ug->nr_shmem);
6688 : 0 : __count_memcg_events(ug->memcg, PGPGOUT, ug->pgpgout);
6689 : 0 : __this_cpu_add(ug->memcg->vmstats_percpu->nr_page_events, nr_pages);
6690 : 0 : memcg_check_events(ug->memcg, ug->dummy_page);
6691 [ # # ]: 0 : local_irq_restore(flags);
6692 : :
6693 [ # # ]: 0 : if (!mem_cgroup_is_root(ug->memcg))
6694 : : css_put_many(&ug->memcg->css, nr_pages);
6695 : 0 : }
6696 : :
6697 : 0 : static void uncharge_page(struct page *page, struct uncharge_gather *ug)
6698 : : {
6699 : : VM_BUG_ON_PAGE(PageLRU(page), page);
6700 : : VM_BUG_ON_PAGE(page_count(page) && !is_zone_device_page(page) &&
6701 : : !PageHWPoison(page) , page);
6702 : :
6703 [ # # ]: 0 : if (!page->mem_cgroup)
6704 : 0 : return;
6705 : :
6706 : : /*
6707 : : * Nobody should be changing or seriously looking at
6708 : : * page->mem_cgroup at this point, we have fully
6709 : : * exclusive access to the page.
6710 : : */
6711 : :
6712 [ # # ]: 0 : if (ug->memcg != page->mem_cgroup) {
6713 [ # # ]: 0 : if (ug->memcg) {
6714 : 0 : uncharge_batch(ug);
6715 : : uncharge_gather_clear(ug);
6716 : : }
6717 : 0 : ug->memcg = page->mem_cgroup;
6718 : : }
6719 : :
6720 [ # # ]: 0 : if (!PageKmemcg(page)) {
6721 : : unsigned int nr_pages = 1;
6722 : :
6723 : : if (PageTransHuge(page)) {
6724 : : nr_pages = compound_nr(page);
6725 : : ug->nr_huge += nr_pages;
6726 : : }
6727 [ # # ]: 0 : if (PageAnon(page))
6728 : 0 : ug->nr_anon += nr_pages;
6729 : : else {
6730 : 0 : ug->nr_file += nr_pages;
6731 [ # # ]: 0 : if (PageSwapBacked(page))
6732 : 0 : ug->nr_shmem += nr_pages;
6733 : : }
6734 : 0 : ug->pgpgout++;
6735 : : } else {
6736 : 0 : ug->nr_kmem += compound_nr(page);
6737 : : __ClearPageKmemcg(page);
6738 : : }
6739 : :
6740 : 0 : ug->dummy_page = page;
6741 : 0 : page->mem_cgroup = NULL;
6742 : : }
6743 : :
6744 : 0 : static void uncharge_list(struct list_head *page_list)
6745 : : {
6746 : : struct uncharge_gather ug;
6747 : : struct list_head *next;
6748 : :
6749 : : uncharge_gather_clear(&ug);
6750 : :
6751 : : /*
6752 : : * Note that the list can be a single page->lru; hence the
6753 : : * do-while loop instead of a simple list_for_each_entry().
6754 : : */
6755 : 0 : next = page_list->next;
6756 : : do {
6757 : : struct page *page;
6758 : :
6759 : 0 : page = list_entry(next, struct page, lru);
6760 : 0 : next = page->lru.next;
6761 : :
6762 : 0 : uncharge_page(page, &ug);
6763 [ # # ]: 0 : } while (next != page_list);
6764 : :
6765 [ # # ]: 0 : if (ug.memcg)
6766 : 0 : uncharge_batch(&ug);
6767 : 0 : }
6768 : :
6769 : : /**
6770 : : * mem_cgroup_uncharge - uncharge a page
6771 : : * @page: page to uncharge
6772 : : *
6773 : : * Uncharge a page previously charged with mem_cgroup_try_charge() and
6774 : : * mem_cgroup_commit_charge().
6775 : : */
6776 : 102633 : void mem_cgroup_uncharge(struct page *page)
6777 : : {
6778 : : struct uncharge_gather ug;
6779 : :
6780 [ - + ]: 102640 : if (mem_cgroup_disabled())
6781 : 102640 : return;
6782 : :
6783 : : /* Don't touch page->lru of any random page, pre-check: */
6784 [ # # ]: 0 : if (!page->mem_cgroup)
6785 : : return;
6786 : :
6787 : : uncharge_gather_clear(&ug);
6788 : 0 : uncharge_page(page, &ug);
6789 : 0 : uncharge_batch(&ug);
6790 : : }
6791 : :
6792 : : /**
6793 : : * mem_cgroup_uncharge_list - uncharge a list of page
6794 : : * @page_list: list of pages to uncharge
6795 : : *
6796 : : * Uncharge a list of pages previously charged with
6797 : : * mem_cgroup_try_charge() and mem_cgroup_commit_charge().
6798 : : */
6799 : 6891332 : void mem_cgroup_uncharge_list(struct list_head *page_list)
6800 : : {
6801 [ - + ]: 6891434 : if (mem_cgroup_disabled())
6802 : 6891434 : return;
6803 : :
6804 [ # # ]: 0 : if (!list_empty(page_list))
6805 : 0 : uncharge_list(page_list);
6806 : : }
6807 : :
6808 : : /**
6809 : : * mem_cgroup_migrate - charge a page's replacement
6810 : : * @oldpage: currently circulating page
6811 : : * @newpage: replacement page
6812 : : *
6813 : : * Charge @newpage as a replacement page for @oldpage. @oldpage will
6814 : : * be uncharged upon free.
6815 : : *
6816 : : * Both pages must be locked, @newpage->mapping must be set up.
6817 : : */
6818 : 0 : void mem_cgroup_migrate(struct page *oldpage, struct page *newpage)
6819 : : {
6820 : : struct mem_cgroup *memcg;
6821 : : unsigned int nr_pages;
6822 : : bool compound;
6823 : : unsigned long flags;
6824 : :
6825 : : VM_BUG_ON_PAGE(!PageLocked(oldpage), oldpage);
6826 : : VM_BUG_ON_PAGE(!PageLocked(newpage), newpage);
6827 : : VM_BUG_ON_PAGE(PageAnon(oldpage) != PageAnon(newpage), newpage);
6828 : : VM_BUG_ON_PAGE(PageTransHuge(oldpage) != PageTransHuge(newpage),
6829 : : newpage);
6830 : :
6831 [ # # ]: 0 : if (mem_cgroup_disabled())
6832 : : return;
6833 : :
6834 : : /* Page cache replacement: new page already charged? */
6835 [ # # ]: 0 : if (newpage->mem_cgroup)
6836 : : return;
6837 : :
6838 : : /* Swapcache readahead pages can get replaced before being charged */
6839 : 0 : memcg = oldpage->mem_cgroup;
6840 [ # # ]: 0 : if (!memcg)
6841 : : return;
6842 : :
6843 : : /* Force-charge the new page. The old one will be freed soon */
6844 : : compound = PageTransHuge(newpage);
6845 : : nr_pages = compound ? hpage_nr_pages(newpage) : 1;
6846 : :
6847 : 0 : page_counter_charge(&memcg->memory, nr_pages);
6848 : : if (do_memsw_account())
6849 : : page_counter_charge(&memcg->memsw, nr_pages);
6850 : : css_get_many(&memcg->css, nr_pages);
6851 : :
6852 : 0 : commit_charge(newpage, memcg, false);
6853 : :
6854 : 0 : local_irq_save(flags);
6855 : 0 : mem_cgroup_charge_statistics(memcg, newpage, compound, nr_pages);
6856 : 0 : memcg_check_events(memcg, newpage);
6857 [ # # ]: 0 : local_irq_restore(flags);
6858 : : }
6859 : :
6860 : : DEFINE_STATIC_KEY_FALSE(memcg_sockets_enabled_key);
6861 : : EXPORT_SYMBOL(memcg_sockets_enabled_key);
6862 : :
6863 : 207858 : void mem_cgroup_sk_alloc(struct sock *sk)
6864 : : {
6865 : : struct mem_cgroup *memcg;
6866 : :
6867 [ - + ]: 207845 : if (!mem_cgroup_sockets_enabled)
6868 : : return;
6869 : :
6870 : : /* Do not associate the sock with unrelated interrupted task's memcg. */
6871 [ # # ]: 0 : if (in_interrupt())
6872 : : return;
6873 : :
6874 : : rcu_read_lock();
6875 : 0 : memcg = mem_cgroup_from_task(current);
6876 [ # # ]: 0 : if (memcg == root_mem_cgroup)
6877 : : goto out;
6878 [ # # # # ]: 0 : if (!cgroup_subsys_on_dfl(memory_cgrp_subsys) && !memcg->tcpmem_active)
6879 : : goto out;
6880 [ # # ]: 0 : if (css_tryget_online(&memcg->css))
6881 : 0 : sk->sk_memcg = memcg;
6882 : : out:
6883 : : rcu_read_unlock();
6884 : : }
6885 : :
6886 : 159225 : void mem_cgroup_sk_free(struct sock *sk)
6887 : : {
6888 [ - + ]: 159225 : if (sk->sk_memcg)
6889 : : css_put(&sk->sk_memcg->css);
6890 : 159225 : }
6891 : :
6892 : : /**
6893 : : * mem_cgroup_charge_skmem - charge socket memory
6894 : : * @memcg: memcg to charge
6895 : : * @nr_pages: number of pages to charge
6896 : : *
6897 : : * Charges @nr_pages to @memcg. Returns %true if the charge fit within
6898 : : * @memcg's configured limit, %false if the charge had to be forced.
6899 : : */
6900 : 0 : bool mem_cgroup_charge_skmem(struct mem_cgroup *memcg, unsigned int nr_pages)
6901 : : {
6902 : : gfp_t gfp_mask = GFP_KERNEL;
6903 : :
6904 [ # # ]: 0 : if (!cgroup_subsys_on_dfl(memory_cgrp_subsys)) {
6905 : : struct page_counter *fail;
6906 : :
6907 [ # # ]: 0 : if (page_counter_try_charge(&memcg->tcpmem, nr_pages, &fail)) {
6908 : 0 : memcg->tcpmem_pressure = 0;
6909 : 0 : return true;
6910 : : }
6911 : 0 : page_counter_charge(&memcg->tcpmem, nr_pages);
6912 : 0 : memcg->tcpmem_pressure = 1;
6913 : 0 : return false;
6914 : : }
6915 : :
6916 : : /* Don't block in the packet receive path */
6917 [ # # ]: 0 : if (in_softirq())
6918 : : gfp_mask = GFP_NOWAIT;
6919 : :
6920 : 0 : mod_memcg_state(memcg, MEMCG_SOCK, nr_pages);
6921 : :
6922 [ # # ]: 0 : if (try_charge(memcg, gfp_mask, nr_pages) == 0)
6923 : : return true;
6924 : :
6925 : 0 : try_charge(memcg, gfp_mask|__GFP_NOFAIL, nr_pages);
6926 : 0 : return false;
6927 : : }
6928 : :
6929 : : /**
6930 : : * mem_cgroup_uncharge_skmem - uncharge socket memory
6931 : : * @memcg: memcg to uncharge
6932 : : * @nr_pages: number of pages to uncharge
6933 : : */
6934 : 0 : void mem_cgroup_uncharge_skmem(struct mem_cgroup *memcg, unsigned int nr_pages)
6935 : : {
6936 [ # # ]: 0 : if (!cgroup_subsys_on_dfl(memory_cgrp_subsys)) {
6937 : 0 : page_counter_uncharge(&memcg->tcpmem, nr_pages);
6938 : 0 : return;
6939 : : }
6940 : :
6941 : 0 : mod_memcg_state(memcg, MEMCG_SOCK, -nr_pages);
6942 : :
6943 : 0 : refill_stock(memcg, nr_pages);
6944 : : }
6945 : :
6946 : 0 : static int __init cgroup_memory(char *s)
6947 : : {
6948 : : char *token;
6949 : :
6950 [ # # ]: 0 : while ((token = strsep(&s, ",")) != NULL) {
6951 [ # # ]: 0 : if (!*token)
6952 : 0 : continue;
6953 [ # # ]: 0 : if (!strcmp(token, "nosocket"))
6954 : 0 : cgroup_memory_nosocket = true;
6955 [ # # ]: 0 : if (!strcmp(token, "nokmem"))
6956 : 0 : cgroup_memory_nokmem = true;
6957 : : }
6958 : 0 : return 0;
6959 : : }
6960 : : __setup("cgroup.memory=", cgroup_memory);
6961 : :
6962 : : /*
6963 : : * subsys_initcall() for memory controller.
6964 : : *
6965 : : * Some parts like memcg_hotplug_cpu_dead() have to be initialized from this
6966 : : * context because of lock dependencies (cgroup_lock -> cpu hotplug) but
6967 : : * basically everything that doesn't depend on a specific mem_cgroup structure
6968 : : * should be initialized from here.
6969 : : */
6970 : 207 : static int __init mem_cgroup_init(void)
6971 : : {
6972 : : int cpu, node;
6973 : :
6974 : : #ifdef CONFIG_MEMCG_KMEM
6975 : : /*
6976 : : * Kmem cache creation is mostly done with the slab_mutex held,
6977 : : * so use a workqueue with limited concurrency to avoid stalling
6978 : : * all worker threads in case lots of cgroups are created and
6979 : : * destroyed simultaneously.
6980 : : */
6981 : 207 : memcg_kmem_cache_wq = alloc_workqueue("memcg_kmem_cache", 0, 1);
6982 [ - + ]: 207 : BUG_ON(!memcg_kmem_cache_wq);
6983 : : #endif
6984 : :
6985 : : cpuhp_setup_state_nocalls(CPUHP_MM_MEMCQ_DEAD, "mm/memctrl:dead", NULL,
6986 : : memcg_hotplug_cpu_dead);
6987 : :
6988 [ + + ]: 1242 : for_each_possible_cpu(cpu)
6989 : 1656 : INIT_WORK(&per_cpu_ptr(&memcg_stock, cpu)->work,
6990 : : drain_local_stock);
6991 : :
6992 [ + + ]: 414 : for_each_node(node) {
6993 : : struct mem_cgroup_tree_per_node *rtpn;
6994 : :
6995 [ + - ]: 207 : rtpn = kzalloc_node(sizeof(*rtpn), GFP_KERNEL,
6996 : : node_online(node) ? node : NUMA_NO_NODE);
6997 : :
6998 : 207 : rtpn->rb_root = RB_ROOT;
6999 : 207 : rtpn->rb_rightmost = NULL;
7000 : 207 : spin_lock_init(&rtpn->lock);
7001 : 207 : soft_limit_tree.rb_tree_per_node[node] = rtpn;
7002 : : }
7003 : :
7004 : 207 : return 0;
7005 : : }
7006 : : subsys_initcall(mem_cgroup_init);
7007 : :
7008 : : #ifdef CONFIG_MEMCG_SWAP
7009 : : static struct mem_cgroup *mem_cgroup_id_get_online(struct mem_cgroup *memcg)
7010 : : {
7011 : : while (!refcount_inc_not_zero(&memcg->id.ref)) {
7012 : : /*
7013 : : * The root cgroup cannot be destroyed, so it's refcount must
7014 : : * always be >= 1.
7015 : : */
7016 : : if (WARN_ON_ONCE(memcg == root_mem_cgroup)) {
7017 : : VM_BUG_ON(1);
7018 : : break;
7019 : : }
7020 : : memcg = parent_mem_cgroup(memcg);
7021 : : if (!memcg)
7022 : : memcg = root_mem_cgroup;
7023 : : }
7024 : : return memcg;
7025 : : }
7026 : :
7027 : : /**
7028 : : * mem_cgroup_swapout - transfer a memsw charge to swap
7029 : : * @page: page whose memsw charge to transfer
7030 : : * @entry: swap entry to move the charge to
7031 : : *
7032 : : * Transfer the memsw charge of @page to @entry.
7033 : : */
7034 : : void mem_cgroup_swapout(struct page *page, swp_entry_t entry)
7035 : : {
7036 : : struct mem_cgroup *memcg, *swap_memcg;
7037 : : unsigned int nr_entries;
7038 : : unsigned short oldid;
7039 : :
7040 : : VM_BUG_ON_PAGE(PageLRU(page), page);
7041 : : VM_BUG_ON_PAGE(page_count(page), page);
7042 : :
7043 : : if (!do_memsw_account())
7044 : : return;
7045 : :
7046 : : memcg = page->mem_cgroup;
7047 : :
7048 : : /* Readahead page, never charged */
7049 : : if (!memcg)
7050 : : return;
7051 : :
7052 : : /*
7053 : : * In case the memcg owning these pages has been offlined and doesn't
7054 : : * have an ID allocated to it anymore, charge the closest online
7055 : : * ancestor for the swap instead and transfer the memory+swap charge.
7056 : : */
7057 : : swap_memcg = mem_cgroup_id_get_online(memcg);
7058 : : nr_entries = hpage_nr_pages(page);
7059 : : /* Get references for the tail pages, too */
7060 : : if (nr_entries > 1)
7061 : : mem_cgroup_id_get_many(swap_memcg, nr_entries - 1);
7062 : : oldid = swap_cgroup_record(entry, mem_cgroup_id(swap_memcg),
7063 : : nr_entries);
7064 : : VM_BUG_ON_PAGE(oldid, page);
7065 : : mod_memcg_state(swap_memcg, MEMCG_SWAP, nr_entries);
7066 : :
7067 : : page->mem_cgroup = NULL;
7068 : :
7069 : : if (!mem_cgroup_is_root(memcg))
7070 : : page_counter_uncharge(&memcg->memory, nr_entries);
7071 : :
7072 : : if (memcg != swap_memcg) {
7073 : : if (!mem_cgroup_is_root(swap_memcg))
7074 : : page_counter_charge(&swap_memcg->memsw, nr_entries);
7075 : : page_counter_uncharge(&memcg->memsw, nr_entries);
7076 : : }
7077 : :
7078 : : /*
7079 : : * Interrupts should be disabled here because the caller holds the
7080 : : * i_pages lock which is taken with interrupts-off. It is
7081 : : * important here to have the interrupts disabled because it is the
7082 : : * only synchronisation we have for updating the per-CPU variables.
7083 : : */
7084 : : VM_BUG_ON(!irqs_disabled());
7085 : : mem_cgroup_charge_statistics(memcg, page, PageTransHuge(page),
7086 : : -nr_entries);
7087 : : memcg_check_events(memcg, page);
7088 : :
7089 : : if (!mem_cgroup_is_root(memcg))
7090 : : css_put_many(&memcg->css, nr_entries);
7091 : : }
7092 : :
7093 : : /**
7094 : : * mem_cgroup_try_charge_swap - try charging swap space for a page
7095 : : * @page: page being added to swap
7096 : : * @entry: swap entry to charge
7097 : : *
7098 : : * Try to charge @page's memcg for the swap space at @entry.
7099 : : *
7100 : : * Returns 0 on success, -ENOMEM on failure.
7101 : : */
7102 : : int mem_cgroup_try_charge_swap(struct page *page, swp_entry_t entry)
7103 : : {
7104 : : unsigned int nr_pages = hpage_nr_pages(page);
7105 : : struct page_counter *counter;
7106 : : struct mem_cgroup *memcg;
7107 : : unsigned short oldid;
7108 : :
7109 : : if (!cgroup_subsys_on_dfl(memory_cgrp_subsys) || !do_swap_account)
7110 : : return 0;
7111 : :
7112 : : memcg = page->mem_cgroup;
7113 : :
7114 : : /* Readahead page, never charged */
7115 : : if (!memcg)
7116 : : return 0;
7117 : :
7118 : : if (!entry.val) {
7119 : : memcg_memory_event(memcg, MEMCG_SWAP_FAIL);
7120 : : return 0;
7121 : : }
7122 : :
7123 : : memcg = mem_cgroup_id_get_online(memcg);
7124 : :
7125 : : if (!mem_cgroup_is_root(memcg) &&
7126 : : !page_counter_try_charge(&memcg->swap, nr_pages, &counter)) {
7127 : : memcg_memory_event(memcg, MEMCG_SWAP_MAX);
7128 : : memcg_memory_event(memcg, MEMCG_SWAP_FAIL);
7129 : : mem_cgroup_id_put(memcg);
7130 : : return -ENOMEM;
7131 : : }
7132 : :
7133 : : /* Get references for the tail pages, too */
7134 : : if (nr_pages > 1)
7135 : : mem_cgroup_id_get_many(memcg, nr_pages - 1);
7136 : : oldid = swap_cgroup_record(entry, mem_cgroup_id(memcg), nr_pages);
7137 : : VM_BUG_ON_PAGE(oldid, page);
7138 : : mod_memcg_state(memcg, MEMCG_SWAP, nr_pages);
7139 : :
7140 : : return 0;
7141 : : }
7142 : :
7143 : : /**
7144 : : * mem_cgroup_uncharge_swap - uncharge swap space
7145 : : * @entry: swap entry to uncharge
7146 : : * @nr_pages: the amount of swap space to uncharge
7147 : : */
7148 : : void mem_cgroup_uncharge_swap(swp_entry_t entry, unsigned int nr_pages)
7149 : : {
7150 : : struct mem_cgroup *memcg;
7151 : : unsigned short id;
7152 : :
7153 : : if (!do_swap_account)
7154 : : return;
7155 : :
7156 : : id = swap_cgroup_record(entry, 0, nr_pages);
7157 : : rcu_read_lock();
7158 : : memcg = mem_cgroup_from_id(id);
7159 : : if (memcg) {
7160 : : if (!mem_cgroup_is_root(memcg)) {
7161 : : if (cgroup_subsys_on_dfl(memory_cgrp_subsys))
7162 : : page_counter_uncharge(&memcg->swap, nr_pages);
7163 : : else
7164 : : page_counter_uncharge(&memcg->memsw, nr_pages);
7165 : : }
7166 : : mod_memcg_state(memcg, MEMCG_SWAP, -nr_pages);
7167 : : mem_cgroup_id_put_many(memcg, nr_pages);
7168 : : }
7169 : : rcu_read_unlock();
7170 : : }
7171 : :
7172 : : long mem_cgroup_get_nr_swap_pages(struct mem_cgroup *memcg)
7173 : : {
7174 : : long nr_swap_pages = get_nr_swap_pages();
7175 : :
7176 : : if (!do_swap_account || !cgroup_subsys_on_dfl(memory_cgrp_subsys))
7177 : : return nr_swap_pages;
7178 : : for (; memcg != root_mem_cgroup; memcg = parent_mem_cgroup(memcg))
7179 : : nr_swap_pages = min_t(long, nr_swap_pages,
7180 : : READ_ONCE(memcg->swap.max) -
7181 : : page_counter_read(&memcg->swap));
7182 : : return nr_swap_pages;
7183 : : }
7184 : :
7185 : : bool mem_cgroup_swap_full(struct page *page)
7186 : : {
7187 : : struct mem_cgroup *memcg;
7188 : :
7189 : : VM_BUG_ON_PAGE(!PageLocked(page), page);
7190 : :
7191 : : if (vm_swap_full())
7192 : : return true;
7193 : : if (!do_swap_account || !cgroup_subsys_on_dfl(memory_cgrp_subsys))
7194 : : return false;
7195 : :
7196 : : memcg = page->mem_cgroup;
7197 : : if (!memcg)
7198 : : return false;
7199 : :
7200 : : for (; memcg != root_mem_cgroup; memcg = parent_mem_cgroup(memcg))
7201 : : if (page_counter_read(&memcg->swap) * 2 >= memcg->swap.max)
7202 : : return true;
7203 : :
7204 : : return false;
7205 : : }
7206 : :
7207 : : /* for remember boot option*/
7208 : : #ifdef CONFIG_MEMCG_SWAP_ENABLED
7209 : : static int really_do_swap_account __initdata = 1;
7210 : : #else
7211 : : static int really_do_swap_account __initdata;
7212 : : #endif
7213 : :
7214 : : static int __init enable_swap_account(char *s)
7215 : : {
7216 : : if (!strcmp(s, "1"))
7217 : : really_do_swap_account = 1;
7218 : : else if (!strcmp(s, "0"))
7219 : : really_do_swap_account = 0;
7220 : : return 1;
7221 : : }
7222 : : __setup("swapaccount=", enable_swap_account);
7223 : :
7224 : : static u64 swap_current_read(struct cgroup_subsys_state *css,
7225 : : struct cftype *cft)
7226 : : {
7227 : : struct mem_cgroup *memcg = mem_cgroup_from_css(css);
7228 : :
7229 : : return (u64)page_counter_read(&memcg->swap) * PAGE_SIZE;
7230 : : }
7231 : :
7232 : : static int swap_max_show(struct seq_file *m, void *v)
7233 : : {
7234 : : return seq_puts_memcg_tunable(m,
7235 : : READ_ONCE(mem_cgroup_from_seq(m)->swap.max));
7236 : : }
7237 : :
7238 : : static ssize_t swap_max_write(struct kernfs_open_file *of,
7239 : : char *buf, size_t nbytes, loff_t off)
7240 : : {
7241 : : struct mem_cgroup *memcg = mem_cgroup_from_css(of_css(of));
7242 : : unsigned long max;
7243 : : int err;
7244 : :
7245 : : buf = strstrip(buf);
7246 : : err = page_counter_memparse(buf, "max", &max);
7247 : : if (err)
7248 : : return err;
7249 : :
7250 : : xchg(&memcg->swap.max, max);
7251 : :
7252 : : return nbytes;
7253 : : }
7254 : :
7255 : : static int swap_events_show(struct seq_file *m, void *v)
7256 : : {
7257 : : struct mem_cgroup *memcg = mem_cgroup_from_seq(m);
7258 : :
7259 : : seq_printf(m, "max %lu\n",
7260 : : atomic_long_read(&memcg->memory_events[MEMCG_SWAP_MAX]));
7261 : : seq_printf(m, "fail %lu\n",
7262 : : atomic_long_read(&memcg->memory_events[MEMCG_SWAP_FAIL]));
7263 : :
7264 : : return 0;
7265 : : }
7266 : :
7267 : : static struct cftype swap_files[] = {
7268 : : {
7269 : : .name = "swap.current",
7270 : : .flags = CFTYPE_NOT_ON_ROOT,
7271 : : .read_u64 = swap_current_read,
7272 : : },
7273 : : {
7274 : : .name = "swap.max",
7275 : : .flags = CFTYPE_NOT_ON_ROOT,
7276 : : .seq_show = swap_max_show,
7277 : : .write = swap_max_write,
7278 : : },
7279 : : {
7280 : : .name = "swap.events",
7281 : : .flags = CFTYPE_NOT_ON_ROOT,
7282 : : .file_offset = offsetof(struct mem_cgroup, swap_events_file),
7283 : : .seq_show = swap_events_show,
7284 : : },
7285 : : { } /* terminate */
7286 : : };
7287 : :
7288 : : static struct cftype memsw_cgroup_files[] = {
7289 : : {
7290 : : .name = "memsw.usage_in_bytes",
7291 : : .private = MEMFILE_PRIVATE(_MEMSWAP, RES_USAGE),
7292 : : .read_u64 = mem_cgroup_read_u64,
7293 : : },
7294 : : {
7295 : : .name = "memsw.max_usage_in_bytes",
7296 : : .private = MEMFILE_PRIVATE(_MEMSWAP, RES_MAX_USAGE),
7297 : : .write = mem_cgroup_reset,
7298 : : .read_u64 = mem_cgroup_read_u64,
7299 : : },
7300 : : {
7301 : : .name = "memsw.limit_in_bytes",
7302 : : .private = MEMFILE_PRIVATE(_MEMSWAP, RES_LIMIT),
7303 : : .write = mem_cgroup_write,
7304 : : .read_u64 = mem_cgroup_read_u64,
7305 : : },
7306 : : {
7307 : : .name = "memsw.failcnt",
7308 : : .private = MEMFILE_PRIVATE(_MEMSWAP, RES_FAILCNT),
7309 : : .write = mem_cgroup_reset,
7310 : : .read_u64 = mem_cgroup_read_u64,
7311 : : },
7312 : : { }, /* terminate */
7313 : : };
7314 : :
7315 : : static int __init mem_cgroup_swap_init(void)
7316 : : {
7317 : : if (!mem_cgroup_disabled() && really_do_swap_account) {
7318 : : do_swap_account = 1;
7319 : : WARN_ON(cgroup_add_dfl_cftypes(&memory_cgrp_subsys,
7320 : : swap_files));
7321 : : WARN_ON(cgroup_add_legacy_cftypes(&memory_cgrp_subsys,
7322 : : memsw_cgroup_files));
7323 : : }
7324 : : return 0;
7325 : : }
7326 : : subsys_initcall(mem_cgroup_swap_init);
7327 : :
7328 : : #endif /* CONFIG_MEMCG_SWAP */
|