/[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 |
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 | 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)
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 |