Ensure cur_pgd per-cpu variables are initialised early.
authorkaf24@firebug.cl.cam.ac.uk <kaf24@firebug.cl.cam.ac.uk>
Tue, 23 Aug 2005 17:29:46 +0000 (17:29 +0000)
committerkaf24@firebug.cl.cam.ac.uk <kaf24@firebug.cl.cam.ac.uk>
Tue, 23 Aug 2005 17:29:46 +0000 (17:29 +0000)
Secondary VCPUs can take page faults immediately after
booting, because of writable pagetable logic.

Signed-off-by: Keir Fraser <keir@xensource.com>
linux-2.6-xen-sparse/arch/xen/i386/mm/init.c
linux-2.6-xen-sparse/arch/xen/x86_64/mm/init.c

index 78d5058f92cd01d4434ba7b0e3c76e78cd62ad70..645eaa34d627c0da0bd14a5d2c60f07c58f28ea9 100644 (file)
@@ -348,9 +348,12 @@ static void __init pagetable_init (void)
 {
        unsigned long vaddr;
        pgd_t *pgd_base = (pgd_t *)xen_start_info.pt_base;
+       int i;
 
        swapper_pg_dir = pgd_base;
        init_mm.pgd    = pgd_base;
+       for (i = 0; i < NR_CPUS; i++)
+               per_cpu(cur_pgd, i) = pgd_base;
 
        /* Enable PSE if available */
        if (cpu_has_pse) {
index 859c9e72ca7a0c1c7d108a60ad149df7e063ae81..f4c35e4a6bb7ab94237fc8422aa437f8b33a9c82 100644 (file)
@@ -559,6 +559,11 @@ static void xen_copy_pt(void)
 
 void __init xen_init_pt(void)
 {
+       int i;
+
+       for (i = 0; i < NR_CPUS; i++)
+               per_cpu(cur_pgd, i) = init_mm.pgd;
+
        memcpy((void *)init_level4_pgt, 
               (void *)xen_start_info.pt_base, PAGE_SIZE);