Symbol: lruvec
include/linux/memcontrol.h
114
struct lruvec lruvec;
include/linux/memcontrol.h
1180
static inline struct lruvec *mem_cgroup_lruvec(struct mem_cgroup *memcg,
include/linux/memcontrol.h
1186
static inline struct lruvec *folio_lruvec(struct folio *folio)
include/linux/memcontrol.h
1246
static inline struct lruvec *folio_lruvec_lock(struct folio *folio)
include/linux/memcontrol.h
1255
static inline struct lruvec *folio_lruvec_lock_irq(struct folio *folio)
include/linux/memcontrol.h
1264
static inline struct lruvec *folio_lruvec_lock_irqsave(struct folio *folio,
include/linux/memcontrol.h
1319
static inline struct mem_cgroup *lruvec_memcg(struct lruvec *lruvec)
include/linux/memcontrol.h
1330
unsigned long mem_cgroup_get_zone_lru_size(struct lruvec *lruvec,
include/linux/memcontrol.h
1396
static inline unsigned long lruvec_page_state(struct lruvec *lruvec,
include/linux/memcontrol.h
1399
return node_page_state(lruvec_pgdat(lruvec), idx);
include/linux/memcontrol.h
1402
static inline unsigned long lruvec_page_state_local(struct lruvec *lruvec,
include/linux/memcontrol.h
1405
return node_page_state(lruvec_pgdat(lruvec), idx);
include/linux/memcontrol.h
1477
static inline struct lruvec *parent_lruvec(struct lruvec *lruvec)
include/linux/memcontrol.h
1481
memcg = lruvec_memcg(lruvec);
include/linux/memcontrol.h
1487
return mem_cgroup_lruvec(memcg, lruvec_pgdat(lruvec));
include/linux/memcontrol.h
1490
static inline void lruvec_lock_irq(struct lruvec *lruvec)
include/linux/memcontrol.h
1493
spin_lock_irq(&lruvec->lru_lock);
include/linux/memcontrol.h
1496
static inline struct lruvec *lruvec_live_lock_irq(struct lruvec *lruvec)
include/linux/memcontrol.h
1499
struct pglist_data *pgdat = lruvec_pgdat(lruvec);
include/linux/memcontrol.h
1500
struct mem_cgroup *memcg = lruvec_memcg(lruvec);
include/linux/memcontrol.h
1510
lruvec = mem_cgroup_lruvec(memcg, pgdat);
include/linux/memcontrol.h
1513
spin_lock_irq(&lruvec->lru_lock);
include/linux/memcontrol.h
1515
lruvec_lock_irq(lruvec);
include/linux/memcontrol.h
1518
return lruvec;
include/linux/memcontrol.h
1521
static inline void lruvec_unlock(struct lruvec *lruvec)
include/linux/memcontrol.h
1523
spin_unlock(&lruvec->lru_lock);
include/linux/memcontrol.h
1527
static inline void lruvec_unlock_irq(struct lruvec *lruvec)
include/linux/memcontrol.h
1529
spin_unlock_irq(&lruvec->lru_lock);
include/linux/memcontrol.h
1533
static inline void lruvec_unlock_irqrestore(struct lruvec *lruvec, unsigned long flags)
include/linux/memcontrol.h
1535
spin_unlock_irqrestore(&lruvec->lru_lock, flags);
include/linux/memcontrol.h
1541
struct lruvec *lruvec)
include/linux/memcontrol.h
1543
return lruvec_pgdat(lruvec) == folio_pgdat(folio) &&
include/linux/memcontrol.h
1544
lruvec_memcg(lruvec) == folio_memcg(folio);
include/linux/memcontrol.h
1548
static inline struct lruvec *folio_lruvec_relock_irq(struct folio *folio,
include/linux/memcontrol.h
1549
struct lruvec *locked_lruvec)
include/linux/memcontrol.h
1563
struct lruvec **lruvecp, unsigned long *flags)
include/linux/memcontrol.h
700
static inline struct lruvec *mem_cgroup_lruvec(struct mem_cgroup *memcg,
include/linux/memcontrol.h
704
struct lruvec *lruvec;
include/linux/memcontrol.h
707
lruvec = &pgdat->__lruvec;
include/linux/memcontrol.h
715
lruvec = &mz->lruvec;
include/linux/memcontrol.h
722
if (unlikely(lruvec->pgdat != pgdat))
include/linux/memcontrol.h
723
lruvec->pgdat = pgdat;
include/linux/memcontrol.h
724
return lruvec;
include/linux/memcontrol.h
741
static inline struct lruvec *folio_lruvec(struct folio *folio)
include/linux/memcontrol.h
757
struct lruvec *folio_lruvec_lock(struct folio *folio);
include/linux/memcontrol.h
758
struct lruvec *folio_lruvec_lock_irq(struct folio *folio);
include/linux/memcontrol.h
759
struct lruvec *folio_lruvec_lock_irqsave(struct folio *folio,
include/linux/memcontrol.h
839
static inline struct mem_cgroup *lruvec_memcg(struct lruvec *lruvec)
include/linux/memcontrol.h
846
mz = container_of(lruvec, struct mem_cgroup_per_node, lruvec);
include/linux/memcontrol.h
893
void mem_cgroup_update_lru_size(struct lruvec *lruvec, enum lru_list lru,
include/linux/memcontrol.h
897
unsigned long mem_cgroup_get_zone_lru_size(struct lruvec *lruvec,
include/linux/memcontrol.h
902
mz = container_of(lruvec, struct mem_cgroup_per_node, lruvec);
include/linux/memcontrol.h
949
unsigned long lruvec_page_state(struct lruvec *lruvec, enum node_stat_item idx);
include/linux/memcontrol.h
950
unsigned long lruvec_page_state_local(struct lruvec *lruvec,
include/linux/mm_inline.h
165
static inline bool lru_gen_is_active(const struct lruvec *lruvec, int gen)
include/linux/mm_inline.h
167
unsigned long max_seq = lruvec->lrugen.max_seq;
include/linux/mm_inline.h
175
static inline void lru_gen_update_size(struct lruvec *lruvec, struct folio *folio,
include/linux/mm_inline.h
182
struct lru_gen_folio *lrugen = &lruvec->lrugen;
include/linux/mm_inline.h
197
if (lru_gen_is_active(lruvec, new_gen))
include/linux/mm_inline.h
199
__update_lru_size(lruvec, lru, zone, delta);
include/linux/mm_inline.h
205
if (lru_gen_is_active(lruvec, old_gen))
include/linux/mm_inline.h
207
__update_lru_size(lruvec, lru, zone, -delta);
include/linux/mm_inline.h
212
if (!lru_gen_is_active(lruvec, old_gen) && lru_gen_is_active(lruvec, new_gen)) {
include/linux/mm_inline.h
213
__update_lru_size(lruvec, lru, zone, -delta);
include/linux/mm_inline.h
214
__update_lru_size(lruvec, lru + LRU_ACTIVE, zone, delta);
include/linux/mm_inline.h
218
VM_WARN_ON_ONCE(lru_gen_is_active(lruvec, old_gen) && !lru_gen_is_active(lruvec, new_gen));
include/linux/mm_inline.h
221
static inline unsigned long lru_gen_folio_seq(const struct lruvec *lruvec,
include/linux/mm_inline.h
227
const struct lru_gen_folio *lrugen = &lruvec->lrugen;
include/linux/mm_inline.h
255
static inline bool lru_gen_add_folio(struct lruvec *lruvec, struct folio *folio, bool reclaiming)
include/linux/mm_inline.h
262
struct lru_gen_folio *lrugen = &lruvec->lrugen;
include/linux/mm_inline.h
269
seq = lru_gen_folio_seq(lruvec, folio, reclaiming);
include/linux/mm_inline.h
275
lru_gen_update_size(lruvec, folio, -1, gen);
include/linux/mm_inline.h
285
static inline bool lru_gen_del_folio(struct lruvec *lruvec, struct folio *folio, bool reclaiming)
include/linux/mm_inline.h
297
flags = !reclaiming && lru_gen_is_active(lruvec, gen) ? BIT(PG_active) : 0;
include/linux/mm_inline.h
301
lru_gen_update_size(lruvec, folio, gen, -1);
include/linux/mm_inline.h
33
static __always_inline void __update_lru_size(struct lruvec *lruvec,
include/linux/mm_inline.h
330
static inline bool lru_gen_add_folio(struct lruvec *lruvec, struct folio *folio, bool reclaiming)
include/linux/mm_inline.h
335
static inline bool lru_gen_del_folio(struct lruvec *lruvec, struct folio *folio, bool reclaiming)
include/linux/mm_inline.h
347
void lruvec_add_folio(struct lruvec *lruvec, struct folio *folio)
include/linux/mm_inline.h
351
VM_WARN_ON_ONCE_FOLIO(!folio_matches_lruvec(folio, lruvec), folio);
include/linux/mm_inline.h
353
if (lru_gen_add_folio(lruvec, folio, false))
include/linux/mm_inline.h
356
update_lru_size(lruvec, lru, folio_zonenum(folio),
include/linux/mm_inline.h
359
list_add(&folio->lru, &lruvec->lists[lru]);
include/linux/mm_inline.h
363
void lruvec_add_folio_tail(struct lruvec *lruvec, struct folio *folio)
include/linux/mm_inline.h
367
VM_WARN_ON_ONCE_FOLIO(!folio_matches_lruvec(folio, lruvec), folio);
include/linux/mm_inline.h
369
if (lru_gen_add_folio(lruvec, folio, true))
include/linux/mm_inline.h
37
struct pglist_data *pgdat = lruvec_pgdat(lruvec);
include/linux/mm_inline.h
372
update_lru_size(lruvec, lru, folio_zonenum(folio),
include/linux/mm_inline.h
375
list_add_tail(&folio->lru, &lruvec->lists[lru]);
include/linux/mm_inline.h
379
void lruvec_del_folio(struct lruvec *lruvec, struct folio *folio)
include/linux/mm_inline.h
383
VM_WARN_ON_ONCE_FOLIO(!folio_matches_lruvec(folio, lruvec), folio);
include/linux/mm_inline.h
385
if (lru_gen_del_folio(lruvec, folio, false))
include/linux/mm_inline.h
39
lockdep_assert_held(&lruvec->lru_lock);
include/linux/mm_inline.h
390
update_lru_size(lruvec, lru, folio_zonenum(folio),
include/linux/mm_inline.h
42
mod_lruvec_state(lruvec, NR_LRU_BASE + lru, nr_pages);
include/linux/mm_inline.h
47
static __always_inline void update_lru_size(struct lruvec *lruvec,
include/linux/mm_inline.h
51
__update_lru_size(lruvec, lru, zid, nr_pages);
include/linux/mm_inline.h
53
mem_cgroup_update_lru_size(lruvec, lru, zid, nr_pages);
include/linux/mmzone.h
1579
struct lruvec __lruvec;
include/linux/mmzone.h
1650
extern void lruvec_init(struct lruvec *lruvec);
include/linux/mmzone.h
1652
static inline struct pglist_data *lruvec_pgdat(struct lruvec *lruvec)
include/linux/mmzone.h
1655
return lruvec->pgdat;
include/linux/mmzone.h
1657
return container_of(lruvec, struct pglist_data, __lruvec);
include/linux/mmzone.h
522
struct lruvec;
include/linux/mmzone.h
617
struct lruvec *lruvec;
include/linux/mmzone.h
689
void lru_gen_init_lruvec(struct lruvec *lruvec);
include/linux/mmzone.h
708
static inline void lru_gen_init_lruvec(struct lruvec *lruvec)
include/linux/swap.h
299
void workingset_age_nonresident(struct lruvec *lruvec, unsigned long nr_pages);
include/linux/swap.h
312
void lru_note_cost_unlock_irq(struct lruvec *lruvec, bool file,
include/linux/swap.h
355
unsigned long lruvec_lru_size(struct lruvec *lruvec, enum lru_list lru, int zone_idx);
include/linux/vmstat.h
519
void mod_lruvec_state(struct lruvec *lruvec, enum node_stat_item idx,
include/linux/vmstat.h
533
static inline void mod_lruvec_state(struct lruvec *lruvec,
include/linux/vmstat.h
536
mod_node_page_state(lruvec_pgdat(lruvec), idx, val);
include/linux/zswap.h
34
void zswap_lruvec_state_init(struct lruvec *lruvec);
include/linux/zswap.h
59
static inline void zswap_lruvec_state_init(struct lruvec *lruvec) {}
include/linux/zswap.h
8
struct lruvec;
mm/compaction.c
1175
lruvec = folio_lruvec(folio);
mm/compaction.c
1178
if (lruvec != locked || !locked) {
mm/compaction.c
1182
lruvec = compact_folio_lruvec_lock_irqsave(folio, &flags, cc);
mm/compaction.c
1183
locked = lruvec;
mm/compaction.c
1217
lruvec_del_folio(lruvec, folio);
mm/compaction.c
521
static struct lruvec *
mm/compaction.c
525
struct lruvec *lruvec;
mm/compaction.c
529
lruvec = folio_lruvec(folio);
mm/compaction.c
530
compact_lock_irqsave(&lruvec->lru_lock, flags, cc);
mm/compaction.c
531
if (unlikely(lruvec_memcg(lruvec) != folio_memcg(folio))) {
mm/compaction.c
532
spin_unlock_irqrestore(&lruvec->lru_lock, *flags);
mm/compaction.c
536
return lruvec;
mm/compaction.c
860
struct lruvec *lruvec = NULL;
mm/compaction.c
862
struct lruvec *locked = NULL;
mm/damon/core.c
2628
struct lruvec *lruvec;
mm/damon/core.c
2648
lruvec = mem_cgroup_lruvec(memcg, NODE_DATA(goal->nid));
mm/damon/core.c
2649
used_pages = lruvec_page_state(lruvec, NR_ACTIVE_ANON);
mm/damon/core.c
2650
used_pages += lruvec_page_state(lruvec, NR_INACTIVE_ANON);
mm/damon/core.c
2651
used_pages += lruvec_page_state(lruvec, NR_ACTIVE_FILE);
mm/damon/core.c
2652
used_pages += lruvec_page_state(lruvec, NR_INACTIVE_FILE);
mm/huge_memory.c
3491
struct lruvec *lruvec, struct list_head *list)
mm/huge_memory.c
3494
lockdep_assert_held(&lruvec->lru_lock);
mm/huge_memory.c
3836
struct lruvec *lruvec;
mm/huge_memory.c
3876
lruvec = folio_lruvec_lock(folio);
mm/huge_memory.c
3901
lru_add_split_folio(folio, new_folio, lruvec, list);
mm/huge_memory.c
3944
lruvec_unlock(lruvec);
mm/memcontrol-v1.c
1785
struct lruvec *lruvec = mem_cgroup_lruvec(memcg, NODE_DATA(nid));
mm/memcontrol-v1.c
1795
nr += lruvec_page_state(lruvec, NR_LRU_BASE + lru);
mm/memcontrol-v1.c
1797
nr += lruvec_page_state_local(lruvec, NR_LRU_BASE + lru);
mm/memcontrol-v1.c
1991
anon_cost += mz->lruvec.anon_cost;
mm/memcontrol-v1.c
1992
file_cost += mz->lruvec.file_cost;
mm/memcontrol.c
1002
struct lruvec *lruvec;
mm/memcontrol.c
1016
lruvec = mem_cgroup_lruvec(memcg, pgdat);
mm/memcontrol.c
1017
mod_lruvec_state(lruvec, idx, val);
mm/memcontrol.c
1399
struct lruvec *folio_lruvec_lock(struct folio *folio)
mm/memcontrol.c
1401
struct lruvec *lruvec;
mm/memcontrol.c
1405
lruvec = folio_lruvec(folio);
mm/memcontrol.c
1406
spin_lock(&lruvec->lru_lock);
mm/memcontrol.c
1407
if (unlikely(lruvec_memcg(lruvec) != folio_memcg(folio))) {
mm/memcontrol.c
1408
spin_unlock(&lruvec->lru_lock);
mm/memcontrol.c
1412
return lruvec;
mm/memcontrol.c
1427
struct lruvec *folio_lruvec_lock_irq(struct folio *folio)
mm/memcontrol.c
1429
struct lruvec *lruvec;
mm/memcontrol.c
1433
lruvec = folio_lruvec(folio);
mm/memcontrol.c
1434
spin_lock_irq(&lruvec->lru_lock);
mm/memcontrol.c
1435
if (unlikely(lruvec_memcg(lruvec) != folio_memcg(folio))) {
mm/memcontrol.c
1436
spin_unlock_irq(&lruvec->lru_lock);
mm/memcontrol.c
1440
return lruvec;
mm/memcontrol.c
1456
struct lruvec *folio_lruvec_lock_irqsave(struct folio *folio,
mm/memcontrol.c
1459
struct lruvec *lruvec;
mm/memcontrol.c
1463
lruvec = folio_lruvec(folio);
mm/memcontrol.c
1464
spin_lock_irqsave(&lruvec->lru_lock, *flags);
mm/memcontrol.c
1465
if (unlikely(lruvec_memcg(lruvec) != folio_memcg(folio))) {
mm/memcontrol.c
1466
spin_unlock_irqrestore(&lruvec->lru_lock, *flags);
mm/memcontrol.c
1470
return lruvec;
mm/memcontrol.c
1483
void mem_cgroup_update_lru_size(struct lruvec *lruvec, enum lru_list lru,
mm/memcontrol.c
1493
mz = container_of(lruvec, struct mem_cgroup_per_node, lruvec);
mm/memcontrol.c
1502
__func__, lruvec, lru, nr_pages, size)) {
mm/memcontrol.c
2818
struct lruvec *lruvec;
mm/memcontrol.c
2821
lruvec = mem_cgroup_lruvec(memcg, pgdat);
mm/memcontrol.c
2822
mod_memcg_lruvec_state(lruvec, idx, nr);
mm/memcontrol.c
2839
struct lruvec *lruvec;
mm/memcontrol.c
2841
lruvec = mem_cgroup_lruvec(memcg, pgdat);
mm/memcontrol.c
2842
mod_memcg_lruvec_state(lruvec, idx, nr);
mm/memcontrol.c
4051
lruvec_init(&pn->lruvec);
mm/memcontrol.c
483
unsigned long lruvec_page_state(struct lruvec *lruvec, enum node_stat_item idx)
mm/memcontrol.c
490
return node_page_state(lruvec_pgdat(lruvec), idx);
mm/memcontrol.c
4921
static inline unsigned long lruvec_page_state_output(struct lruvec *lruvec,
mm/memcontrol.c
4924
return lruvec_page_state(lruvec, item) *
mm/memcontrol.c
4944
struct lruvec *lruvec;
mm/memcontrol.c
4946
lruvec = mem_cgroup_lruvec(memcg, NODE_DATA(nid));
mm/memcontrol.c
4947
size = lruvec_page_state_output(lruvec,
mm/memcontrol.c
496
pn = container_of(lruvec, struct mem_cgroup_per_node, lruvec);
mm/memcontrol.c
505
unsigned long lruvec_page_state_local(struct lruvec *lruvec,
mm/memcontrol.c
513
return node_page_state(lruvec_pgdat(lruvec), idx);
mm/memcontrol.c
519
pn = container_of(lruvec, struct mem_cgroup_per_node, lruvec);
mm/memcontrol.c
538
struct lruvec *child_lruvec = mem_cgroup_lruvec(memcg, NODE_DATA(nid));
mm/memcontrol.c
539
struct lruvec *parent_lruvec = mem_cgroup_lruvec(parent, NODE_DATA(nid));
mm/memcontrol.c
543
child_pn = container_of(child_lruvec, struct mem_cgroup_per_node, lruvec);
mm/memcontrol.c
544
parent_pn = container_of(parent_lruvec, struct mem_cgroup_per_node, lruvec);
mm/memcontrol.c
937
static void mod_memcg_lruvec_state(struct lruvec *lruvec,
mm/memcontrol.c
941
struct pglist_data *pgdat = lruvec_pgdat(lruvec);
mm/memcontrol.c
946
pn = container_of(lruvec, struct mem_cgroup_per_node, lruvec);
mm/memcontrol.c
965
void mod_lruvec_state(struct lruvec *lruvec, enum node_stat_item idx,
mm/memcontrol.c
969
mod_node_page_state(lruvec_pgdat(lruvec), idx, val);
mm/memcontrol.c
973
mod_memcg_lruvec_state(lruvec, idx, val);
mm/memcontrol.c
981
struct lruvec *lruvec;
mm/memcontrol.c
992
lruvec = mem_cgroup_lruvec(memcg, pgdat);
mm/memcontrol.c
993
mod_lruvec_state(lruvec, idx, val);
mm/migrate.c
2752
struct lruvec *lruvec = mem_cgroup_lruvec(memcg, pgdat);
mm/migrate.c
2766
mod_lruvec_state(lruvec, PGPROMOTE_SUCCESS, nr_succeeded);
mm/migrate.c
673
struct lruvec *old_lruvec, *new_lruvec;
mm/mlock.c
100
return lruvec;
mm/mlock.c
103
static struct lruvec *__mlock_new_folio(struct folio *folio, struct lruvec *lruvec)
mm/mlock.c
107
lruvec = folio_lruvec_relock_irq(folio, lruvec);
mm/mlock.c
117
lruvec_add_folio(lruvec, folio);
mm/mlock.c
119
return lruvec;
mm/mlock.c
122
static struct lruvec *__munlock_folio(struct folio *folio, struct lruvec *lruvec)
mm/mlock.c
131
lruvec = folio_lruvec_relock_irq(folio, lruvec);
mm/mlock.c
153
lruvec_del_folio(lruvec, folio);
mm/mlock.c
155
lruvec_add_folio(lruvec, folio);
mm/mlock.c
161
return lruvec;
mm/mlock.c
188
struct lruvec *lruvec = NULL;
mm/mlock.c
200
lruvec = __mlock_folio(folio, lruvec);
mm/mlock.c
202
lruvec = __mlock_new_folio(folio, lruvec);
mm/mlock.c
204
lruvec = __munlock_folio(folio, lruvec);
mm/mlock.c
207
if (lruvec)
mm/mlock.c
208
lruvec_unlock_irq(lruvec);
mm/mlock.c
61
static struct lruvec *__mlock_folio(struct folio *folio, struct lruvec *lruvec)
mm/mlock.c
65
return lruvec;
mm/mlock.c
67
lruvec = folio_lruvec_relock_irq(folio, lruvec);
mm/mlock.c
76
lruvec_del_folio(lruvec, folio);
mm/mlock.c
78
lruvec_add_folio(lruvec, folio);
mm/mlock.c
92
lruvec_del_folio(lruvec, folio);
mm/mlock.c
96
lruvec_add_folio(lruvec, folio);
mm/mmzone.c
75
void lruvec_init(struct lruvec *lruvec)
mm/mmzone.c
79
memset(lruvec, 0, sizeof(struct lruvec));
mm/mmzone.c
80
spin_lock_init(&lruvec->lru_lock);
mm/mmzone.c
81
zswap_lruvec_state_init(lruvec);
mm/mmzone.c
84
INIT_LIST_HEAD(&lruvec->lists[lru]);
mm/mmzone.c
91
list_del(&lruvec->lists[LRU_UNEVICTABLE]);
mm/mmzone.c
93
lru_gen_init_lruvec(lruvec);
mm/swap.c
1005
struct lruvec *lruvec = NULL;
mm/swap.c
1020
if (lruvec) {
mm/swap.c
1021
lruvec_unlock_irqrestore(lruvec, flags);
mm/swap.c
1022
lruvec = NULL;
mm/swap.c
1034
if (lruvec) {
mm/swap.c
1035
lruvec_unlock_irqrestore(lruvec, flags);
mm/swap.c
1036
lruvec = NULL;
mm/swap.c
1042
__page_cache_release(folio, &lruvec, &flags);
mm/swap.c
1048
if (lruvec)
mm/swap.c
1049
lruvec_unlock_irqrestore(lruvec, flags);
mm/swap.c
1143
static void lruvec_reparent_lru(struct lruvec *child_lruvec,
mm/swap.c
1144
struct lruvec *parent_lruvec,
mm/swap.c
116
typedef void (*move_fn_t)(struct lruvec *lruvec, struct folio *folio);
mm/swap.c
1163
struct lruvec *child_lruvec, *parent_lruvec;
mm/swap.c
118
static void lru_add(struct lruvec *lruvec, struct folio *folio)
mm/swap.c
154
lruvec_add_folio(lruvec, folio);
mm/swap.c
161
struct lruvec *lruvec = NULL;
mm/swap.c
199
folio_lruvec_relock_irqsave(folio, &lruvec, &flags);
mm/swap.c
200
move_fn(lruvec, folio);
mm/swap.c
205
if (lruvec)
mm/swap.c
206
lruvec_unlock_irqrestore(lruvec, flags);
mm/swap.c
248
static void lru_move_tail(struct lruvec *lruvec, struct folio *folio)
mm/swap.c
253
lruvec_del_folio(lruvec, folio);
mm/swap.c
255
lruvec_add_folio_tail(lruvec, folio);
mm/swap.c
275
void lru_note_cost_unlock_irq(struct lruvec *lruvec, bool file,
mm/swap.c
277
__releases(lruvec->lru_lock)
mm/swap.c
291
spin_unlock_irq(&lruvec->lru_lock);
mm/swap.c
301
lruvec->file_cost += cost;
mm/swap.c
303
lruvec->anon_cost += cost;
mm/swap.c
313
lrusize = lruvec_page_state(lruvec, NR_INACTIVE_ANON) +
mm/swap.c
314
lruvec_page_state(lruvec, NR_ACTIVE_ANON) +
mm/swap.c
315
lruvec_page_state(lruvec, NR_INACTIVE_FILE) +
mm/swap.c
316
lruvec_page_state(lruvec, NR_ACTIVE_FILE);
mm/swap.c
318
if (lruvec->file_cost + lruvec->anon_cost > lrusize / 4) {
mm/swap.c
319
lruvec->file_cost /= 2;
mm/swap.c
320
lruvec->anon_cost /= 2;
mm/swap.c
323
spin_unlock_irq(&lruvec->lru_lock);
mm/swap.c
324
lruvec = parent_lruvec(lruvec);
mm/swap.c
325
if (!lruvec) {
mm/swap.c
329
spin_lock_irq(&lruvec->lru_lock);
mm/swap.c
335
struct lruvec *lruvec;
mm/swap.c
337
lruvec = folio_lruvec_lock_irq(folio);
mm/swap.c
338
lru_note_cost_unlock_irq(lruvec, folio_is_file_lru(folio),
mm/swap.c
342
static void lru_activate(struct lruvec *lruvec, struct folio *folio)
mm/swap.c
350
lruvec_del_folio(lruvec, folio);
mm/swap.c
352
lruvec_add_folio(lruvec, folio);
mm/swap.c
356
count_memcg_events(lruvec_memcg(lruvec), PGACTIVATE, nr_pages);
mm/swap.c
384
struct lruvec *lruvec;
mm/swap.c
389
lruvec = folio_lruvec_lock_irq(folio);
mm/swap.c
390
lru_activate(lruvec, folio);
mm/swap.c
391
lruvec_unlock_irq(lruvec);
mm/swap.c
605
static void lru_deactivate_file(struct lruvec *lruvec, struct folio *folio)
mm/swap.c
617
lruvec_del_folio(lruvec, folio);
mm/swap.c
628
lruvec_add_folio(lruvec, folio);
mm/swap.c
635
lruvec_add_folio_tail(lruvec, folio);
mm/swap.c
641
count_memcg_events(lruvec_memcg(lruvec), PGDEACTIVATE,
mm/swap.c
646
static void lru_deactivate(struct lruvec *lruvec, struct folio *folio)
mm/swap.c
653
lruvec_del_folio(lruvec, folio);
mm/swap.c
656
lruvec_add_folio(lruvec, folio);
mm/swap.c
659
count_memcg_events(lruvec_memcg(lruvec), PGDEACTIVATE, nr_pages);
mm/swap.c
662
static void lru_lazyfree(struct lruvec *lruvec, struct folio *folio)
mm/swap.c
670
lruvec_del_folio(lruvec, folio);
mm/swap.c
682
lruvec_add_folio(lruvec, folio);
mm/swap.c
685
count_memcg_events(lruvec_memcg(lruvec), PGLAZYFREE, nr_pages);
mm/swap.c
73
static void __page_cache_release(struct folio *folio, struct lruvec **lruvecp,
mm/swap.c
89
struct lruvec *lruvec = NULL;
mm/swap.c
92
__page_cache_release(folio, &lruvec, &flags);
mm/swap.c
93
if (lruvec)
mm/swap.c
94
lruvec_unlock_irqrestore(lruvec, flags);
mm/vmscan.c
1647
static __always_inline void update_lru_sizes(struct lruvec *lruvec,
mm/vmscan.c
1656
update_lru_size(lruvec, lru, zid, -nr_zone_taken[zid]);
mm/vmscan.c
1683
struct lruvec *lruvec, struct list_head *dst,
mm/vmscan.c
1687
struct list_head *src = &lruvec->lists[lru];
mm/vmscan.c
1772
update_lru_sizes(lruvec, lru, nr_zone_taken);
mm/vmscan.c
1806
struct lruvec *lruvec;
mm/vmscan.c
1809
lruvec = folio_lruvec_lock_irq(folio);
mm/vmscan.c
1810
lruvec_del_folio(lruvec, folio);
mm/vmscan.c
1811
lruvec_unlock_irq(lruvec);
mm/vmscan.c
1872
struct lruvec *lruvec = NULL;
mm/vmscan.c
1879
lruvec = folio_lruvec_relock_irq(folio, lruvec);
mm/vmscan.c
1883
lruvec_unlock_irq(lruvec);
mm/vmscan.c
1885
lruvec = NULL;
mm/vmscan.c
1907
lruvec_unlock_irq(lruvec);
mm/vmscan.c
1910
lruvec = NULL;
mm/vmscan.c
1916
lruvec_add_folio(lruvec, folio);
mm/vmscan.c
1920
workingset_age_nonresident(lruvec, nr_pages);
mm/vmscan.c
1923
if (lruvec)
mm/vmscan.c
1924
lruvec_unlock_irq(lruvec);
mm/vmscan.c
1987
struct lruvec *lruvec, struct scan_control *sc,
mm/vmscan.c
1997
struct pglist_data *pgdat = lruvec_pgdat(lruvec);
mm/vmscan.c
2015
lruvec_lock_irq(lruvec);
mm/vmscan.c
2017
nr_taken = isolate_lru_folios(nr_to_scan, lruvec, &folio_list,
mm/vmscan.c
2022
mod_lruvec_state(lruvec, item, nr_scanned);
mm/vmscan.c
2023
mod_lruvec_state(lruvec, PGSCAN_ANON + file, nr_scanned);
mm/vmscan.c
2025
lruvec_unlock_irq(lruvec);
mm/vmscan.c
2031
lruvec_memcg(lruvec));
mm/vmscan.c
2035
mod_lruvec_state(lruvec, PGDEMOTE_KSWAPD + reclaimer_offset(sc),
mm/vmscan.c
2039
mod_lruvec_state(lruvec, item, nr_reclaimed);
mm/vmscan.c
2040
mod_lruvec_state(lruvec, PGSTEAL_ANON + file, nr_reclaimed);
mm/vmscan.c
2042
lruvec_lock_irq(lruvec);
mm/vmscan.c
2043
lru_note_cost_unlock_irq(lruvec, file, stat.nr_pageout,
mm/vmscan.c
2069
struct lruvec *lruvec,
mm/vmscan.c
2082
struct pglist_data *pgdat = lruvec_pgdat(lruvec);
mm/vmscan.c
2086
lruvec_lock_irq(lruvec);
mm/vmscan.c
2088
nr_taken = isolate_lru_folios(nr_to_scan, lruvec, &l_hold,
mm/vmscan.c
2093
mod_lruvec_state(lruvec, PGREFILL, nr_scanned);
mm/vmscan.c
2095
lruvec_unlock_irq(lruvec);
mm/vmscan.c
2148
count_memcg_events(lruvec_memcg(lruvec), PGDEACTIVATE, nr_deactivate);
mm/vmscan.c
2151
lruvec_lock_irq(lruvec);
mm/vmscan.c
2152
lru_note_cost_unlock_irq(lruvec, file, 0, nr_rotated);
mm/vmscan.c
2216
struct lruvec *lruvec, struct scan_control *sc)
mm/vmscan.c
2220
shrink_active_list(nr_to_scan, lruvec, sc, lru);
mm/vmscan.c
2226
return shrink_inactive_list(nr_to_scan, lruvec, sc, lru);
mm/vmscan.c
2257
static bool inactive_is_low(struct lruvec *lruvec, enum lru_list inactive_lru)
mm/vmscan.c
2264
inactive = lruvec_page_state(lruvec, NR_LRU_BASE + inactive_lru);
mm/vmscan.c
2265
active = lruvec_page_state(lruvec, NR_LRU_BASE + active_lru);
mm/vmscan.c
2286
struct lruvec *target_lruvec;
mm/vmscan.c
2493
static void get_scan_count(struct lruvec *lruvec, struct scan_control *sc,
mm/vmscan.c
2496
struct pglist_data *pgdat = lruvec_pgdat(lruvec);
mm/vmscan.c
2497
struct mem_cgroup *memcg = lruvec_memcg(lruvec);
mm/vmscan.c
2566
lruvec_size = lruvec_lru_size(lruvec, lru, sc->reclaim_idx);
mm/vmscan.c
2613
static bool can_age_anon_pages(struct lruvec *lruvec,
mm/vmscan.c
2621
return can_demote(lruvec_pgdat(lruvec)->node_id, sc,
mm/vmscan.c
2622
lruvec_memcg(lruvec));
mm/vmscan.c
2650
#define DEFINE_MAX_SEQ(lruvec) \
mm/vmscan.c
2651
unsigned long max_seq = READ_ONCE((lruvec)->lrugen.max_seq)
mm/vmscan.c
2653
#define DEFINE_MIN_SEQ(lruvec) \
mm/vmscan.c
2655
READ_ONCE((lruvec)->lrugen.min_seq[LRU_GEN_ANON]), \
mm/vmscan.c
2656
READ_ONCE((lruvec)->lrugen.min_seq[LRU_GEN_FILE]), \
mm/vmscan.c
2677
static struct lruvec *get_lruvec(struct mem_cgroup *memcg, int nid)
mm/vmscan.c
2683
struct lruvec *lruvec = &memcg->nodeinfo[nid]->lruvec;
mm/vmscan.c
2686
if (!lruvec->pgdat)
mm/vmscan.c
2687
lruvec->pgdat = pgdat;
mm/vmscan.c
2689
return lruvec;
mm/vmscan.c
2697
static int get_swappiness(struct lruvec *lruvec, struct scan_control *sc)
mm/vmscan.c
2699
struct mem_cgroup *memcg = lruvec_memcg(lruvec);
mm/vmscan.c
2700
struct pglist_data *pgdat = lruvec_pgdat(lruvec);
mm/vmscan.c
2712
static int get_nr_gens(struct lruvec *lruvec, int type)
mm/vmscan.c
2714
return lruvec->lrugen.max_seq - lruvec->lrugen.min_seq[type] + 1;
mm/vmscan.c
2717
static bool __maybe_unused seq_is_valid(struct lruvec *lruvec)
mm/vmscan.c
2722
int n = get_nr_gens(lruvec, type);
mm/vmscan.c
2847
static struct lru_gen_mm_state *get_mm_state(struct lruvec *lruvec)
mm/vmscan.c
2849
return &lruvec->mm_state;
mm/vmscan.c
2856
struct pglist_data *pgdat = lruvec_pgdat(walk->lruvec);
mm/vmscan.c
2857
struct lru_gen_mm_state *mm_state = get_mm_state(walk->lruvec);
mm/vmscan.c
2885
struct lruvec *lruvec = get_lruvec(memcg, nid);
mm/vmscan.c
2886
struct lru_gen_mm_state *mm_state = get_mm_state(lruvec);
mm/vmscan.c
2915
struct lruvec *lruvec = get_lruvec(memcg, nid);
mm/vmscan.c
2916
struct lru_gen_mm_state *mm_state = get_mm_state(lruvec);
mm/vmscan.c
2974
static struct lru_gen_mm_state *get_mm_state(struct lruvec *lruvec)
mm/vmscan.c
2990
struct lruvec *lruvec = walk->lruvec;
mm/vmscan.c
2991
struct lru_gen_mm_state *mm_state = get_mm_state(lruvec);
mm/vmscan.c
2993
lockdep_assert_held(&get_mm_list(lruvec_memcg(lruvec))->lock);
mm/vmscan.c
3016
struct lruvec *lruvec = walk->lruvec;
mm/vmscan.c
3017
struct mem_cgroup *memcg = lruvec_memcg(lruvec);
mm/vmscan.c
3019
struct lru_gen_mm_state *mm_state = get_mm_state(lruvec);
mm/vmscan.c
3075
static bool iterate_mm_list_nowalk(struct lruvec *lruvec, unsigned long seq)
mm/vmscan.c
3078
struct mem_cgroup *memcg = lruvec_memcg(lruvec);
mm/vmscan.c
3080
struct lru_gen_mm_state *mm_state = get_mm_state(lruvec);
mm/vmscan.c
3127
static void read_ctrl_pos(struct lruvec *lruvec, int type, int tier, int gain,
mm/vmscan.c
3131
struct lru_gen_folio *lrugen = &lruvec->lrugen;
mm/vmscan.c
3146
static void reset_ctrl_pos(struct lruvec *lruvec, int type, bool carryover)
mm/vmscan.c
3149
struct lru_gen_folio *lrugen = &lruvec->lrugen;
mm/vmscan.c
3153
lockdep_assert_held(&lruvec->lru_lock);
mm/vmscan.c
3223
static int folio_inc_gen(struct lruvec *lruvec, struct folio *folio)
mm/vmscan.c
3226
struct lru_gen_folio *lrugen = &lruvec->lrugen;
mm/vmscan.c
3244
lru_gen_update_size(lruvec, folio, old_gen, new_gen);
mm/vmscan.c
3268
struct lruvec *lruvec = lruvec_live_lock_irq(walk->lruvec);
mm/vmscan.c
3269
struct lru_gen_folio *lrugen = &lruvec->lrugen;
mm/vmscan.c
3284
if (lru_gen_is_active(lruvec, gen))
mm/vmscan.c
3286
__update_lru_size(lruvec, lru, zone, delta);
mm/vmscan.c
3289
lruvec_unlock_irq(lruvec);
mm/vmscan.c
3474
struct mem_cgroup *memcg = lruvec_memcg(walk->lruvec);
mm/vmscan.c
3475
struct pglist_data *pgdat = lruvec_pgdat(walk->lruvec);
mm/vmscan.c
3476
DEFINE_MAX_SEQ(walk->lruvec);
mm/vmscan.c
3562
struct mem_cgroup *memcg = lruvec_memcg(walk->lruvec);
mm/vmscan.c
3563
struct pglist_data *pgdat = lruvec_pgdat(walk->lruvec);
mm/vmscan.c
3564
DEFINE_MAX_SEQ(walk->lruvec);
mm/vmscan.c
3652
struct lru_gen_mm_state *mm_state = get_mm_state(walk->lruvec);
mm/vmscan.c
3676
struct pglist_data *pgdat = lruvec_pgdat(walk->lruvec);
mm/vmscan.c
3764
struct lruvec *lruvec = walk->lruvec;
mm/vmscan.c
3769
DEFINE_MAX_SEQ(lruvec);
mm/vmscan.c
3824
static bool inc_min_seq(struct lruvec *lruvec, int type, int swappiness)
mm/vmscan.c
3828
struct lru_gen_folio *lrugen = &lruvec->lrugen;
mm/vmscan.c
3854
new_gen = folio_inc_gen(lruvec, folio);
mm/vmscan.c
3871
reset_ctrl_pos(lruvec, type, true);
mm/vmscan.c
3877
static void try_to_inc_min_seq(struct lruvec *lruvec, int swappiness)
mm/vmscan.c
3881
struct lru_gen_folio *lrugen = &lruvec->lrugen;
mm/vmscan.c
3882
DEFINE_MIN_SEQ(lruvec);
mm/vmscan.c
3884
VM_WARN_ON_ONCE(!seq_is_valid(lruvec));
mm/vmscan.c
391
unsigned long lruvec_lru_size(struct lruvec *lruvec, enum lru_list lru, int zone_idx)
mm/vmscan.c
3924
reset_ctrl_pos(lruvec, type, true);
mm/vmscan.c
3929
static bool inc_max_seq(struct lruvec *lruvec, unsigned long seq, int swappiness)
mm/vmscan.c
3934
struct lru_gen_folio *lrugen = &lruvec->lrugen;
mm/vmscan.c
3939
lruvec_lock_irq(lruvec);
mm/vmscan.c
3941
VM_WARN_ON_ONCE(!seq_is_valid(lruvec));
mm/vmscan.c
3948
if (get_nr_gens(lruvec, type) != MAX_NR_GENS)
mm/vmscan.c
3951
if (inc_min_seq(lruvec, type, swappiness))
mm/vmscan.c
3954
lruvec_unlock_irq(lruvec);
mm/vmscan.c
397
for_each_managed_zone_pgdat(zone, lruvec_pgdat(lruvec), zid, zone_idx) {
mm/vmscan.c
3977
__update_lru_size(lruvec, lru, zone, delta);
mm/vmscan.c
3978
__update_lru_size(lruvec, lru + LRU_ACTIVE, zone, -delta);
mm/vmscan.c
3983
reset_ctrl_pos(lruvec, type, false);
mm/vmscan.c
3989
lruvec_unlock_irq(lruvec);
mm/vmscan.c
399
size += mem_cgroup_get_zone_lru_size(lruvec, lru, zid);
mm/vmscan.c
3994
static bool try_to_inc_max_seq(struct lruvec *lruvec, unsigned long seq,
mm/vmscan.c
4000
struct lru_gen_folio *lrugen = &lruvec->lrugen;
mm/vmscan.c
4001
struct lru_gen_mm_state *mm_state = get_mm_state(lruvec);
mm/vmscan.c
4006
return inc_max_seq(lruvec, seq, swappiness);
mm/vmscan.c
4019
success = iterate_mm_list_nowalk(lruvec, seq);
mm/vmscan.c
4025
success = iterate_mm_list_nowalk(lruvec, seq);
mm/vmscan.c
4029
walk->lruvec = lruvec;
mm/vmscan.c
4041
success = inc_max_seq(lruvec, seq, swappiness);
mm/vmscan.c
4078
static unsigned long lruvec_evictable_size(struct lruvec *lruvec, int swappiness)
mm/vmscan.c
4082
struct lru_gen_folio *lrugen = &lruvec->lrugen;
mm/vmscan.c
4083
DEFINE_MAX_SEQ(lruvec);
mm/vmscan.c
4084
DEFINE_MIN_SEQ(lruvec);
mm/vmscan.c
4097
static bool lruvec_is_sizable(struct lruvec *lruvec, struct scan_control *sc)
mm/vmscan.c
4100
int swappiness = get_swappiness(lruvec, sc);
mm/vmscan.c
4101
struct mem_cgroup *memcg = lruvec_memcg(lruvec);
mm/vmscan.c
4103
total = lruvec_evictable_size(lruvec, swappiness);
mm/vmscan.c
4109
static bool lruvec_is_reclaimable(struct lruvec *lruvec, struct scan_control *sc,
mm/vmscan.c
4114
int swappiness = get_swappiness(lruvec, sc);
mm/vmscan.c
4115
struct mem_cgroup *memcg = lruvec_memcg(lruvec);
mm/vmscan.c
4116
DEFINE_MIN_SEQ(lruvec);
mm/vmscan.c
4121
if (!lruvec_is_sizable(lruvec, sc))
mm/vmscan.c
4125
birth = READ_ONCE(lruvec->lrugen.timestamps[gen]);
mm/vmscan.c
4145
struct lruvec *lruvec = mem_cgroup_lruvec(memcg, pgdat);
mm/vmscan.c
4150
reclaimable = lruvec_is_reclaimable(lruvec, sc, min_ttl);
mm/vmscan.c
4195
struct lruvec *lruvec;
mm/vmscan.c
4234
lruvec = mem_cgroup_lruvec(memcg, pgdat);
mm/vmscan.c
4235
max_seq = READ_ONCE((lruvec)->lrugen.max_seq);
mm/vmscan.c
4237
mm_state = get_mm_state(lruvec);
mm/vmscan.c
4306
static void lru_gen_rotate_memcg(struct lruvec *lruvec, int op)
mm/vmscan.c
4312
struct pglist_data *pgdat = lruvec_pgdat(lruvec);
mm/vmscan.c
4316
VM_WARN_ON_ONCE(hlist_nulls_unhashed(&lruvec->lrugen.list));
mm/vmscan.c
4319
new = old = lruvec->lrugen.gen;
mm/vmscan.c
4333
WRITE_ONCE(lruvec->lrugen.seg, seg);
mm/vmscan.c
4334
WRITE_ONCE(lruvec->lrugen.gen, new);
mm/vmscan.c
4336
hlist_nulls_del_rcu(&lruvec->lrugen.list);
mm/vmscan.c
4339
hlist_nulls_add_head_rcu(&lruvec->lrugen.list, &pgdat->memcg_lru.fifo[new][bin]);
mm/vmscan.c
4341
hlist_nulls_add_tail_rcu(&lruvec->lrugen.list, &pgdat->memcg_lru.fifo[new][bin]);
mm/vmscan.c
4362
struct lruvec *lruvec = get_lruvec(memcg, nid);
mm/vmscan.c
4366
VM_WARN_ON_ONCE(!hlist_nulls_unhashed(&lruvec->lrugen.list));
mm/vmscan.c
4370
lruvec->lrugen.gen = gen;
mm/vmscan.c
4372
hlist_nulls_add_tail_rcu(&lruvec->lrugen.list, &pgdat->memcg_lru.fifo[gen][bin]);
mm/vmscan.c
4384
struct lruvec *lruvec = get_lruvec(memcg, nid);
mm/vmscan.c
4386
lru_gen_rotate_memcg(lruvec, MEMCG_LRU_OLD);
mm/vmscan.c
4397
struct lruvec *lruvec = get_lruvec(memcg, nid);
mm/vmscan.c
4401
if (hlist_nulls_unhashed(&lruvec->lrugen.list))
mm/vmscan.c
4404
gen = lruvec->lrugen.gen;
mm/vmscan.c
4406
hlist_nulls_del_init_rcu(&lruvec->lrugen.list);
mm/vmscan.c
4418
struct lruvec *lruvec = get_lruvec(memcg, nid);
mm/vmscan.c
4421
if (READ_ONCE(lruvec->lrugen.seg) != MEMCG_LRU_HEAD)
mm/vmscan.c
4422
lru_gen_rotate_memcg(lruvec, MEMCG_LRU_HEAD);
mm/vmscan.c
4427
struct lruvec *lruvec = get_lruvec(memcg, nid);
mm/vmscan.c
4431
if (get_nr_gens(lruvec, type) != MAX_NR_GENS)
mm/vmscan.c
4439
struct lruvec *lruvec)
mm/vmscan.c
4442
struct lru_gen_mm_state *mm_state = get_mm_state(lruvec);
mm/vmscan.c
4444
DEFINE_MAX_SEQ(lruvec);
mm/vmscan.c
4464
inc_max_seq(lruvec, max_seq, swappiness);
mm/vmscan.c
4474
struct lruvec *lruvec = get_lruvec(memcg, nid);
mm/vmscan.c
4478
while (get_nr_gens(lruvec, type) < MAX_NR_GENS) {
mm/vmscan.c
4479
try_to_inc_max_seq_nowalk(memcg, lruvec);
mm/vmscan.c
4513
static void __lru_gen_reparent_memcg(struct lruvec *child_lruvec, struct lruvec *parent_lruvec,
mm/vmscan.c
4546
struct lruvec *child_lruvec, *parent_lruvec;
mm/vmscan.c
4573
static bool sort_folio(struct lruvec *lruvec, struct folio *folio, struct scan_control *sc,
mm/vmscan.c
4584
struct lru_gen_folio *lrugen = &lruvec->lrugen;
mm/vmscan.c
4590
success = lru_gen_del_folio(lruvec, folio, true);
mm/vmscan.c
4593
lruvec_add_folio(lruvec, folio);
mm/vmscan.c
4606
gen = folio_inc_gen(lruvec, folio);
mm/vmscan.c
4621
gen = folio_inc_gen(lruvec, folio);
mm/vmscan.c
4629
static bool isolate_folio(struct lruvec *lruvec, struct folio *folio, struct scan_control *sc)
mm/vmscan.c
4647
success = lru_gen_del_folio(lruvec, folio, true);
mm/vmscan.c
4653
static int scan_folios(unsigned long nr_to_scan, struct lruvec *lruvec,
mm/vmscan.c
4665
struct lru_gen_folio *lrugen = &lruvec->lrugen;
mm/vmscan.c
4670
if (get_nr_gens(lruvec, type) == MIN_NR_GENS)
mm/vmscan.c
4692
if (sort_folio(lruvec, folio, sc, tier))
mm/vmscan.c
4694
else if (isolate_folio(lruvec, folio, sc)) {
mm/vmscan.c
4717
mod_lruvec_state(lruvec, item, isolated);
mm/vmscan.c
4718
mod_lruvec_state(lruvec, PGREFILL, sorted);
mm/vmscan.c
4719
mod_lruvec_state(lruvec, PGSCAN_ANON + type, isolated);
mm/vmscan.c
4728
static int get_tier_idx(struct lruvec *lruvec, int type)
mm/vmscan.c
4738
read_ctrl_pos(lruvec, type, 0, 2, &sp);
mm/vmscan.c
4740
read_ctrl_pos(lruvec, type, tier, 3, &pv);
mm/vmscan.c
4748
static int get_type_to_scan(struct lruvec *lruvec, int swappiness)
mm/vmscan.c
4761
read_ctrl_pos(lruvec, LRU_GEN_ANON, MAX_NR_TIERS, swappiness, &sp);
mm/vmscan.c
4762
read_ctrl_pos(lruvec, LRU_GEN_FILE, MAX_NR_TIERS, MAX_SWAPPINESS - swappiness, &pv);
mm/vmscan.c
4767
static int isolate_folios(unsigned long nr_to_scan, struct lruvec *lruvec,
mm/vmscan.c
4774
int type = get_type_to_scan(lruvec, swappiness);
mm/vmscan.c
4778
int tier = get_tier_idx(lruvec, type);
mm/vmscan.c
4780
scanned = scan_folios(nr_to_scan, lruvec, sc,
mm/vmscan.c
4801
static int evict_folios(unsigned long nr_to_scan, struct lruvec *lruvec,
mm/vmscan.c
4814
struct mem_cgroup *memcg = lruvec_memcg(lruvec);
mm/vmscan.c
4815
struct pglist_data *pgdat = lruvec_pgdat(lruvec);
mm/vmscan.c
4817
lruvec_lock_irq(lruvec);
mm/vmscan.c
4820
try_to_inc_min_seq(lruvec, swappiness);
mm/vmscan.c
4822
scanned = isolate_folios(nr_to_scan, lruvec, sc, swappiness,
mm/vmscan.c
4827
try_to_inc_min_seq(lruvec, swappiness);
mm/vmscan.c
4829
lruvec_unlock_irq(lruvec);
mm/vmscan.c
4844
DEFINE_MIN_SEQ(lruvec);
mm/vmscan.c
4860
if (lru_gen_folio_seq(lruvec, folio, false) == min_seq[type])
mm/vmscan.c
4868
walk->lruvec = lruvec;
mm/vmscan.c
4872
mod_lruvec_state(lruvec, PGDEMOTE_KSWAPD + reclaimer_offset(sc),
mm/vmscan.c
4876
mod_lruvec_state(lruvec, item, reclaimed);
mm/vmscan.c
4877
mod_lruvec_state(lruvec, PGSTEAL_ANON + type, reclaimed);
mm/vmscan.c
4890
static bool should_run_aging(struct lruvec *lruvec, unsigned long max_seq,
mm/vmscan.c
4893
DEFINE_MIN_SEQ(lruvec);
mm/vmscan.c
4907
static long get_nr_to_scan(struct lruvec *lruvec, struct scan_control *sc,
mm/vmscan.c
4912
evictable = lruvec_evictable_size(lruvec, swappiness);
mm/vmscan.c
4924
static bool should_abort_scan(struct lruvec *lruvec, struct scan_control *sc)
mm/vmscan.c
4943
struct zone *zone = lruvec_pgdat(lruvec)->node_zones + i;
mm/vmscan.c
4959
static bool try_to_shrink_lruvec(struct lruvec *lruvec, struct scan_control *sc)
mm/vmscan.c
4963
int swappiness = get_swappiness(lruvec, sc);
mm/vmscan.c
4964
struct mem_cgroup *memcg = lruvec_memcg(lruvec);
mm/vmscan.c
4966
nr_to_scan = get_nr_to_scan(lruvec, sc, memcg, swappiness);
mm/vmscan.c
4969
DEFINE_MAX_SEQ(lruvec);
mm/vmscan.c
4976
if (should_run_aging(lruvec, max_seq, sc, swappiness)) {
mm/vmscan.c
4977
if (try_to_inc_max_seq(lruvec, max_seq, swappiness, false))
mm/vmscan.c
4983
delta = evict_folios(nr_batch, lruvec, sc, swappiness);
mm/vmscan.c
4987
if (should_abort_scan(lruvec, sc))
mm/vmscan.c
5004
static int shrink_one(struct lruvec *lruvec, struct scan_control *sc)
mm/vmscan.c
5009
struct mem_cgroup *memcg = lruvec_memcg(lruvec);
mm/vmscan.c
5010
struct pglist_data *pgdat = lruvec_pgdat(lruvec);
mm/vmscan.c
5018
if (READ_ONCE(lruvec->lrugen.seg) != MEMCG_LRU_TAIL)
mm/vmscan.c
5024
need_rotate = try_to_shrink_lruvec(lruvec, sc);
mm/vmscan.c
5037
if (!need_rotate && lruvec_is_sizable(lruvec, sc))
mm/vmscan.c
5041
return READ_ONCE(lruvec->lrugen.seg) != MEMCG_LRU_TAIL ?
mm/vmscan.c
5051
struct lruvec *lruvec;
mm/vmscan.c
5066
lru_gen_rotate_memcg(lruvec, op);
mm/vmscan.c
5076
lruvec = container_of(lrugen, struct lruvec, lrugen);
mm/vmscan.c
5077
memcg = lruvec_memcg(lruvec);
mm/vmscan.c
5087
op = shrink_one(lruvec, sc);
mm/vmscan.c
5091
if (should_abort_scan(lruvec, sc))
mm/vmscan.c
5098
lru_gen_rotate_memcg(lruvec, op);
mm/vmscan.c
5115
static void lru_gen_shrink_lruvec(struct lruvec *lruvec, struct scan_control *sc)
mm/vmscan.c
5128
if (try_to_shrink_lruvec(lruvec, sc))
mm/vmscan.c
5129
lru_gen_rotate_memcg(lruvec, MEMCG_LRU_YOUNG);
mm/vmscan.c
5182
static bool __maybe_unused state_is_valid(struct lruvec *lruvec)
mm/vmscan.c
5184
struct lru_gen_folio *lrugen = &lruvec->lrugen;
mm/vmscan.c
5190
if (!list_empty(&lruvec->lists[lru]))
mm/vmscan.c
5205
static bool fill_evictable(struct lruvec *lruvec)
mm/vmscan.c
5213
struct list_head *head = &lruvec->lists[lru];
mm/vmscan.c
5224
lruvec_del_folio(lruvec, folio);
mm/vmscan.c
5225
success = lru_gen_add_folio(lruvec, folio, false);
mm/vmscan.c
5236
static bool drain_evictable(struct lruvec *lruvec)
mm/vmscan.c
5242
struct list_head *head = &lruvec->lrugen.folios[gen][type][zone];
mm/vmscan.c
5253
success = lru_gen_del_folio(lruvec, folio, false);
mm/vmscan.c
5255
lruvec_add_folio(lruvec, folio);
mm/vmscan.c
5291
struct lruvec *lruvec = get_lruvec(memcg, nid);
mm/vmscan.c
5293
lruvec_lock_irq(lruvec);
mm/vmscan.c
5295
VM_WARN_ON_ONCE(!seq_is_valid(lruvec));
mm/vmscan.c
5296
VM_WARN_ON_ONCE(!state_is_valid(lruvec));
mm/vmscan.c
5298
lruvec->lrugen.enabled = enabled;
mm/vmscan.c
5300
while (!(enabled ? fill_evictable(lruvec) : drain_evictable(lruvec))) {
mm/vmscan.c
5301
lruvec_unlock_irq(lruvec);
mm/vmscan.c
5303
lruvec_lock_irq(lruvec);
mm/vmscan.c
5306
lruvec_unlock_irq(lruvec);
mm/vmscan.c
5457
static void lru_gen_seq_show_full(struct seq_file *m, struct lruvec *lruvec,
mm/vmscan.c
5464
struct lru_gen_folio *lrugen = &lruvec->lrugen;
mm/vmscan.c
5465
struct lru_gen_mm_state *mm_state = get_mm_state(lruvec);
mm/vmscan.c
5516
struct lruvec *lruvec = v;
mm/vmscan.c
5517
struct lru_gen_folio *lrugen = &lruvec->lrugen;
mm/vmscan.c
5518
int nid = lruvec_pgdat(lruvec)->node_id;
mm/vmscan.c
5519
struct mem_cgroup *memcg = lruvec_memcg(lruvec);
mm/vmscan.c
5520
DEFINE_MAX_SEQ(lruvec);
mm/vmscan.c
5521
DEFINE_MIN_SEQ(lruvec);
mm/vmscan.c
5545
unsigned long birth = READ_ONCE(lruvec->lrugen.timestamps[gen]);
mm/vmscan.c
5562
lru_gen_seq_show_full(m, lruvec, max_seq, min_seq, seq);
mm/vmscan.c
5575
static int run_aging(struct lruvec *lruvec, unsigned long seq,
mm/vmscan.c
5578
DEFINE_MAX_SEQ(lruvec);
mm/vmscan.c
5583
return try_to_inc_max_seq(lruvec, max_seq, swappiness, force_scan) ? 0 : -EEXIST;
mm/vmscan.c
5586
static int run_eviction(struct lruvec *lruvec, unsigned long seq, struct scan_control *sc,
mm/vmscan.c
5590
DEFINE_MAX_SEQ(lruvec);
mm/vmscan.c
5598
DEFINE_MIN_SEQ(lruvec);
mm/vmscan.c
5607
if (!evict_folios(nr_batch, lruvec, sc, swappiness))
mm/vmscan.c
5619
struct lruvec *lruvec;
mm/vmscan.c
5636
lruvec = get_lruvec(memcg, nid);
mm/vmscan.c
5639
swappiness = get_swappiness(lruvec, sc);
mm/vmscan.c
5645
err = run_aging(lruvec, seq, swappiness, opt);
mm/vmscan.c
5648
err = run_eviction(lruvec, seq, sc, swappiness, opt);
mm/vmscan.c
5778
void lru_gen_init_lruvec(struct lruvec *lruvec)
mm/vmscan.c
5782
struct lru_gen_folio *lrugen = &lruvec->lrugen;
mm/vmscan.c
5783
struct lru_gen_mm_state *mm_state = get_mm_state(lruvec);
mm/vmscan.c
5820
struct lruvec *lruvec = get_lruvec(memcg, nid);
mm/vmscan.c
5821
struct lru_gen_mm_state *mm_state = get_mm_state(lruvec);
mm/vmscan.c
5823
VM_WARN_ON_ONCE(memchr_inv(lruvec->lrugen.nr_pages, 0,
mm/vmscan.c
5824
sizeof(lruvec->lrugen.nr_pages)));
mm/vmscan.c
5826
lruvec->lrugen.list.next = LIST_POISON1;
mm/vmscan.c
5864
static void lru_gen_shrink_lruvec(struct lruvec *lruvec, struct scan_control *sc)
mm/vmscan.c
5876
static void shrink_lruvec(struct lruvec *lruvec, struct scan_control *sc)
mm/vmscan.c
5888
lru_gen_shrink_lruvec(lruvec, sc);
mm/vmscan.c
5895
get_scan_count(lruvec, sc, nr);
mm/vmscan.c
5926
lruvec, sc);
mm/vmscan.c
5991
if (can_age_anon_pages(lruvec, sc) &&
mm/vmscan.c
5992
inactive_is_low(lruvec, LRU_INACTIVE_ANON))
mm/vmscan.c
5993
shrink_active_list(SWAP_CLUSTER_MAX, lruvec,
mm/vmscan.c
6090
struct lruvec *lruvec = mem_cgroup_lruvec(memcg, pgdat);
mm/vmscan.c
6127
shrink_lruvec(lruvec, sc);
mm/vmscan.c
6149
struct lruvec *target_lruvec;
mm/vmscan.c
6425
struct lruvec *target_lruvec;
mm/vmscan.c
6491
struct lruvec *lruvec;
mm/vmscan.c
6493
lruvec = mem_cgroup_lruvec(sc->target_mem_cgroup,
mm/vmscan.c
6495
clear_bit(LRUVEC_CGROUP_CONGESTED, &lruvec->flags);
mm/vmscan.c
6727
struct lruvec *lruvec = mem_cgroup_lruvec(memcg, pgdat);
mm/vmscan.c
6753
shrink_lruvec(lruvec, &sc);
mm/vmscan.c
6816
struct lruvec *lruvec;
mm/vmscan.c
6826
lruvec = mem_cgroup_lruvec(NULL, pgdat);
mm/vmscan.c
6827
if (!can_age_anon_pages(lruvec, sc))
mm/vmscan.c
6830
if (!inactive_is_low(lruvec, LRU_INACTIVE_ANON))
mm/vmscan.c
6835
lruvec = mem_cgroup_lruvec(memcg, pgdat);
mm/vmscan.c
6836
shrink_active_list(SWAP_CLUSTER_MAX, lruvec,
mm/vmscan.c
6939
struct lruvec *lruvec = mem_cgroup_lruvec(NULL, pgdat);
mm/vmscan.c
6941
clear_bit(LRUVEC_NODE_CONGESTED, &lruvec->flags);
mm/vmscan.c
6942
clear_bit(LRUVEC_CGROUP_CONGESTED, &lruvec->flags);
mm/vmscan.c
7980
struct lruvec *lruvec = NULL;
mm/vmscan.c
7995
lruvec = folio_lruvec_relock_irq(folio, lruvec);
mm/vmscan.c
7997
lruvec_del_folio(lruvec, folio);
mm/vmscan.c
7999
lruvec_add_folio(lruvec, folio);
mm/vmscan.c
8005
if (lruvec) {
mm/vmscan.c
8008
lruvec_unlock_irq(lruvec);
mm/workingset.c
240
struct lruvec *lruvec;
mm/workingset.c
256
lruvec = mem_cgroup_lruvec(memcg, pgdat);
mm/workingset.c
257
lrugen = &lruvec->lrugen;
mm/workingset.c
273
static bool lru_gen_test_recent(void *shadow, struct lruvec **lruvec,
mm/workingset.c
284
*lruvec = mem_cgroup_lruvec(memcg, pgdat);
mm/workingset.c
286
max_seq = READ_ONCE((*lruvec)->lrugen.max_seq);
mm/workingset.c
298
struct lruvec *lruvec;
mm/workingset.c
305
recent = lru_gen_test_recent(shadow, &lruvec, &token, &workingset, type);
mm/workingset.c
306
if (lruvec != folio_lruvec(folio))
mm/workingset.c
309
mod_lruvec_state(lruvec, WORKINGSET_REFAULT_BASE + type, delta);
mm/workingset.c
314
lrugen = &lruvec->lrugen;
mm/workingset.c
328
mod_lruvec_state(lruvec, WORKINGSET_ACTIVATE_BASE + type, delta);
mm/workingset.c
330
mod_lruvec_state(lruvec, WORKINGSET_RESTORE_BASE + type, delta);
mm/workingset.c
344
static bool lru_gen_test_recent(void *shadow, struct lruvec **lruvec,
mm/workingset.c
366
void workingset_age_nonresident(struct lruvec *lruvec, unsigned long nr_pages)
mm/workingset.c
380
atomic_long_add(nr_pages, &lruvec->nonresident_age);
mm/workingset.c
381
} while ((lruvec = parent_lruvec(lruvec)));
mm/workingset.c
397
struct lruvec *lruvec;
mm/workingset.c
408
lruvec = mem_cgroup_lruvec(target_memcg, pgdat);
mm/workingset.c
410
memcgid = mem_cgroup_private_id(lruvec_memcg(lruvec));
mm/workingset.c
411
eviction = atomic_long_read(&lruvec->nonresident_age);
mm/workingset.c
413
workingset_age_nonresident(lruvec, folio_nr_pages(folio));
mm/workingset.c
434
struct lruvec *eviction_lruvec;
mm/workingset.c
552
struct lruvec *lruvec;
mm/workingset.c
574
lruvec = mem_cgroup_lruvec(memcg, folio_pgdat(folio));
mm/workingset.c
575
mod_lruvec_state(lruvec, WORKINGSET_REFAULT_BASE + file, nr);
mm/workingset.c
581
workingset_age_nonresident(lruvec, nr);
mm/workingset.c
582
mod_lruvec_state(lruvec, WORKINGSET_ACTIVATE_BASE + file, nr);
mm/workingset.c
592
mod_lruvec_state(lruvec, WORKINGSET_RESTORE_BASE + file, nr);
mm/workingset.c
691
struct lruvec *lruvec;
mm/workingset.c
695
lruvec = mem_cgroup_lruvec(sc->memcg, NODE_DATA(sc->nid));
mm/workingset.c
698
pages += lruvec_lru_size(lruvec, i, MAX_NR_ZONES - 1);
mm/workingset.c
701
lruvec, NR_SLAB_RECLAIMABLE_B) >> PAGE_SHIFT;
mm/workingset.c
703
lruvec, NR_SLAB_UNRECLAIMABLE_B) >> PAGE_SHIFT;
mm/zswap.c
1194
struct lruvec *lruvec = mem_cgroup_lruvec(memcg, NODE_DATA(sc->nid));
mm/zswap.c
1196
&lruvec->zswap_lruvec_state.nr_disk_swapins;
mm/zswap.c
703
void zswap_lruvec_state_init(struct lruvec *lruvec)
mm/zswap.c
705
atomic_long_set(&lruvec->zswap_lruvec_state.nr_disk_swapins, 0);
mm/zswap.c
710
struct lruvec *lruvec;
mm/zswap.c
714
lruvec = folio_lruvec(folio);
mm/zswap.c
715
atomic_long_inc(&lruvec->zswap_lruvec_state.nr_disk_swapins);