Magellan Linux

Contents of /trunk/kernel26-xen/patches-2.6.25-r1/1075-2.6.25-xen-Pull-xen_finish_init_mappin-from-XS-upstream.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 606 - (show annotations) (download)
Thu May 22 23:13:13 2008 UTC (15 years, 11 months ago) by niro
File size: 3500 byte(s)
-ver bump to 2.6.25-magellan-r1:
- linux-2.6.25.4
- fbcondecor-0.9.4
- squashfs-3.3
- unionfs-2.3.3
- tuxonice-3.0-rc7
- linux-phc-0.3.0
- acpi-dstd-0.9a
- reiser4
- xen-3.2.0
. ipw3945-1.2.2

1 From ea5a2b76fa368394de92f851124e347a649e6980 Mon Sep 17 00:00:00 2001
2 From: Eduardo Habkost <ehabkost@redhat.com>
3 Date: Wed, 23 Jan 2008 13:20:18 -0200
4 Subject: [PATCH] Pull xen_finish_init_mappin() from XS upstream
5
6 Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
7 ---
8 arch/x86/mm/init_64.c | 86 ++++++++++++++++++++++++++++++++++++++++++++++++-
9 1 files changed, 85 insertions(+), 1 deletions(-)
10
11 diff --git a/arch/x86/mm/init_64.c b/arch/x86/mm/init_64.c
12 index fddf208..58ae6ad 100644
13 --- a/arch/x86/mm/init_64.c
14 +++ b/arch/x86/mm/init_64.c
15 @@ -468,6 +468,85 @@ int make_readonly(unsigned long paddr)
16 return readonly;
17 }
18
19 +static void xen_finish_init_mapping(void)
20 +{
21 + /*FIXME: move this to pvops */
22 + unsigned long i, start, end;
23 +
24 + xprintk("messing with start_info:\n");
25 +
26 + /* Re-vector virtual addresses pointing into the initial
27 + mapping to the just-established permanent ones. */
28 + xen_start_info = __va(__pa(xen_start_info));
29 + xen_start_info->pt_base = (unsigned long)
30 + __va(__pa(xen_start_info->pt_base));
31 + if (!xen_feature(XENFEAT_auto_translated_physmap)) {
32 + phys_to_machine_mapping =
33 + __va(__pa(xen_start_info->mfn_list));
34 + xen_start_info->mfn_list = (unsigned long)
35 + phys_to_machine_mapping;
36 + }
37 + if (xen_start_info->mod_start)
38 + xen_start_info->mod_start = (unsigned long)
39 + __va(__pa(xen_start_info->mod_start));
40 +
41 + xprintk("messed with start_info.\n");
42 + xprintk("unmapping:\n");
43 +
44 + /* Destroy the Xen-created mappings beyond the kernel image as
45 + * well as the temporary mappings created above. Prevents
46 + * overlap with modules area (if init mapping is very big).
47 + */
48 + start = PAGE_ALIGN((unsigned long)_end);
49 + end = __START_KERNEL_map + (table_end << PAGE_SHIFT);
50 +
51 + xprintk("from %lx to %lx\n", start, end);
52 + for (; start < end; start += PAGE_SIZE)
53 + WARN_ON(HYPERVISOR_update_va_mapping(
54 + start, __pte_ma(0), 0));
55 +
56 + /* Allocate pte's for initial fixmaps from 'start_pfn' allocator. */
57 + table_end = ~0UL;
58 +
59 +
60 + xprintk("set_fixmaps:\n");
61 +
62 + /*
63 + * Prefetch pte's for the bt_ioremap() area. It gets used before the
64 + * boot-time allocator is online, so allocate-on-demand would fail.
65 + */
66 + for (i = FIX_BTMAP_END; i <= FIX_BTMAP_BEGIN; i++)
67 + clear_fixmap(i);
68 +
69 + xprintk("btmap end.\n");
70 +
71 + /* Switch to the real shared_info page, and clear the dummy page. */
72 +#if 0
73 + set_fixmap_mfn(FIX_SHARED_INFO, xen_start_info->shared_info);
74 + HYPERVISOR_shared_info = (shared_info_t *)fix_to_virt(FIX_SHARED_INFO);
75 +#endif
76 +
77 + memset(empty_zero_page, 0, sizeof(empty_zero_page));
78 + xprintk("isamaps:\n");
79 +
80 + /* Set up mapping of lowest 1MB of physical memory. */
81 + for (i = 0; i < NR_FIX_ISAMAPS; i++)
82 + if (is_initial_xendomain())
83 + __native_set_fixmap(FIX_ISAMAP_BEGIN - i,
84 + mfn_pte(i * PAGE_SIZE, PAGE_KERNEL));
85 + else
86 + __native_set_fixmap(FIX_ISAMAP_BEGIN - i,
87 + pfn_pte(__pa(empty_zero_page)
88 + >> PAGE_SHIFT,
89 + PAGE_KERNEL_RO));
90 +
91 + /* Disable the 'start_pfn' allocator. */
92 + table_end = start_pfn;
93 +
94 + xprintk("finished!\n");
95 +}
96 +
97 +
98 #else /* !XEN */
99
100 static __meminit void *alloc_low_page(unsigned long *phys)
101 @@ -771,8 +850,13 @@ void __init_refok init_memory_mapping(unsigned long start, unsigned long end)
102 unmap_low_page(pud);
103 }
104
105 - if (!after_bootmem)
106 + if (!after_bootmem) {
107 +#ifdef CONFIG_XEN
108 + BUG_ON(start_pfn != table_end);
109 + xen_finish_init_mapping();
110 +#endif
111 mmu_cr4_features = read_cr4();
112 + }
113 __flush_tlb_all();
114
115 if (!after_bootmem)
116 --
117 1.5.4.1
118