/[pkg-src]/trunk/kernel26-xen/patches-2.6.25-r1/1077-2.6.25-xen-Pull-xen_extend_init_mapping-from-XS-upstream-FIX.patch |
Annotation 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 | Revision Log
Revision 606 -
(hide annotations)
(download)
Thu May 22 23:13:13 2008 UTC (16 years ago) by niro
File size: 2462 byte(s)
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 | niro | 606 | 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 |