vmscan.c (f2bb566f5c977ff010baaa9e5e14d9a75b06e5f2) vmscan.c (4aaf269c768dbacd6268af73fda2ffccaa3f1d88)
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.

--- 3973 unchanged lines hidden (view full) ---

3982 struct folio *folio;
3983 unsigned long addr = i ? (*start & PMD_MASK) + i * PMD_SIZE : *start;
3984
3985 pfn = get_pmd_pfn(pmd[i], vma, addr);
3986 if (pfn == -1)
3987 goto next;
3988
3989 if (!pmd_trans_huge(pmd[i])) {
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.

--- 3973 unchanged lines hidden (view full) ---

3982 struct folio *folio;
3983 unsigned long addr = i ? (*start & PMD_MASK) + i * PMD_SIZE : *start;
3984
3985 pfn = get_pmd_pfn(pmd[i], vma, addr);
3986 if (pfn == -1)
3987 goto next;
3988
3989 if (!pmd_trans_huge(pmd[i])) {
3990 if (IS_ENABLED(CONFIG_ARCH_HAS_NONLEAF_PMD_YOUNG) &&
3990 if (arch_has_hw_nonleaf_pmd_young() &&
3991 get_cap(LRU_GEN_NONLEAF_YOUNG))
3992 pmdp_test_and_clear_young(vma, addr, pmd + i);
3993 goto next;
3994 }
3995
3996 folio = get_pfn_folio(pfn, memcg, pgdat, walk->can_swap);
3997 if (!folio)
3998 goto next;

--- 81 unchanged lines hidden (view full) ---

4080 continue;
4081
4082 walk_pmd_range_locked(pud, addr, vma, args, bitmap, &pos);
4083 continue;
4084 }
4085#endif
4086 walk->mm_stats[MM_NONLEAF_TOTAL]++;
4087
3991 get_cap(LRU_GEN_NONLEAF_YOUNG))
3992 pmdp_test_and_clear_young(vma, addr, pmd + i);
3993 goto next;
3994 }
3995
3996 folio = get_pfn_folio(pfn, memcg, pgdat, walk->can_swap);
3997 if (!folio)
3998 goto next;

--- 81 unchanged lines hidden (view full) ---

4080 continue;
4081
4082 walk_pmd_range_locked(pud, addr, vma, args, bitmap, &pos);
4083 continue;
4084 }
4085#endif
4086 walk->mm_stats[MM_NONLEAF_TOTAL]++;
4087
4088#ifdef CONFIG_ARCH_HAS_NONLEAF_PMD_YOUNG
4089 if (get_cap(LRU_GEN_NONLEAF_YOUNG)) {
4088 if (arch_has_hw_nonleaf_pmd_young() &&
4089 get_cap(LRU_GEN_NONLEAF_YOUNG)) {
4090 if (!pmd_young(val))
4091 continue;
4092
4093 walk_pmd_range_locked(pud, addr, vma, args, bitmap, &pos);
4094 }
4090 if (!pmd_young(val))
4091 continue;
4092
4093 walk_pmd_range_locked(pud, addr, vma, args, bitmap, &pos);
4094 }
4095#endif
4095
4096 if (!walk->force_scan && !test_bloom_filter(walk->lruvec, walk->max_seq, pmd + i))
4097 continue;
4098
4099 walk->mm_stats[MM_NONLEAF_FOUND]++;
4100
4101 if (!walk_pte_range(&val, addr, next, args))
4102 continue;
4103

--- 1283 unchanged lines hidden (view full) ---

5387 unsigned int caps = 0;
5388
5389 if (get_cap(LRU_GEN_CORE))
5390 caps |= BIT(LRU_GEN_CORE);
5391
5392 if (arch_has_hw_pte_young() && get_cap(LRU_GEN_MM_WALK))
5393 caps |= BIT(LRU_GEN_MM_WALK);
5394
4096 if (!walk->force_scan && !test_bloom_filter(walk->lruvec, walk->max_seq, pmd + i))
4097 continue;
4098
4099 walk->mm_stats[MM_NONLEAF_FOUND]++;
4100
4101 if (!walk_pte_range(&val, addr, next, args))
4102 continue;
4103

--- 1283 unchanged lines hidden (view full) ---

5387 unsigned int caps = 0;
5388
5389 if (get_cap(LRU_GEN_CORE))
5390 caps |= BIT(LRU_GEN_CORE);
5391
5392 if (arch_has_hw_pte_young() && get_cap(LRU_GEN_MM_WALK))
5393 caps |= BIT(LRU_GEN_MM_WALK);
5394
5395 if (IS_ENABLED(CONFIG_ARCH_HAS_NONLEAF_PMD_YOUNG) && get_cap(LRU_GEN_NONLEAF_YOUNG))
5395 if (arch_has_hw_nonleaf_pmd_young() && get_cap(LRU_GEN_NONLEAF_YOUNG))
5396 caps |= BIT(LRU_GEN_NONLEAF_YOUNG);
5397
5398 return snprintf(buf, PAGE_SIZE, "0x%04x\n", caps);
5399}
5400
5401/* see Documentation/admin-guide/mm/multigen_lru.rst for details */
5402static ssize_t store_enabled(struct kobject *kobj, struct kobj_attribute *attr,
5403 const char *buf, size_t len)

--- 2361 unchanged lines hidden ---
5396 caps |= BIT(LRU_GEN_NONLEAF_YOUNG);
5397
5398 return snprintf(buf, PAGE_SIZE, "0x%04x\n", caps);
5399}
5400
5401/* see Documentation/admin-guide/mm/multigen_lru.rst for details */
5402static ssize_t store_enabled(struct kobject *kobj, struct kobj_attribute *attr,
5403 const char *buf, size_t len)

--- 2361 unchanged lines hidden ---