xen: defer building p2m mfn structures until kernel is mapped
authorJeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
Fri, 27 Aug 2010 22:18:19 +0000 (15:18 -0700)
committerJeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
Fri, 22 Oct 2010 19:57:25 +0000 (12:57 -0700)
When building mfn parts of p2m structure, we rely on being able to
use mfn_to_virt, which in turn requires kernel to be mapped into
the linear area (which is distinct from the kernel image mapping
on 64-bit).  Defer calling xen_build_mfn_list_list() until after
xen_setup_kernel_pagetable();

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

index ee304b52d8b7a7fd15fc4cf379866f14d817d1b2..d8873014b5edbec01a3c85d131caa2a42fbf1618 100644 (file)
@@ -1178,6 +1178,9 @@ asmlinkage void __init xen_start_kernel(void)
        xen_raw_console_write("mapping kernel into physical memory\n");
        pgd = xen_setup_kernel_pagetable(pgd, xen_start_info->nr_pages);
 
+       /* Allocate and initialize top and mid mfn levels for p2m structure */
+       xen_build_mfn_list_list();
+
        init_mm.pgd = pgd;
 
        /* keep using Xen gdt for now; no urgent need to change it */
index b9651343723665b869a6e0995908d39f6f39b510..9b43bb398d377b2fef4b432f1d63be30fb9f0957 100644 (file)
@@ -374,9 +374,6 @@ void __init xen_build_dynamic_phys_to_machine(void)
 
                p2m_top[topidx][mididx] = &mfn_list[pfn];
        }
-
-       /* Allocate and initialize top and mid mfn levels */
-       xen_build_mfn_list_list();
 }
 
 unsigned long get_phys_to_machine(unsigned long pfn)