diff options
author | Jeremy Fitzhardinge <jeremy@goop.org> | 2008-01-30 07:32:56 -0500 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2008-01-30 07:32:56 -0500 |
commit | 4614139c6a74fe02c85f702ba9c0e57f8e38647e (patch) | |
tree | c5d2145a98ecdd5d275ee278c2fbc3d3c8bee8e1 | |
parent | e8a4852453c5af27d2a9c606e76809afa3dedb64 (diff) |
x86/pgtable: unify pagetable accessors, #6
Unify functions to test and set bits in pagetable entries.
NOP: only moves existing code around, without any change to it.
Signed-off-by: Jeremy Fitzhardinge <jeremy@xensource.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
-rw-r--r-- | include/asm-x86/pgtable.h | 28 | ||||
-rw-r--r-- | include/asm-x86/pgtable_32.h | 28 | ||||
-rw-r--r-- | include/asm-x86/pgtable_64.h | 32 |
3 files changed, 28 insertions, 60 deletions
diff --git a/include/asm-x86/pgtable.h b/include/asm-x86/pgtable.h index 73e2b47c055e..4c03ff2246fd 100644 --- a/include/asm-x86/pgtable.h +++ b/include/asm-x86/pgtable.h | |||
@@ -115,6 +115,34 @@ extern unsigned long long __PAGE_KERNEL, __PAGE_KERNEL_EXEC; | |||
115 | #define __S110 PAGE_SHARED_EXEC | 115 | #define __S110 PAGE_SHARED_EXEC |
116 | #define __S111 PAGE_SHARED_EXEC | 116 | #define __S111 PAGE_SHARED_EXEC |
117 | 117 | ||
118 | #ifndef __ASSEMBLY__ | ||
119 | /* | ||
120 | * The following only work if pte_present() is true. | ||
121 | * Undefined behaviour if not.. | ||
122 | */ | ||
123 | static inline int pte_dirty(pte_t pte) { return pte_val(pte) & _PAGE_DIRTY; } | ||
124 | static inline int pte_young(pte_t pte) { return pte_val(pte) & _PAGE_ACCESSED; } | ||
125 | static inline int pte_write(pte_t pte) { return pte_val(pte) & _PAGE_RW; } | ||
126 | static inline int pte_file(pte_t pte) { return pte_val(pte) & _PAGE_FILE; } | ||
127 | static inline int pte_huge(pte_t pte) { return pte_val(pte) & _PAGE_PSE; } | ||
128 | |||
129 | static inline int pmd_large(pmd_t pte) { | ||
130 | return (pmd_val(pte) & (_PAGE_PSE|_PAGE_PRESENT)) == | ||
131 | (_PAGE_PSE|_PAGE_PRESENT); | ||
132 | } | ||
133 | |||
134 | static inline pte_t pte_mkclean(pte_t pte) { return __pte(pte_val(pte) & ~_PAGE_DIRTY); } | ||
135 | static inline pte_t pte_mkold(pte_t pte) { return __pte(pte_val(pte) & ~_PAGE_ACCESSED); } | ||
136 | static inline pte_t pte_wrprotect(pte_t pte) { return __pte(pte_val(pte) & ~_PAGE_RW); } | ||
137 | static inline pte_t pte_mkexec(pte_t pte) { return __pte(pte_val(pte) & ~_PAGE_NX); } | ||
138 | static inline pte_t pte_mkdirty(pte_t pte) { return __pte(pte_val(pte) | _PAGE_DIRTY); } | ||
139 | static inline pte_t pte_mkyoung(pte_t pte) { return __pte(pte_val(pte) | _PAGE_ACCESSED); } | ||
140 | static inline pte_t pte_mkwrite(pte_t pte) { return __pte(pte_val(pte) | _PAGE_RW); } | ||
141 | static inline pte_t pte_mkhuge(pte_t pte) { return __pte(pte_val(pte) | _PAGE_PSE); } | ||
142 | static inline pte_t pte_clrhuge(pte_t pte) { return __pte(pte_val(pte) & ~_PAGE_PSE); } | ||
143 | |||
144 | #endif /* __ASSEMBLY__ */ | ||
145 | |||
118 | #ifdef CONFIG_X86_32 | 146 | #ifdef CONFIG_X86_32 |
119 | # include "pgtable_32.h" | 147 | # include "pgtable_32.h" |
120 | #else | 148 | #else |
diff --git a/include/asm-x86/pgtable_32.h b/include/asm-x86/pgtable_32.h index 1c43c302609c..0aaefdda5158 100644 --- a/include/asm-x86/pgtable_32.h +++ b/include/asm-x86/pgtable_32.h | |||
@@ -101,31 +101,6 @@ extern unsigned long pg0[]; | |||
101 | 101 | ||
102 | #define pages_to_mb(x) ((x) >> (20-PAGE_SHIFT)) | 102 | #define pages_to_mb(x) ((x) >> (20-PAGE_SHIFT)) |
103 | 103 | ||
104 | /* | ||
105 | * The following only work if pte_present() is true. | ||
106 | * Undefined behaviour if not.. | ||
107 | */ | ||
108 | static inline int pte_dirty(pte_t pte) { return pte_val(pte) & _PAGE_DIRTY; } | ||
109 | static inline int pte_young(pte_t pte) { return pte_val(pte) & _PAGE_ACCESSED; } | ||
110 | static inline int pte_write(pte_t pte) { return pte_val(pte) & _PAGE_RW; } | ||
111 | static inline int pte_file(pte_t pte) { return pte_val(pte) & _PAGE_FILE; } | ||
112 | static inline int pte_huge(pte_t pte) { return pte_val(pte) & _PAGE_PSE; } | ||
113 | |||
114 | static inline int pmd_large(pmd_t pte) { | ||
115 | return (pmd_val(pte) & (_PAGE_PSE|_PAGE_PRESENT)) == | ||
116 | (_PAGE_PSE|_PAGE_PRESENT); | ||
117 | } | ||
118 | |||
119 | static inline pte_t pte_mkclean(pte_t pte) { return __pte(pte_val(pte) & ~_PAGE_DIRTY); } | ||
120 | static inline pte_t pte_mkold(pte_t pte) { return __pte(pte_val(pte) & ~_PAGE_ACCESSED); } | ||
121 | static inline pte_t pte_wrprotect(pte_t pte) { return __pte(pte_val(pte) & ~_PAGE_RW); } | ||
122 | static inline pte_t pte_mkexec(pte_t pte) { return __pte(pte_val(pte) & ~_PAGE_NX); } | ||
123 | static inline pte_t pte_mkdirty(pte_t pte) { return __pte(pte_val(pte) | _PAGE_DIRTY); } | ||
124 | static inline pte_t pte_mkyoung(pte_t pte) { return __pte(pte_val(pte) | _PAGE_ACCESSED); } | ||
125 | static inline pte_t pte_mkwrite(pte_t pte) { return __pte(pte_val(pte) | _PAGE_RW); } | ||
126 | static inline pte_t pte_mkhuge(pte_t pte) { return __pte(pte_val(pte) | _PAGE_PSE); } | ||
127 | static inline pte_t pte_clrhuge(pte_t pte) { return __pte(pte_val(pte) & ~_PAGE_PSE); } | ||
128 | |||
129 | #ifdef CONFIG_X86_PAE | 104 | #ifdef CONFIG_X86_PAE |
130 | # include <asm/pgtable-3level.h> | 105 | # include <asm/pgtable-3level.h> |
131 | #else | 106 | #else |
@@ -276,9 +251,6 @@ static inline pte_t pte_modify(pte_t pte, pgprot_t newprot) | |||
276 | return pte; | 251 | return pte; |
277 | } | 252 | } |
278 | 253 | ||
279 | #define pmd_large(pmd) \ | ||
280 | ((pmd_val(pmd) & (_PAGE_PSE|_PAGE_PRESENT)) == (_PAGE_PSE|_PAGE_PRESENT)) | ||
281 | |||
282 | /* | 254 | /* |
283 | * the pgd page can be thought of an array like this: pgd_t[PTRS_PER_PGD] | 255 | * the pgd page can be thought of an array like this: pgd_t[PTRS_PER_PGD] |
284 | * | 256 | * |
diff --git a/include/asm-x86/pgtable_64.h b/include/asm-x86/pgtable_64.h index 3a0588088480..84f47f9d7896 100644 --- a/include/asm-x86/pgtable_64.h +++ b/include/asm-x86/pgtable_64.h | |||
@@ -173,34 +173,6 @@ static inline pte_t pfn_pte(unsigned long page_nr, pgprot_t pgprot) | |||
173 | pte_val(pte) &= __supported_pte_mask; | 173 | pte_val(pte) &= __supported_pte_mask; |
174 | return pte; | 174 | return pte; |
175 | } | 175 | } |
176 | |||
177 | /* | ||
178 | * The following only work if pte_present() is true. | ||
179 | * Undefined behaviour if not.. | ||
180 | */ | ||
181 | #define __LARGE_PTE (_PAGE_PSE|_PAGE_PRESENT) | ||
182 | |||
183 | static inline int pte_dirty(pte_t pte) { return pte_val(pte) & _PAGE_DIRTY; } | ||
184 | static inline int pte_young(pte_t pte) { return pte_val(pte) & _PAGE_ACCESSED; } | ||
185 | static inline int pte_write(pte_t pte) { return pte_val(pte) & _PAGE_RW; } | ||
186 | static inline int pte_file(pte_t pte) { return pte_val(pte) & _PAGE_FILE; } | ||
187 | static inline int pte_huge(pte_t pte) { return pte_val(pte) & _PAGE_PSE; } | ||
188 | |||
189 | static inline int pmd_large(pmd_t pte) { | ||
190 | return (pmd_val(pte) & (_PAGE_PSE|_PAGE_PRESENT)) == | ||
191 | (_PAGE_PSE|_PAGE_PRESENT); | ||
192 | } | ||
193 | |||
194 | static inline pte_t pte_mkclean(pte_t pte) { return __pte(pte_val(pte) & ~_PAGE_DIRTY); } | ||
195 | static inline pte_t pte_mkold(pte_t pte) { return __pte(pte_val(pte) & ~_PAGE_ACCESSED); } | ||
196 | static inline pte_t pte_wrprotect(pte_t pte) { return __pte(pte_val(pte) & ~_PAGE_RW); } | ||
197 | static inline pte_t pte_mkexec(pte_t pte) { return __pte(pte_val(pte) & ~_PAGE_NX); } | ||
198 | static inline pte_t pte_mkdirty(pte_t pte) { return __pte(pte_val(pte) | _PAGE_DIRTY); } | ||
199 | static inline pte_t pte_mkyoung(pte_t pte) { return __pte(pte_val(pte) | _PAGE_ACCESSED); } | ||
200 | static inline pte_t pte_mkwrite(pte_t pte) { return __pte(pte_val(pte) | _PAGE_RW); } | ||
201 | static inline pte_t pte_mkhuge(pte_t pte) { return __pte(pte_val(pte) | _PAGE_PSE); } | ||
202 | static inline pte_t pte_clrhuge(pte_t pte) { return __pte(pte_val(pte) & ~_PAGE_PSE); } | ||
203 | |||
204 | struct vm_area_struct; | 176 | struct vm_area_struct; |
205 | 177 | ||
206 | static inline int ptep_test_and_clear_young(struct vm_area_struct *vma, unsigned long addr, pte_t *ptep) | 178 | static inline int ptep_test_and_clear_young(struct vm_area_struct *vma, unsigned long addr, pte_t *ptep) |
@@ -220,10 +192,6 @@ static inline void ptep_set_wrprotect(struct mm_struct *mm, unsigned long addr, | |||
220 | */ | 192 | */ |
221 | #define pgprot_noncached(prot) (__pgprot(pgprot_val(prot) | _PAGE_PCD | _PAGE_PWT)) | 193 | #define pgprot_noncached(prot) (__pgprot(pgprot_val(prot) | _PAGE_PCD | _PAGE_PWT)) |
222 | 194 | ||
223 | static inline int pmd_large(pmd_t pte) { | ||
224 | return (pmd_val(pte) & __LARGE_PTE) == __LARGE_PTE; | ||
225 | } | ||
226 | |||
227 | 195 | ||
228 | /* | 196 | /* |
229 | * Conversion functions: convert a page and protection to a page entry, | 197 | * Conversion functions: convert a page and protection to a page entry, |