vmscan.c (f1e1a7be4718609042e3285bc2110d74825ad9d1) | vmscan.c (ec1c86b25f4bdd9dce6436c0539d2a6ae676e1c4) |
---|---|
1// SPDX-License-Identifier: GPL-2.0 2/* 3 * Copyright (C) 1991, 1992, 1993, 1994 Linus Torvalds 4 * 5 * Swap reorganised 29.12.95, Stephen Tweedie. 6 * kswapd added: 7.1.96 sct 7 * Removed kswapd_ctl limits, and swap out as many pages as needed 8 * to bring the system back to freepages.high: 2.4.97, Rik van Riel. --- 3036 unchanged lines hidden (view full) --- 3045 /* Aging the anon LRU is valuable if swap is present: */ 3046 if (total_swap_pages > 0) 3047 return true; 3048 3049 /* Also valuable if anon pages can be demoted: */ 3050 return can_demote(pgdat->node_id, sc); 3051} 3052 | 1// SPDX-License-Identifier: GPL-2.0 2/* 3 * Copyright (C) 1991, 1992, 1993, 1994 Linus Torvalds 4 * 5 * Swap reorganised 29.12.95, Stephen Tweedie. 6 * kswapd added: 7.1.96 sct 7 * Removed kswapd_ctl limits, and swap out as many pages as needed 8 * to bring the system back to freepages.high: 2.4.97, Rik van Riel. --- 3036 unchanged lines hidden (view full) --- 3045 /* Aging the anon LRU is valuable if swap is present: */ 3046 if (total_swap_pages > 0) 3047 return true; 3048 3049 /* Also valuable if anon pages can be demoted: */ 3050 return can_demote(pgdat->node_id, sc); 3051} 3052 |
3053#ifdef CONFIG_LRU_GEN 3054 3055/****************************************************************************** 3056 * shorthand helpers 3057 ******************************************************************************/ 3058 3059#define for_each_gen_type_zone(gen, type, zone) \ 3060 for ((gen) = 0; (gen) < MAX_NR_GENS; (gen)++) \ 3061 for ((type) = 0; (type) < ANON_AND_FILE; (type)++) \ 3062 for ((zone) = 0; (zone) < MAX_NR_ZONES; (zone)++) 3063 3064static struct lruvec __maybe_unused *get_lruvec(struct mem_cgroup *memcg, int nid) 3065{ 3066 struct pglist_data *pgdat = NODE_DATA(nid); 3067 3068#ifdef CONFIG_MEMCG 3069 if (memcg) { 3070 struct lruvec *lruvec = &memcg->nodeinfo[nid]->lruvec; 3071 3072 /* for hotadd_new_pgdat() */ 3073 if (!lruvec->pgdat) 3074 lruvec->pgdat = pgdat; 3075 3076 return lruvec; 3077 } 3078#endif 3079 VM_WARN_ON_ONCE(!mem_cgroup_disabled()); 3080 3081 return pgdat ? &pgdat->__lruvec : NULL; 3082} 3083 3084/****************************************************************************** 3085 * initialization 3086 ******************************************************************************/ 3087 3088void lru_gen_init_lruvec(struct lruvec *lruvec) 3089{ 3090 int gen, type, zone; 3091 struct lru_gen_struct *lrugen = &lruvec->lrugen; 3092 3093 lrugen->max_seq = MIN_NR_GENS + 1; 3094 3095 for_each_gen_type_zone(gen, type, zone) 3096 INIT_LIST_HEAD(&lrugen->lists[gen][type][zone]); 3097} 3098 3099#ifdef CONFIG_MEMCG 3100void lru_gen_init_memcg(struct mem_cgroup *memcg) 3101{ 3102} 3103 3104void lru_gen_exit_memcg(struct mem_cgroup *memcg) 3105{ 3106 int nid; 3107 3108 for_each_node(nid) { 3109 struct lruvec *lruvec = get_lruvec(memcg, nid); 3110 3111 VM_WARN_ON_ONCE(memchr_inv(lruvec->lrugen.nr_pages, 0, 3112 sizeof(lruvec->lrugen.nr_pages))); 3113 } 3114} 3115#endif 3116 3117static int __init init_lru_gen(void) 3118{ 3119 BUILD_BUG_ON(MIN_NR_GENS + 1 >= MAX_NR_GENS); 3120 BUILD_BUG_ON(BIT(LRU_GEN_WIDTH) <= MAX_NR_GENS); 3121 3122 return 0; 3123}; 3124late_initcall(init_lru_gen); 3125 3126#endif /* CONFIG_LRU_GEN */ 3127 |
|
3053static void shrink_lruvec(struct lruvec *lruvec, struct scan_control *sc) 3054{ 3055 unsigned long nr[NR_LRU_LISTS]; 3056 unsigned long targets[NR_LRU_LISTS]; 3057 unsigned long nr_to_scan; 3058 enum lru_list lru; 3059 unsigned long nr_reclaimed = 0; 3060 unsigned long nr_to_reclaim = sc->nr_to_reclaim; --- 1871 unchanged lines hidden --- | 3128static void shrink_lruvec(struct lruvec *lruvec, struct scan_control *sc) 3129{ 3130 unsigned long nr[NR_LRU_LISTS]; 3131 unsigned long targets[NR_LRU_LISTS]; 3132 unsigned long nr_to_scan; 3133 enum lru_list lru; 3134 unsigned long nr_reclaimed = 0; 3135 unsigned long nr_to_reclaim = sc->nr_to_reclaim; --- 1871 unchanged lines hidden --- |