# 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
|