diff options
author | kaf24@scramble.cl.cam.ac.uk <kaf24@scramble.cl.cam.ac.uk> | 2004-12-21 14:13:27 +0000 |
---|---|---|
committer | kaf24@scramble.cl.cam.ac.uk <kaf24@scramble.cl.cam.ac.uk> | 2004-12-21 14:13:27 +0000 |
commit | 922ba5969d5b2a8cb28401e8ecc3291733a9e117 (patch) | |
tree | 0680212300dcdecfe9621de96350b723634e8598 | |
parent | bc37c20fa50b1b735255dc0b9e6d59030368ead2 (diff) | |
download | xen-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.S | 6 | ||||
-rw-r--r-- | xen/arch/x86/x86_32/mm.c | 13 |
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) |