aboutsummaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
authorJeremy Fitzhardinge <jeremy@goop.org>2008-03-17 19:37:09 -0400
committerIngo Molnar <mingo@elte.hu>2008-04-24 17:57:31 -0400
commit947a69c90c0d07ac7f214e46dabbe49f2a230e00 (patch)
tree6b0c650896d4735d0ce2dd2e639ed056cc976743 /arch
parent430442e38e7f049841c5838f8c7027bd9e170045 (diff)
xen: unify pte operations
We can fold the essentially common pte functions together now. Signed-off-by: Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com> Signed-off-by: Ingo Molnar <mingo@elte.hu> Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Diffstat (limited to 'arch')
-rw-r--r--arch/x86/xen/mmu.c125
1 files changed, 44 insertions, 81 deletions
diff --git a/arch/x86/xen/mmu.c b/arch/x86/xen/mmu.c
index 3148db8e794e..272635aaef88 100644
--- a/arch/x86/xen/mmu.c
+++ b/arch/x86/xen/mmu.c
@@ -171,6 +171,49 @@ void xen_set_pte_at(struct mm_struct *mm, unsigned long addr,
171 xen_set_pte(ptep, pteval); 171 xen_set_pte(ptep, pteval);
172} 172}
173 173
174pteval_t xen_pte_val(pte_t pte)
175{
176 pteval_t ret = pte.pte;
177
178 if (ret & _PAGE_PRESENT)
179 ret = machine_to_phys(XMADDR(ret)).paddr | _PAGE_PRESENT;
180
181 return ret;
182}
183
184pgdval_t xen_pgd_val(pgd_t pgd)
185{
186 pgdval_t ret = pgd.pgd;
187 if (ret & _PAGE_PRESENT)
188 ret = machine_to_phys(XMADDR(ret)).paddr | _PAGE_PRESENT;
189 return ret;
190}
191
192pte_t xen_make_pte(pteval_t pte)
193{
194 if (pte & _PAGE_PRESENT) {
195 pte = phys_to_machine(XPADDR(pte)).maddr;
196 pte &= ~(_PAGE_PCD | _PAGE_PWT);
197 }
198
199 return (pte_t){ .pte = pte };
200}
201
202pgd_t xen_make_pgd(pgdval_t pgd)
203{
204 if (pgd & _PAGE_PRESENT)
205 pgd = phys_to_machine(XPADDR(pgd)).maddr;
206
207 return (pgd_t){ pgd };
208}
209
210pmdval_t xen_pmd_val(pmd_t pmd)
211{
212 pmdval_t ret = native_pmd_val(pmd);
213 if (ret & _PAGE_PRESENT)
214 ret = machine_to_phys(XMADDR(ret)).paddr | _PAGE_PRESENT;
215 return ret;
216}
174#ifdef CONFIG_X86_PAE 217#ifdef CONFIG_X86_PAE
175void xen_set_pud(pud_t *ptr, pud_t val) 218void xen_set_pud(pud_t *ptr, pud_t val)
176{ 219{
@@ -214,98 +257,18 @@ void xen_pmd_clear(pmd_t *pmdp)
214 xen_set_pmd(pmdp, __pmd(0)); 257 xen_set_pmd(pmdp, __pmd(0));
215} 258}
216 259
217pteval_t xen_pte_val(pte_t pte)
218{
219 pteval_t ret = pte.pte;
220
221 if (ret & _PAGE_PRESENT)
222 ret = machine_to_phys(XMADDR(ret)).paddr | _PAGE_PRESENT;
223
224 return ret;
225}
226
227pmdval_t xen_pmd_val(pmd_t pmd)
228{
229 pmdval_t ret = pmd.pmd;
230 if (ret & _PAGE_PRESENT)
231 ret = machine_to_phys(XMADDR(ret)).paddr | _PAGE_PRESENT;
232 return ret;
233}
234
235pgdval_t xen_pgd_val(pgd_t pgd)
236{
237 pgdval_t ret = pgd.pgd;
238 if (ret & _PAGE_PRESENT)
239 ret = machine_to_phys(XMADDR(ret)).paddr | _PAGE_PRESENT;
240 return ret;
241}
242
243pte_t xen_make_pte(pteval_t pte)
244{
245 if (pte & _PAGE_PRESENT) {
246 pte = phys_to_machine(XPADDR(pte)).maddr;
247 pte &= ~(_PAGE_PCD | _PAGE_PWT);
248 }
249
250 return (pte_t){ .pte = pte };
251}
252
253pmd_t xen_make_pmd(pmdval_t pmd) 260pmd_t xen_make_pmd(pmdval_t pmd)
254{ 261{
255 if (pmd & _PAGE_PRESENT) 262 if (pmd & _PAGE_PRESENT)
256 pmd = phys_to_machine(XPADDR(pmd)).maddr; 263 pmd = phys_to_machine(XPADDR(pmd)).maddr;
257 264
258 return (pmd_t){ pmd }; 265 return native_make_pmd(pmd);
259}
260
261pgd_t xen_make_pgd(pgdval_t pgd)
262{
263 if (pgd & _PAGE_PRESENT)
264 pgd = phys_to_machine(XPADDR(pgd)).maddr;
265
266 return (pgd_t){ pgd };
267} 266}
268#else /* !PAE */ 267#else /* !PAE */
269void xen_set_pte(pte_t *ptep, pte_t pte) 268void xen_set_pte(pte_t *ptep, pte_t pte)
270{ 269{
271 *ptep = pte; 270 *ptep = pte;
272} 271}
273
274pteval_t xen_pte_val(pte_t pte)
275{
276 pteval_t ret = pte.pte;
277
278 if (ret & _PAGE_PRESENT)
279 ret = machine_to_phys(XMADDR(ret)).paddr;
280
281 return ret;
282}
283
284pgdval_t xen_pgd_val(pgd_t pgd)
285{
286 pteval_t ret = pgd.pgd;
287 if (ret & _PAGE_PRESENT)
288 ret = machine_to_phys(XMADDR(ret)).paddr | _PAGE_PRESENT;
289 return ret;
290}
291
292pte_t xen_make_pte(pteval_t pte)
293{
294 if (pte & _PAGE_PRESENT) {
295 pte = phys_to_machine(XPADDR(pte)).maddr;
296 pte &= ~(_PAGE_PCD | _PAGE_PWT);
297 }
298
299 return (pte_t){ pte };
300}
301
302pgd_t xen_make_pgd(pgdval_t pgd)
303{
304 if (pgd & _PAGE_PRESENT)
305 pgd = phys_to_machine(XPADDR(pgd)).maddr;
306
307 return (pgd_t){ pgd };
308}
309#endif /* CONFIG_X86_PAE */ 272#endif /* CONFIG_X86_PAE */
310 273
311/* 274/*