Lines Matching defs:folio
231 static void *lru_gen_eviction(struct folio *folio)
238 int type = folio_is_file_lru(folio);
239 int delta = folio_nr_pages(folio);
240 int refs = folio_lru_refs(folio);
242 struct mem_cgroup *memcg = folio_memcg(folio);
243 struct pglist_data *pgdat = folio_pgdat(folio);
259 * Tests if the shadow entry is for a folio that was recently evicted.
279 static void lru_gen_refault(struct folio *folio, void *shadow)
287 int type = folio_is_file_lru(folio);
288 int delta = folio_nr_pages(folio);
293 if (lruvec != folio_lruvec(folio))
319 set_mask_bits(&folio->flags, 0, LRU_REFS_MASK | BIT(PG_workingset));
328 static void *lru_gen_eviction(struct folio *folio)
339 static void lru_gen_refault(struct folio *folio, void *shadow)
374 * workingset_eviction - note the eviction of a folio from memory
376 * @folio: the folio being evicted
378 * Return: a shadow entry to be stored in @folio->mapping->i_pages in place
379 * of the evicted @folio so that a later refault can be detected.
381 void *workingset_eviction(struct folio *folio, struct mem_cgroup *target_memcg)
383 struct pglist_data *pgdat = folio_pgdat(folio);
388 /* Folio is fully exclusive and pins folio's memory cgroup pointer */
389 VM_BUG_ON_FOLIO(folio_test_lru(folio), folio);
390 VM_BUG_ON_FOLIO(folio_ref_count(folio), folio);
391 VM_BUG_ON_FOLIO(!folio_test_locked(folio), folio);
394 return lru_gen_eviction(folio);
402 if (!is_prot_page(folio_page(folio, 0)) && page_is_file_lru(folio_page(folio, 0))) {
403 lruvec = folio_lruvec(folio);
404 workingset_age_nonresident(lruvec, folio_nr_pages(folio));
406 workingset_age_nonresident(lruvec, folio_nr_pages(folio));
409 workingset_age_nonresident(lruvec, folio_nr_pages(folio));
412 folio_test_workingset(folio));
416 * workingset_test_recent - tests if the shadow entry is for a folio that was
420 * @file: whether the corresponding folio is from the file lru.
424 * Return: true if the shadow is for a recently evicted folio; false otherwise.
445 * have been deleted since the folio's eviction.
448 * for a new cgroup that refaults a shared folio. This is
528 * workingset_refault - Evaluate the refault of a previously evicted folio.
529 * @folio: The freshly allocated replacement folio.
530 * @shadow: Shadow entry of the evicted folio.
533 * evicted folio in the context of the node and the memcg whose memory
536 void workingset_refault(struct folio *folio, void *shadow)
538 bool file = folio_is_file_lru(folio);
546 lru_gen_refault(folio, shadow);
556 * The activation decision for this folio is made at the level
558 * during folio reclaim is being determined.
560 * However, the cgroup that will own the folio is the one that
563 nr = folio_nr_pages(folio);
564 memcg = folio_memcg(folio);
565 pgdat = folio_pgdat(folio);
569 if (!is_prot_page(folio_page(folio, 0)) && file)
571 WORKINGSET_REFAULT_BASE + file, folio_nr_pages(folio));
581 folio_set_active(folio);
583 if (!is_prot_page(folio_page(folio, 0)) && file) {
585 folio_nr_pages(folio));
586 mod_lruvec_state(lruvec, WORKINGSET_ACTIVATE_BASE + file, folio_nr_pages(folio));
598 folio_set_workingset(folio);
603 lru_note_cost_refault(folio);
605 if (!is_prot_page(folio_page(folio, 0)) && file)
606 mod_lruvec_state(node_lruvec(pgdat), WORKINGSET_RESTORE_BASE + file, folio_nr_pages(folio));
619 * @folio: Folio that is being activated.
621 void workingset_activation(struct folio *folio)
634 memcg = folio_memcg_rcu(folio);
638 if (!is_prot_page(folio_page(folio, 0)) && page_is_file_lru(folio_page(folio, 0))) {
639 lruvec = folio_lruvec(folio);
640 workingset_age_nonresident(lruvec, folio_nr_pages(folio));
642 workingset_age_nonresident(folio_lruvec(folio), folio_nr_pages(folio));
645 workingset_age_nonresident(folio_lruvec(folio), folio_nr_pages(folio));