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