[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] x86/64 Linux: destroy entire init memory mapping beyond kernel image.
# HG changeset patch # User kaf24@xxxxxxxxxxxxxxxxxxxx # Node ID ec903b8e6612eba5c90451fcb1bbb25d34cd88e4 # Parent 9d86c1a70f347b49393fa26796df4512bb114ebb x86/64 Linux: destroy entire init memory mapping beyond kernel image. Avoids overlap with modules mapping area. Signed-off-by: Jan Beulich <jbeulich@xxxxxxxxxx> --- linux-2.6-xen-sparse/arch/x86_64/kernel/setup-xen.c | 16 ------------- linux-2.6-xen-sparse/arch/x86_64/mm/init-xen.c | 24 ++++++++++++++++---- 2 files changed, 20 insertions(+), 20 deletions(-) diff -r 9d86c1a70f34 -r ec903b8e6612 linux-2.6-xen-sparse/arch/x86_64/kernel/setup-xen.c --- a/linux-2.6-xen-sparse/arch/x86_64/kernel/setup-xen.c Wed Jun 07 11:03:51 2006 +0100 +++ b/linux-2.6-xen-sparse/arch/x86_64/kernel/setup-xen.c Wed Jun 07 11:24:44 2006 +0100 @@ -819,14 +819,6 @@ void __init setup_arch(char **cmdline_p) #ifdef CONFIG_XEN { int i, j, k, fpp; - unsigned long va; - - /* 'Initial mapping' of initrd must be destroyed. */ - for (va = xen_start_info->mod_start; - va < (xen_start_info->mod_start+xen_start_info->mod_len); - va += PAGE_SIZE) { - HYPERVISOR_update_va_mapping(va, __pte_ma(0), 0); - } if (!xen_feature(XENFEAT_auto_translated_physmap)) { /* Make sure we have a large enough P->M table. */ @@ -841,14 +833,6 @@ void __init setup_arch(char **cmdline_p) __pa(xen_start_info->mfn_list), PFN_PHYS(PFN_UP(xen_start_info->nr_pages * sizeof(unsigned long)))); - - /* Destroyed 'initial mapping' of old p2m table. */ - for (va = xen_start_info->mfn_list; - va < (xen_start_info->mfn_list + - (xen_start_info->nr_pages*sizeof(unsigned long))); - va += PAGE_SIZE) { - HYPERVISOR_update_va_mapping(va, __pte_ma(0), 0); - } /* * Initialise the list of the frames that specify the diff -r 9d86c1a70f34 -r ec903b8e6612 linux-2.6-xen-sparse/arch/x86_64/mm/init-xen.c --- a/linux-2.6-xen-sparse/arch/x86_64/mm/init-xen.c Wed Jun 07 11:03:51 2006 +0100 +++ b/linux-2.6-xen-sparse/arch/x86_64/mm/init-xen.c Wed Jun 07 11:24:44 2006 +0100 @@ -668,12 +668,28 @@ void __meminit init_memory_mapping(unsig if (!after_bootmem) { BUG_ON(start_pfn != table_end); - /* - * Destroy the temporary mappings created above. Prevents + + /* Re-vector virtual addresses pointing into the initial + mapping to the just-established permanent ones. */ + xen_start_info = __va(__pa(xen_start_info)); + xen_start_info->pt_base = (unsigned long) + __va(__pa(xen_start_info->pt_base)); + if (!xen_feature(XENFEAT_auto_translated_physmap)) { + phys_to_machine_mapping = + __va(__pa(xen_start_info->mfn_list)); + xen_start_info->mfn_list = (unsigned long) + phys_to_machine_mapping; + } + if (xen_start_info->mod_start) + xen_start_info->mod_start = (unsigned long) + __va(__pa(xen_start_info->mod_start)); + + /* Destroy the Xen-created mappings beyond the kernel image as + * well as the temporary mappings created above. Prevents * overlap with modules area (if init mapping is very big). */ - start = __START_KERNEL_map + (table_start << PAGE_SHIFT); - end = __START_KERNEL_map + (table_end << PAGE_SHIFT); + start = PAGE_ALIGN((unsigned long)_end); + end = __START_KERNEL_map + (table_end << PAGE_SHIFT); for (; start < end; start += PAGE_SIZE) WARN_ON(HYPERVISOR_update_va_mapping( start, __pte_ma(0), 0)); _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |