Lines Matching refs:pte
70 static inline phys_addr_t __pte_to_phys(pte_t pte) in __pte_to_phys() argument
72 return (pte_val(pte) & PTE_ADDR_LOW) | in __pte_to_phys()
73 ((pte_val(pte) & PTE_ADDR_HIGH) << 36); in __pte_to_phys()
80 #define __pte_to_phys(pte) (pte_val(pte) & PTE_ADDR_MASK) argument
84 #define pte_pfn(pte) (__pte_to_phys(pte) >> PAGE_SHIFT) argument
88 #define pte_none(pte) (!pte_val(pte)) argument
90 #define pte_page(pte) (pfn_to_page(pte_pfn(pte))) argument
95 #define pte_present(pte) (!!(pte_val(pte) & (PTE_VALID | PTE_PROT_NONE))) argument
96 #define pte_young(pte) (!!(pte_val(pte) & PTE_AF)) argument
97 #define pte_special(pte) (!!(pte_val(pte) & PTE_SPECIAL)) argument
98 #define pte_write(pte) (!!(pte_val(pte) & PTE_WRITE)) argument
99 #define pte_user_exec(pte) (!(pte_val(pte) & PTE_UXN)) argument
100 #define pte_cont(pte) (!!(pte_val(pte) & PTE_CONT)) argument
101 #define pte_devmap(pte) (!!(pte_val(pte) & PTE_DEVMAP)) argument
102 #define pte_tagged(pte) ((pte_val(pte) & PTE_ATTRINDX_MASK) == \ argument
115 #define pte_hw_dirty(pte) (pte_write(pte) && !(pte_val(pte) & PTE_RDONLY)) argument
116 #define pte_sw_dirty(pte) (!!(pte_val(pte) & PTE_DIRTY)) argument
117 #define pte_dirty(pte) (pte_sw_dirty(pte) || pte_hw_dirty(pte)) argument
119 #define pte_valid(pte) (!!(pte_val(pte) & PTE_VALID)) argument
124 #define pte_valid_not_user(pte) \ argument
125 ((pte_val(pte) & (PTE_VALID | PTE_USER | PTE_UXN)) == (PTE_VALID | PTE_UXN))
134 #define pte_accessible(mm, pte) \ argument
135 (mm_tlb_flush_pending(mm) ? pte_present(pte) : pte_valid(pte))
144 #define pte_access_permitted(pte, write) \ argument
145 …(((pte_val(pte) & (PTE_VALID | PTE_USER)) == (PTE_VALID | PTE_USER)) && (!(write) || pte_write(pte…
151 static inline pte_t clear_pte_bit(pte_t pte, pgprot_t prot) in clear_pte_bit() argument
153 pte_val(pte) &= ~pgprot_val(prot); in clear_pte_bit()
154 return pte; in clear_pte_bit()
157 static inline pte_t set_pte_bit(pte_t pte, pgprot_t prot) in set_pte_bit() argument
159 pte_val(pte) |= pgprot_val(prot); in set_pte_bit()
160 return pte; in set_pte_bit()
175 static inline pte_t pte_mkwrite(pte_t pte) in pte_mkwrite() argument
177 pte = set_pte_bit(pte, __pgprot(PTE_WRITE)); in pte_mkwrite()
178 pte = clear_pte_bit(pte, __pgprot(PTE_RDONLY)); in pte_mkwrite()
179 return pte; in pte_mkwrite()
182 static inline pte_t pte_mkclean(pte_t pte) in pte_mkclean() argument
184 pte = clear_pte_bit(pte, __pgprot(PTE_DIRTY)); in pte_mkclean()
185 pte = set_pte_bit(pte, __pgprot(PTE_RDONLY)); in pte_mkclean()
187 return pte; in pte_mkclean()
190 static inline pte_t pte_mkdirty(pte_t pte) in pte_mkdirty() argument
192 pte = set_pte_bit(pte, __pgprot(PTE_DIRTY)); in pte_mkdirty()
194 if (pte_write(pte)) in pte_mkdirty()
195 pte = clear_pte_bit(pte, __pgprot(PTE_RDONLY)); in pte_mkdirty()
197 return pte; in pte_mkdirty()
200 static inline pte_t pte_wrprotect(pte_t pte) in pte_wrprotect() argument
206 if (pte_hw_dirty(pte)) in pte_wrprotect()
207 pte = pte_mkdirty(pte); in pte_wrprotect()
209 pte = clear_pte_bit(pte, __pgprot(PTE_WRITE)); in pte_wrprotect()
210 pte = set_pte_bit(pte, __pgprot(PTE_RDONLY)); in pte_wrprotect()
211 return pte; in pte_wrprotect()
214 static inline pte_t pte_mkold(pte_t pte) in pte_mkold() argument
216 return clear_pte_bit(pte, __pgprot(PTE_AF)); in pte_mkold()
219 static inline pte_t pte_mkyoung(pte_t pte) in pte_mkyoung() argument
221 return set_pte_bit(pte, __pgprot(PTE_AF)); in pte_mkyoung()
224 static inline pte_t pte_mkspecial(pte_t pte) in pte_mkspecial() argument
226 return set_pte_bit(pte, __pgprot(PTE_SPECIAL)); in pte_mkspecial()
229 static inline pte_t pte_mkcont(pte_t pte) in pte_mkcont() argument
231 pte = set_pte_bit(pte, __pgprot(PTE_CONT)); in pte_mkcont()
232 return set_pte_bit(pte, __pgprot(PTE_TYPE_PAGE)); in pte_mkcont()
235 static inline pte_t pte_mknoncont(pte_t pte) in pte_mknoncont() argument
237 return clear_pte_bit(pte, __pgprot(PTE_CONT)); in pte_mknoncont()
240 static inline pte_t pte_mkpresent(pte_t pte) in pte_mkpresent() argument
242 return set_pte_bit(pte, __pgprot(PTE_VALID)); in pte_mkpresent()
250 static inline pte_t pte_mkdevmap(pte_t pte) in pte_mkdevmap() argument
252 return set_pte_bit(pte, __pgprot(PTE_DEVMAP | PTE_SPECIAL)); in pte_mkdevmap()
255 static inline void set_pte(pte_t *ptep, pte_t pte) in set_pte() argument
257 WRITE_ONCE(*ptep, pte); in set_pte()
263 if (pte_valid_not_user(pte)) { in set_pte()
288 pte_t pte) in __check_racy_pte_update() argument
297 if (!pte_valid(old_pte) || !pte_valid(pte)) in __check_racy_pte_update()
307 VM_WARN_ONCE(!pte_young(pte), in __check_racy_pte_update()
309 __func__, pte_val(old_pte), pte_val(pte)); in __check_racy_pte_update()
310 VM_WARN_ONCE(pte_write(old_pte) && !pte_dirty(pte), in __check_racy_pte_update()
312 __func__, pte_val(old_pte), pte_val(pte)); in __check_racy_pte_update()
316 pte_t *ptep, pte_t pte) in set_pte_at() argument
318 if (pte_present(pte) && pte_user_exec(pte) && !pte_special(pte)) in set_pte_at()
319 __sync_icache_dcache(pte); in set_pte_at()
327 if (system_supports_mte() && pte_access_permitted(pte, false) && in set_pte_at()
328 !pte_special(pte)) { in set_pte_at()
337 if (pte_tagged(pte) || (!pte_none(old_pte) && !pte_present(old_pte))) in set_pte_at()
338 mte_sync_tags(old_pte, pte); in set_pte_at()
341 __check_racy_pte_update(mm, ptep, pte); in set_pte_at()
343 set_pte(ptep, pte); in set_pte_at()
349 #define pte_mkhuge(pte) (__pte(pte_val(pte) & ~PTE_TABLE_BIT)) argument
375 static inline pud_t pte_pud(pte_t pte) in pte_pud() argument
377 return __pud(pte_val(pte)); in pte_pud()
390 static inline pmd_t pte_pmd(pte_t pte) in pte_pmd() argument
392 return __pmd(pte_val(pte)); in pte_pmd()
409 static inline int pte_protnone(pte_t pte) in pte_protnone() argument
411 return (pte_val(pte) & (PTE_VALID | PTE_PROT_NONE)) == PTE_PROT_NONE; in pte_protnone()
542 #define pte_leaf_size(pte) (pte_cont(pte) ? CONT_PTE_SIZE : PAGE_SIZE) argument
756 static inline pte_t pte_modify(pte_t pte, pgprot_t newprot) in pte_modify() argument
766 if (pte_hw_dirty(pte)) in pte_modify()
767 pte = pte_mkdirty(pte); in pte_modify()
768 pte_val(pte) = (pte_val(pte) & ~mask) | (pgprot_val(newprot) & mask); in pte_modify()
769 return pte; in pte_modify()
808 pte_t old_pte, pte; in __ptep_test_and_clear_young() local
810 pte = READ_ONCE(*ptep); in __ptep_test_and_clear_young()
812 old_pte = pte; in __ptep_test_and_clear_young()
813 pte = pte_mkold(pte); in __ptep_test_and_clear_young()
814 pte_val(pte) = cmpxchg_relaxed(&pte_val(*ptep), in __ptep_test_and_clear_young()
815 pte_val(old_pte), pte_val(pte)); in __ptep_test_and_clear_young()
816 } while (pte_val(pte) != pte_val(old_pte)); in __ptep_test_and_clear_young()
818 return pte_young(pte); in __ptep_test_and_clear_young()
882 pte_t old_pte, pte; in ptep_set_wrprotect() local
884 pte = READ_ONCE(*ptep); in ptep_set_wrprotect()
886 old_pte = pte; in ptep_set_wrprotect()
887 pte = pte_wrprotect(pte); in ptep_set_wrprotect()
888 pte_val(pte) = cmpxchg_relaxed(&pte_val(*ptep), in ptep_set_wrprotect()
889 pte_val(old_pte), pte_val(pte)); in ptep_set_wrprotect()
890 } while (pte_val(pte) != pte_val(old_pte)); in ptep_set_wrprotect()
927 #define __pte_to_swp_entry(pte) ((swp_entry_t) { pte_val(pte) }) argument