Magellan Linux

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 Parent Directory | Revision Log 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)
-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