Magellan Linux

Contents of /trunk/kernel26-xen/patches-2.6.25-r1/1077-2.6.25-xen-Pull-xen_extend_init_mapping-from-XS-upstream-FIX.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 606 - (show annotations) (download)
Thu May 22 23:13:13 2008 UTC (16 years ago) by niro
File size: 2462 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 9c31eb1df9cf5c265c486a50dd97e8af7754e56e Mon Sep 17 00:00:00 2001
2 From: Eduardo Habkost <ehabkost@redhat.com>
3 Date: Wed, 23 Jan 2008 13:22:29 -0200
4 Subject: [PATCH] Pull xen_extend_init_mapping() from XS upstream (FIXME)
5
6 Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
7 ---
8 arch/x86/mm/init_64.c | 56 ++++++++++++++++++++++++++++++++++++++++++++++++-
9 1 files changed, 55 insertions(+), 1 deletions(-)
10
11 diff --git a/arch/x86/mm/init_64.c b/arch/x86/mm/init_64.c
12 index 2e6af9d..9df9ee4 100644
13 --- a/arch/x86/mm/init_64.c
14 +++ b/arch/x86/mm/init_64.c
15 @@ -550,6 +550,60 @@ static void xen_finish_init_mapping(void)
16 xprintk("finished!\n");
17 }
18
19 +static void __init xen_extend_init_mapping(unsigned long tables_space)
20 +{
21 + unsigned long va = __START_KERNEL_map;
22 + unsigned long phys, addr, *pte_page;
23 + pmd_t *pmd;
24 + pte_t *pte, new_pte;
25 + unsigned long *page = (unsigned long *)init_level4_pgt;
26 +
27 + addr = page[pgd_index(va)];
28 + addr_to_page(addr, page);
29 + addr = page[pud_index(va)];
30 + addr_to_page(addr, page);
31 +
32 + /* Kill mapping of low 1MB. */
33 + while (va < (unsigned long)&_text) {
34 + HYPERVISOR_update_va_mapping(va, __pte_ma(0), 0);
35 + va += PAGE_SIZE;
36 + }
37 +
38 + /* Ensure init mappings cover kernel text/data and initial tables. */
39 + while (va < (__START_KERNEL_map
40 + + (start_pfn << PAGE_SHIFT)
41 + + tables_space)) {
42 + pmd = (pmd_t *)&page[pmd_index(va)];
43 + if (pmd_none(*pmd)) {
44 + pte_page = alloc_low_page(&phys);
45 + early_make_page_readonly(
46 + pte_page, XENFEAT_writable_page_tables);
47 + set_pmd(pmd, __pmd(phys | _KERNPG_TABLE));
48 + } else {
49 + addr = page[pmd_index(va)];
50 + addr_to_page(addr, pte_page);
51 + }
52 + pte = (pte_t *)&pte_page[pte_index(va)];
53 + if (pte_none(*pte)) {
54 + new_pte = pfn_pte(
55 + (va - __START_KERNEL_map) >> PAGE_SHIFT,
56 + __pgprot(_KERNPG_TABLE));
57 + set_pte_at(&init_mm, va, pte, new_pte);
58 + }
59 + va += PAGE_SIZE;
60 + }
61 +
62 + /* Finally, blow away any spurious initial mappings. */
63 + while (1) {
64 + pmd = (pmd_t *)&page[pmd_index(va)];
65 + if (pmd_none(*pmd))
66 + break;
67 + HYPERVISOR_update_va_mapping(va, __pte_ma(0), 0);
68 + va += PAGE_SIZE;
69 + }
70 +}
71 +
72 +
73
74 #else /* !XEN */
75
76 @@ -770,7 +824,7 @@ static void __init find_early_table_space(unsigned long end)
77 round_up(ptes * 8, PAGE_SIZE);
78
79 /*FIXME: what does this do? */
80 - //extend_init_mapping(tables);
81 + xen_extend_init_mapping(tables);
82
83 table_start = start_pfn;
84 table_end = table_start + (tables>>PAGE_SHIFT);
85 --
86 1.5.4.1
87