Lines Matching refs:ptdesc
21 struct ptdesc *ptdesc; in pte_frag_destroy() local
23 ptdesc = virt_to_ptdesc(pte_frag); in pte_frag_destroy()
27 if (atomic_sub_and_test(PTE_FRAG_NR - count, &ptdesc->pt_frag_refcount)) { in pte_frag_destroy()
28 pagetable_dtor(ptdesc); in pte_frag_destroy()
29 pagetable_free(ptdesc); in pte_frag_destroy()
58 struct ptdesc *ptdesc; in __alloc_for_ptecache() local
64 ptdesc = pagetable_alloc(gfp, 0); in __alloc_for_ptecache()
65 if (!ptdesc) in __alloc_for_ptecache()
67 if (!pagetable_pte_ctor(mm, ptdesc)) { in __alloc_for_ptecache()
68 pagetable_free(ptdesc); in __alloc_for_ptecache()
72 atomic_set(&ptdesc->pt_frag_refcount, 1); in __alloc_for_ptecache()
74 ret = ptdesc_address(ptdesc); in __alloc_for_ptecache()
88 atomic_set(&ptdesc->pt_frag_refcount, PTE_FRAG_NR); in __alloc_for_ptecache()
109 struct ptdesc *ptdesc; in pte_free_now() local
111 ptdesc = container_of(head, struct ptdesc, pt_rcu_head); in pte_free_now()
112 pagetable_dtor(ptdesc); in pte_free_now()
113 pagetable_free(ptdesc); in pte_free_now()
118 struct ptdesc *ptdesc = virt_to_ptdesc(table); in pte_fragment_free() local
120 if (pagetable_is_reserved(ptdesc)) in pte_fragment_free()
121 return free_reserved_ptdesc(ptdesc); in pte_fragment_free()
123 BUG_ON(atomic_read(&ptdesc->pt_frag_refcount) <= 0); in pte_fragment_free()
124 if (atomic_dec_and_test(&ptdesc->pt_frag_refcount)) { in pte_fragment_free()
125 if (kernel || !folio_test_clear_active(ptdesc_folio(ptdesc))) in pte_fragment_free()
126 pte_free_now(&ptdesc->pt_rcu_head); in pte_fragment_free()
128 call_rcu(&ptdesc->pt_rcu_head, pte_free_now); in pte_fragment_free()