diff options
author | Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com> | 2009-03-04 16:02:18 -0500 |
---|---|---|
committer | Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com> | 2009-04-08 14:51:45 -0400 |
commit | c7da8c829b3f919089ff021d6ddc376d38299729 (patch) | |
tree | f1f322b13527fb2a2ca4e4aad4a1a15214aeee6d /arch/x86/xen/enlighten.c | |
parent | cdaead6b4e657f960d6d6f9f380e7dfeedc6a09b (diff) |
xen: clean up xen_load_gdt
Makes the logic a bit clearer.
Signed-off-by: Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
Diffstat (limited to 'arch/x86/xen/enlighten.c')
-rw-r--r-- | arch/x86/xen/enlighten.c | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c index 82cd39a6cbd3..8e024554a3e1 100644 --- a/arch/x86/xen/enlighten.c +++ b/arch/x86/xen/enlighten.c | |||
@@ -301,10 +301,21 @@ static void xen_load_gdt(const struct desc_ptr *dtr) | |||
301 | frames = mcs.args; | 301 | frames = mcs.args; |
302 | 302 | ||
303 | for (f = 0; va < dtr->address + size; va += PAGE_SIZE, f++) { | 303 | for (f = 0; va < dtr->address + size; va += PAGE_SIZE, f++) { |
304 | frames[f] = arbitrary_virt_to_mfn((void *)va); | 304 | int level; |
305 | pte_t *ptep = lookup_address(va, &level); | ||
306 | unsigned long pfn, mfn; | ||
307 | void *virt; | ||
308 | |||
309 | BUG_ON(ptep == NULL); | ||
310 | |||
311 | pfn = pte_pfn(*ptep); | ||
312 | mfn = pfn_to_mfn(pfn); | ||
313 | virt = __va(PFN_PHYS(pfn)); | ||
314 | |||
315 | frames[f] = mfn; | ||
305 | 316 | ||
306 | make_lowmem_page_readonly((void *)va); | 317 | make_lowmem_page_readonly((void *)va); |
307 | make_lowmem_page_readonly(mfn_to_virt(frames[f])); | 318 | make_lowmem_page_readonly(virt); |
308 | } | 319 | } |
309 | 320 | ||
310 | MULTI_set_gdt(mcs.mc, frames, size / sizeof(struct desc_struct)); | 321 | MULTI_set_gdt(mcs.mc, frames, size / sizeof(struct desc_struct)); |