xen: clean up xen_load_gdt
authorJeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
Wed, 4 Mar 2009 21:02:18 +0000 (13:02 -0800)
committerJeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
Wed, 8 Apr 2009 18:51:45 +0000 (11:51 -0700)
Makes the logic a bit clearer.

Signed-off-by: Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
arch/x86/xen/enlighten.c

index 82cd39a6cbd3a116b83c5ce1cf30cae0214991f6..8e024554a3e1e0940e0b691356beb9ed154d1145 100644 (file)
@@ -301,10 +301,21 @@ static void xen_load_gdt(const struct desc_ptr *dtr)
        frames = mcs.args;
 
        for (f = 0; va < dtr->address + size; va += PAGE_SIZE, f++) {
-               frames[f] = arbitrary_virt_to_mfn((void *)va);
+               int level;
+               pte_t *ptep = lookup_address(va, &level);
+               unsigned long pfn, mfn;
+               void *virt;
+
+               BUG_ON(ptep == NULL);
+
+               pfn = pte_pfn(*ptep);
+               mfn = pfn_to_mfn(pfn);
+               virt = __va(PFN_PHYS(pfn));
+
+               frames[f] = mfn;
 
                make_lowmem_page_readonly((void *)va);
-               make_lowmem_page_readonly(mfn_to_virt(frames[f]));
+               make_lowmem_page_readonly(virt);
        }
 
        MULTI_set_gdt(mcs.mc, frames, size / sizeof(struct desc_struct));