Lines Matching refs:pte

65 	pr_err("%s:%d: bad pte %016llx.\n", __FILE__, __LINE__, pte_val(e))
72 static inline phys_addr_t __pte_to_phys(pte_t pte)
74 return (pte_val(pte) & PTE_ADDR_LOW) |
75 ((pte_val(pte) & PTE_ADDR_HIGH) << 36);
82 #define __pte_to_phys(pte) (pte_val(pte) & PTE_ADDR_MASK)
86 #define pte_pfn(pte) (__pte_to_phys(pte) >> PAGE_SHIFT)
90 #define pte_none(pte) (!pte_val(pte))
92 #define pte_page(pte) (pfn_to_page(pte_pfn(pte)))
97 #define pte_present(pte) (!!(pte_val(pte) & (PTE_VALID | PTE_PROT_NONE)))
98 #define pte_young(pte) (!!(pte_val(pte) & PTE_AF))
99 #define pte_special(pte) (!!(pte_val(pte) & PTE_SPECIAL))
100 #define pte_write(pte) (!!(pte_val(pte) & PTE_WRITE))
101 #define pte_user_exec(pte) (!(pte_val(pte) & PTE_UXN))
102 #define pte_cont(pte) (!!(pte_val(pte) & PTE_CONT))
103 #define pte_devmap(pte) (!!(pte_val(pte) & PTE_DEVMAP))
104 #define pte_tagged(pte) ((pte_val(pte) & PTE_ATTRINDX_MASK) == \
117 #define pte_hw_dirty(pte) (pte_write(pte) && !(pte_val(pte) & PTE_RDONLY))
118 #define pte_sw_dirty(pte) (!!(pte_val(pte) & PTE_DIRTY))
119 #define pte_dirty(pte) (pte_sw_dirty(pte) || pte_hw_dirty(pte))
121 #define pte_valid(pte) (!!(pte_val(pte) & PTE_VALID))
122 #define pte_valid_not_user(pte) \
123 ((pte_val(pte) & (PTE_VALID | PTE_USER)) == PTE_VALID)
124 #define pte_valid_user(pte) \
125 ((pte_val(pte) & (PTE_VALID | PTE_USER)) == (PTE_VALID | PTE_USER))
128 * Could the pte be present in the TLB? We must check mm_tlb_flush_pending
135 #define pte_accessible(mm, pte) \
136 (mm_tlb_flush_pending(mm) ? pte_present(pte) : pte_valid(pte))
143 #define pte_access_permitted(pte, write) \
144 (pte_valid_user(pte) && (!(write) || pte_write(pte)))
150 static inline pte_t clear_pte_bit(pte_t pte, pgprot_t prot)
152 pte_val(pte) &= ~pgprot_val(prot);
153 return pte;
156 static inline pte_t set_pte_bit(pte_t pte, pgprot_t prot)
158 pte_val(pte) |= pgprot_val(prot);
159 return pte;
174 static inline pte_t pte_mkwrite(pte_t pte)
176 pte = set_pte_bit(pte, __pgprot(PTE_WRITE));
177 pte = clear_pte_bit(pte, __pgprot(PTE_RDONLY));
178 return pte;
181 static inline pte_t pte_mkclean(pte_t pte)
183 pte = clear_pte_bit(pte, __pgprot(PTE_DIRTY));
184 pte = set_pte_bit(pte, __pgprot(PTE_RDONLY));
186 return pte;
189 static inline pte_t pte_mkdirty(pte_t pte)
191 pte = set_pte_bit(pte, __pgprot(PTE_DIRTY));
193 if (pte_write(pte))
194 pte = clear_pte_bit(pte, __pgprot(PTE_RDONLY));
196 return pte;
199 static inline pte_t pte_wrprotect(pte_t pte)
205 if (pte_hw_dirty(pte))
206 pte = pte_mkdirty(pte);
208 pte = clear_pte_bit(pte, __pgprot(PTE_WRITE));
209 pte = set_pte_bit(pte, __pgprot(PTE_RDONLY));
210 return pte;
213 static inline pte_t pte_mkold(pte_t pte)
215 return clear_pte_bit(pte, __pgprot(PTE_AF));
218 static inline pte_t pte_mkyoung(pte_t pte)
220 return set_pte_bit(pte, __pgprot(PTE_AF));
223 static inline pte_t pte_mkspecial(pte_t pte)
225 return set_pte_bit(pte, __pgprot(PTE_SPECIAL));
228 static inline pte_t pte_mkcont(pte_t pte)
230 pte = set_pte_bit(pte, __pgprot(PTE_CONT));
231 return set_pte_bit(pte, __pgprot(PTE_TYPE_PAGE));
234 static inline pte_t pte_mknoncont(pte_t pte)
236 return clear_pte_bit(pte, __pgprot(PTE_CONT));
239 static inline pte_t pte_mkpresent(pte_t pte)
241 return set_pte_bit(pte, __pgprot(PTE_VALID));
249 static inline pte_t pte_mkdevmap(pte_t pte)
251 return set_pte_bit(pte, __pgprot(PTE_DEVMAP | PTE_SPECIAL));
254 static inline void set_pte(pte_t *ptep, pte_t pte)
256 WRITE_ONCE(*ptep, pte);
259 * Only if the new pte is valid and kernel, otherwise TLB maintenance
262 if (pte_valid_not_user(pte)) {
281 * the page fault mechanism. Checking the dirty status of a pte becomes:
287 pte_t pte)
296 if (!pte_valid(old_pte) || !pte_valid(pte))
302 * Check for potential race with hardware updates of the pte
306 VM_WARN_ONCE(!pte_young(pte),
308 __func__, pte_val(old_pte), pte_val(pte));
309 VM_WARN_ONCE(pte_write(old_pte) && !pte_dirty(pte),
311 __func__, pte_val(old_pte), pte_val(pte));
315 pte_t *ptep, pte_t pte)
317 if (pte_present(pte) && pte_user_exec(pte) && !pte_special(pte))
318 __sync_icache_dcache(pte);
321 pte_present(pte) && pte_tagged(pte) && !pte_special(pte))
322 mte_sync_tags(ptep, pte);
324 __check_racy_pte_update(mm, ptep, pte);
326 set_pte(ptep, pte);
330 * Huge pte definitions.
332 #define pte_mkhuge(pte) (__pte(pte_val(pte) & ~PTE_TABLE_BIT))
358 static inline pud_t pte_pud(pte_t pte)
360 return __pud(pte_val(pte));
373 static inline pmd_t pte_pmd(pte_t pte)
375 return __pmd(pte_val(pte));
392 static inline int pte_protnone(pte_t pte)
394 return (pte_val(pte) & (PTE_VALID | PTE_PROT_NONE)) == PTE_PROT_NONE;
734 static inline pte_t pte_modify(pte_t pte, pgprot_t newprot)
744 if (pte_hw_dirty(pte))
745 pte = pte_mkdirty(pte);
746 pte_val(pte) = (pte_val(pte) & ~mask) | (pgprot_val(newprot) & mask);
751 if (pte_sw_dirty(pte))
752 pte = pte_mkdirty(pte);
753 return pte;
787 * Atomic pte/pmd modifications.
792 pte_t old_pte, pte;
794 pte = READ_ONCE(*ptep);
796 old_pte = pte;
797 pte = pte_mkold(pte);
798 pte_val(pte) = cmpxchg_relaxed(&pte_val(*ptep),
799 pte_val(old_pte), pte_val(pte));
800 } while (pte_val(pte) != pte_val(old_pte));
802 return pte_young(pte);
866 pte_t old_pte, pte;
868 pte = READ_ONCE(*ptep);
870 old_pte = pte;
871 pte = pte_wrprotect(pte);
872 pte_val(pte) = cmpxchg_relaxed(&pte_val(*ptep),
873 pte_val(old_pte), pte_val(pte));
874 } while (pte_val(pte) != pte_val(old_pte));
911 #define __pte_to_swp_entry(pte) ((swp_entry_t) { pte_val(pte) })
982 * the pte is old and cannot be marked young. So we always end up with zeroed