aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkaf24@scramble.cl.cam.ac.uk <kaf24@scramble.cl.cam.ac.uk>2004-12-21 14:13:27 +0000
committerkaf24@scramble.cl.cam.ac.uk <kaf24@scramble.cl.cam.ac.uk>2004-12-21 14:13:27 +0000
commit922ba5969d5b2a8cb28401e8ecc3291733a9e117 (patch)
tree0680212300dcdecfe9621de96350b723634e8598
parentbc37c20fa50b1b735255dc0b9e6d59030368ead2 (diff)
downloadxen-922ba5969d5b2a8cb28401e8ecc3291733a9e117.tar.gz
xen-922ba5969d5b2a8cb28401e8ecc3291733a9e117.tar.bz2
xen-922ba5969d5b2a8cb28401e8ecc3291733a9e117.zip
bitkeeper revision 1.1159.187.70 (41c82f87JcLj4kF6tbEDtsuLasUe0w)
Only GLOBAL-map real Xen heap mappings. Not start-of-day low mappings.
-rw-r--r--xen/arch/x86/boot/x86_32.S6
-rw-r--r--xen/arch/x86/x86_32/mm.c13
2 files changed, 10 insertions, 9 deletions
diff --git a/xen/arch/x86/boot/x86_32.S b/xen/arch/x86/boot/x86_32.S
index 305c279c5e..ef568efd3a 100644
--- a/xen/arch/x86/boot/x86_32.S
+++ b/xen/arch/x86/boot/x86_32.S
@@ -102,15 +102,15 @@ __start:
/* Initialize low and high mappings of all memory with 4MB pages */
mov $idle_pg_table-__PAGE_OFFSET,%edi
- mov $0x1e3,%eax /* PRESENT+RW+A+D+4MB+GLOBAL */
+ mov $0xe3,%eax /* PRESENT+RW+A+D+4MB */
1: mov %eax,__PAGE_OFFSET>>20(%edi) /* high mapping */
stosl /* low mapping */
add $(1<<L2_PAGETABLE_SHIFT),%eax
- cmp $DIRECTMAP_PHYS_END+0x1e3,%eax
+ cmp $DIRECTMAP_PHYS_END+0xe3,%eax
jne 1b
1: stosl /* low mappings cover as much physmem as possible */
add $(1<<L2_PAGETABLE_SHIFT),%eax
- cmp $__HYPERVISOR_VIRT_START+0x1e3,%eax
+ cmp $__HYPERVISOR_VIRT_START+0xe3,%eax
jne 1b
/* Initialise IDT with simple error defaults. */
diff --git a/xen/arch/x86/x86_32/mm.c b/xen/arch/x86/x86_32/mm.c
index ed95ca77e9..a47e6b63c3 100644
--- a/xen/arch/x86/x86_32/mm.c
+++ b/xen/arch/x86/x86_32/mm.c
@@ -59,11 +59,13 @@ void __init paging_init(void)
void *ioremap_pt;
int i;
- /* Idle page table 1:1 maps the first part of physical memory. */
- for ( i = 0; i < DOMAIN_ENTRIES_PER_L2_PAGETABLE; i++ )
- idle_pg_table[i] =
- mk_l2_pgentry((i << L2_PAGETABLE_SHIFT) |
- __PAGE_HYPERVISOR | _PAGE_PSE);
+ /* Xen heap mappings can be GLOBAL. */
+ if ( cpu_has_pge )
+ {
+ for ( i = 0; i < DIRECTMAP_PHYS_END; i++ )
+ ((unsigned long *)idle_pg_table)
+ [(i + PAGE_OFFSET) >> L2_PAGETABLE_SHIFT] |= _PAGE_GLOBAL;
+ }
/* Create page table for ioremap(). */
ioremap_pt = (void *)alloc_xenheap_page();
@@ -86,7 +88,6 @@ void __init paging_init(void)
/* Set up linear page table mapping. */
idle_pg_table[LINEAR_PT_VIRT_START >> L2_PAGETABLE_SHIFT] =
mk_l2_pgentry(__pa(idle_pg_table) | __PAGE_HYPERVISOR);
-
}
void __init zap_low_mappings(void)