From: jbeulich@novell.com Subject: miscellaneous initialization code cleanup Patch-mainline: obsolete Index: head-2008-03-06/arch/x86/kernel/head_64-xen.S =================================================================== --- head-2008-03-06.orig/arch/x86/kernel/head_64-xen.S 2008-03-06 16:35:33.000000000 +0100 +++ head-2008-03-06/arch/x86/kernel/head_64-xen.S 2008-03-06 10:52:49.000000000 +0100 @@ -52,7 +52,6 @@ ENTRY(name) NEXT_PAGE(init_level4_pgt) .fill 512,8,0 -NEXT_PAGE(init_level4_user_pgt) /* * We update two pgd entries to make kernel and user pgd consistent * at pgd_populate(). It can be used for kernel modules. So we place Index: head-2008-03-06/arch/x86/mm/init_64-xen.c =================================================================== --- head-2008-03-06.orig/arch/x86/mm/init_64-xen.c 2008-03-06 17:07:38.000000000 +0100 +++ head-2008-03-06/arch/x86/mm/init_64-xen.c 2008-03-06 17:18:46.000000000 +0100 @@ -60,6 +60,8 @@ unsigned int __kernel_page_user; EXPORT_SYMBOL(__kernel_page_user); #endif +int after_bootmem; + extern unsigned long *contiguous_bitmap; DEFINE_PER_CPU(struct mmu_gather, mmu_gathers); @@ -102,6 +104,11 @@ void __meminit early_make_page_readonly( if (xen_feature(feature)) return; + if (after_bootmem) { + make_page_readonly(va, feature); + return; + } + addr = (unsigned long) page[pgd_index(_va)]; addr_to_page(addr, page); @@ -236,7 +243,6 @@ void show_mem(void) static unsigned long __meminitdata table_start; static unsigned long __meminitdata table_end; -int after_bootmem; static __init void *spp_getpage(void) { @@ -557,9 +563,9 @@ phys_pmd_init(pmd_t *pmd_page, unsigned for (k = 0; k < PTRS_PER_PTE; pte++, k++, address += PTE_SIZE) { unsigned long pteval = address | _PAGE_NX | _KERNPG_TABLE; - if ((address >= end) || - ((address >> PAGE_SHIFT) >= - xen_start_info->nr_pages)) + if (address >= (after_bootmem + ? end + : xen_start_info->nr_pages << PAGE_SHIFT)) pteval = 0; else if (make_readonly(address)) pteval &= ~_PAGE_RW;