aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJungseung Lee <js07.lee@gmail.com>2014-11-28 21:03:51 -0500
committerRussell King <rmk+kernel@arm.linux.org.uk>2014-12-03 11:00:06 -0500
commit1f92f77ab68a012638afa9e001b7a1e1e5197930 (patch)
tree9c11b241e712386db81afc5c8fa20d2e386cc03a
parent4e802cfd74e6351cb937997996de9ca2e67df9f2 (diff)
ARM: 8239/1: Introduce {set,clear}_pte_bit
Introduce helper functions for pte_mk* functions and it would be used to change individual bits in ptes at times. Signed-off-by: Jungseung Lee <js07.lee@gmail.com> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
-rw-r--r--arch/arm/include/asm/pgtable.h62
1 files changed, 51 insertions, 11 deletions
diff --git a/arch/arm/include/asm/pgtable.h b/arch/arm/include/asm/pgtable.h
index 3b30062975b2..d5cac545ba33 100644
--- a/arch/arm/include/asm/pgtable.h
+++ b/arch/arm/include/asm/pgtable.h
@@ -252,17 +252,57 @@ static inline void set_pte_at(struct mm_struct *mm, unsigned long addr,
252 set_pte_ext(ptep, pteval, ext); 252 set_pte_ext(ptep, pteval, ext);
253} 253}
254 254
255#define PTE_BIT_FUNC(fn,op) \ 255static inline pte_t clear_pte_bit(pte_t pte, pgprot_t prot)
256static inline pte_t pte_##fn(pte_t pte) { pte_val(pte) op; return pte; } 256{
257 257 pte_val(pte) &= ~pgprot_val(prot);
258PTE_BIT_FUNC(wrprotect, |= L_PTE_RDONLY); 258 return pte;
259PTE_BIT_FUNC(mkwrite, &= ~L_PTE_RDONLY); 259}
260PTE_BIT_FUNC(mkclean, &= ~L_PTE_DIRTY); 260
261PTE_BIT_FUNC(mkdirty, |= L_PTE_DIRTY); 261static inline pte_t set_pte_bit(pte_t pte, pgprot_t prot)
262PTE_BIT_FUNC(mkold, &= ~L_PTE_YOUNG); 262{
263PTE_BIT_FUNC(mkyoung, |= L_PTE_YOUNG); 263 pte_val(pte) |= pgprot_val(prot);
264PTE_BIT_FUNC(mkexec, &= ~L_PTE_XN); 264 return pte;
265PTE_BIT_FUNC(mknexec, |= L_PTE_XN); 265}
266
267static inline pte_t pte_wrprotect(pte_t pte)
268{
269 return set_pte_bit(pte, __pgprot(L_PTE_RDONLY));
270}
271
272static inline pte_t pte_mkwrite(pte_t pte)
273{
274 return clear_pte_bit(pte, __pgprot(L_PTE_RDONLY));
275}
276
277static inline pte_t pte_mkclean(pte_t pte)
278{
279 return clear_pte_bit(pte, __pgprot(L_PTE_DIRTY));
280}
281
282static inline pte_t pte_mkdirty(pte_t pte)
283{
284 return set_pte_bit(pte, __pgprot(L_PTE_DIRTY));
285}
286
287static inline pte_t pte_mkold(pte_t pte)
288{
289 return clear_pte_bit(pte, __pgprot(L_PTE_YOUNG));
290}
291
292static inline pte_t pte_mkyoung(pte_t pte)
293{
294 return set_pte_bit(pte, __pgprot(L_PTE_YOUNG));
295}
296
297static inline pte_t pte_mkexec(pte_t pte)
298{
299 return clear_pte_bit(pte, __pgprot(L_PTE_XN));
300}
301
302static inline pte_t pte_mknexec(pte_t pte)
303{
304 return set_pte_bit(pte, __pgprot(L_PTE_XN));
305}
266 306
267static inline pte_t pte_modify(pte_t pte, pgprot_t newprot) 307static inline pte_t pte_modify(pte_t pte, pgprot_t newprot)
268{ 308{