WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-changelog

[Xen-changelog] Initialise 1:1 mapping of physical memory map early duri

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] Initialise 1:1 mapping of physical memory map early during x86/64 boot.
From: BitKeeper Bot <riel@xxxxxxxxxxx>
Date: Tue, 17 May 2005 10:39:50 +0000
Delivery-date: Tue, 17 May 2005 11:03:18 +0000
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-changelog-request@lists.xensource.com?subject=help>
List-id: BK change log <xen-changelog.lists.xensource.com>
List-post: <mailto:xen-changelog@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=unsubscribe>
Reply-to: Xen Development List <xen-devel@xxxxxxxxxxxxxxxxxxx>
Sender: xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx
ChangeSet 1.1428, 2005/05/17 11:39:50+01:00, kaf24@xxxxxxxxxxxxxxxxxxxx

        Initialise 1:1 mapping of physical memory map early during x86/64 boot.
        This mapping should include all ACPI tables, so simplify the mapping
        check in the ACPI code.
        Signed-off-by: Keir Fraser <keir@xxxxxxxxxxxxx>



 arch/x86/acpi/boot.c   |   10 +++-------
 arch/x86/e820.c        |    7 ++++---
 arch/x86/setup.c       |   31 +++++++++++++++++++++++--------
 arch/x86/x86_64/mm.c   |    8 +-------
 common/grant_table.c   |    1 -
 include/asm-x86/e820.h |    2 +-
 6 files changed, 32 insertions(+), 27 deletions(-)


diff -Nru a/xen/arch/x86/acpi/boot.c b/xen/arch/x86/acpi/boot.c
--- a/xen/arch/x86/acpi/boot.c  2005-05-17 07:03:55 -04:00
+++ b/xen/arch/x86/acpi/boot.c  2005-05-17 07:03:55 -04:00
@@ -40,7 +40,6 @@
 #include <mach_mpparse.h>
 
 int sbf_port;
-#define end_pfn_map max_page
 #define CONFIG_ACPI_PCI
 
 #define BAD_MADT_ENTRY(entry, end) (                                       \
@@ -96,12 +95,9 @@
 char *__acpi_map_table(unsigned long phys_addr, unsigned long size)
 {
        if (!phys_addr || !size)
-       return NULL;
-
-       if (phys_addr < (end_pfn_map << PAGE_SHIFT))
-               return __va(phys_addr);
-
-       return NULL;
+               return NULL;
+       /* XEN: We map all e820 areas which should include every ACPI table. */
+       return __va(phys_addr);
 }
 
 #else
diff -Nru a/xen/arch/x86/e820.c b/xen/arch/x86/e820.c
--- a/xen/arch/x86/e820.c       2005-05-17 07:03:55 -04:00
+++ b/xen/arch/x86/e820.c       2005-05-17 07:03:55 -04:00
@@ -372,16 +372,17 @@
 }
 
 static void __init machine_specific_memory_setup(
-    struct e820entry *raw, int raw_nr)
+    struct e820entry *raw, int *raw_nr)
 {
-    char nr = (char)raw_nr;
+    char nr = (char)*raw_nr;
     sanitize_e820_map(raw, &nr);
+    *raw_nr = nr;
     (void)copy_e820_map(raw, nr);
     clip_4gb();
     clip_mem();
 }
 
-unsigned long __init init_e820(struct e820entry *raw, int raw_nr)
+unsigned long __init init_e820(struct e820entry *raw, int *raw_nr)
 {
     machine_specific_memory_setup(raw, raw_nr);
     printk(KERN_INFO "Physical RAM map:\n");
diff -Nru a/xen/arch/x86/setup.c b/xen/arch/x86/setup.c
--- a/xen/arch/x86/setup.c      2005-05-17 07:03:55 -04:00
+++ b/xen/arch/x86/setup.c      2005-05-17 07:03:55 -04:00
@@ -25,7 +25,7 @@
  * pfn_info table and allocation bitmap.
  */
 static unsigned int opt_xenheap_megabytes = XENHEAP_DEFAULT_MB;
-#if defined(__x86_64__)
+#if defined(CONFIG_X86_64)
 integer_param("xenheap_megabytes", opt_xenheap_megabytes);
 #endif
 
@@ -70,7 +70,7 @@
 
 struct cpuinfo_x86 boot_cpu_data = { 0, 0, 0, 0, -1 };
 
-#if defined(__x86_64__)
+#if defined(CONFIG_X86_64)
 unsigned long mmu_cr4_features = X86_CR4_PSE | X86_CR4_PGE | X86_CR4_PAE;
 #else
 unsigned long mmu_cr4_features = X86_CR4_PSE | X86_CR4_PGE;
@@ -312,10 +312,10 @@
 
     /* Set up and load the per-CPU TSS and LDT. */
     t->bitmap = IOBMP_INVALID_OFFSET;
-#if defined(__i386__)
+#if defined(CONFIG_X86_32)
     t->ss0  = __HYPERVISOR_DS;
     t->esp0 = get_stack_bottom();
-#elif defined(__x86_64__)
+#elif defined(CONFIG_X86_64)
     t->rsp0 = get_stack_bottom();
 #endif
     set_tss_desc(nr,t);
@@ -452,7 +452,7 @@
 
     watchdog_enable();
 
-#ifdef __x86_64__ /* x86_32 uses low mappings when building DOM0. */
+#ifdef CONFIG_X86_64 /* x86_32 uses low mappings when building DOM0. */
     zap_low_mappings();
 #endif
 }
@@ -519,7 +519,7 @@
         for ( ; ; ) ;
     }
 
-    max_page = init_e820(e820_raw, e820_raw_nr);
+    max_page = init_e820(e820_raw, &e820_raw_nr);
 
     /* Find the first high-memory RAM hole. */
     for ( i = 0; i < e820.nr_map; i++ )
@@ -537,11 +537,11 @@
         printk("Not enough memory to stash the DOM0 kernel image.\n");
         for ( ; ; ) ;
     }
-#if defined(__i386__)
+#if defined(CONFIG_X86_32)
     memmove((void *)initial_images_start,  /* use low mapping */
             (void *)mod[0].mod_start,      /* use low mapping */
             mod[mbi->mods_count-1].mod_end - mod[0].mod_start);
-#elif defined(__x86_64__)
+#elif defined(CONFIG_X86_64)
     memmove(__va(initial_images_start),
             __va(mod[0].mod_start),
             mod[mbi->mods_count-1].mod_end - mod[0].mod_start);
@@ -561,6 +561,21 @@
                             initial_images_end : e820.map[i].addr,
                             e820.map[i].addr + e820.map[i].size);
     }
+
+#if defined (CONFIG_X86_64)
+    /* On x86/64 we can 1:1 map every registered memory area. */
+    /* We use the raw_e820 map because we sometimes truncate the cooked map. */
+    for ( i = 0; i < e820_raw_nr; i++ )
+    {
+        unsigned long min, sz;
+        min = (unsigned long)e820_raw[i].addr &
+            ~(((unsigned long)L1_PAGETABLE_ENTRIES << PAGE_SHIFT) - 1);
+        sz  = ((unsigned long)e820_raw[i].size +
+               ((unsigned long)L1_PAGETABLE_ENTRIES << PAGE_SHIFT) - 1) &
+            ~(((unsigned long)L1_PAGETABLE_ENTRIES << PAGE_SHIFT) - 1);
+        map_pages(idle_pg_table, PAGE_OFFSET + min, min, sz, PAGE_HYPERVISOR);
+    }
+#endif
 
     printk("System RAM: %luMB (%lukB)\n", 
            nr_pages >> (20 - PAGE_SHIFT),
diff -Nru a/xen/arch/x86/x86_64/mm.c b/xen/arch/x86/x86_64/mm.c
--- a/xen/arch/x86/x86_64/mm.c  2005-05-17 07:03:55 -04:00
+++ b/xen/arch/x86/x86_64/mm.c  2005-05-17 07:03:55 -04:00
@@ -128,17 +128,11 @@
     map_pages(idle_pg_table, fix_to_virt(idx), p, PAGE_SIZE, flags);
 }
 
-
 void __init paging_init(void)
 {
-    unsigned long i, p, max;
+    unsigned long i, p;
     l3_pgentry_t *l3rw, *l3ro;
     struct pfn_info *pg;
-
-    /* Map all of physical memory. */
-    max = ((max_page + L1_PAGETABLE_ENTRIES - 1) & 
-           ~(L1_PAGETABLE_ENTRIES - 1)) << PAGE_SHIFT;
-    map_pages(idle_pg_table, PAGE_OFFSET, 0, max, PAGE_HYPERVISOR);
 
     /*
      * Allocate and map the machine-to-phys table.
diff -Nru a/xen/common/grant_table.c b/xen/common/grant_table.c
--- a/xen/common/grant_table.c  2005-05-17 07:03:55 -04:00
+++ b/xen/common/grant_table.c  2005-05-17 07:03:55 -04:00
@@ -1227,7 +1227,6 @@
     void)
 {
     /* Nothing. */
-    DPRINTK("Grant table init\n");
 }
 
 /*
diff -Nru a/xen/include/asm-x86/e820.h b/xen/include/asm-x86/e820.h
--- a/xen/include/asm-x86/e820.h        2005-05-17 07:03:55 -04:00
+++ b/xen/include/asm-x86/e820.h        2005-05-17 07:03:55 -04:00
@@ -24,7 +24,7 @@
     struct e820entry map[E820MAX];
 };
 
-extern unsigned long init_e820(struct e820entry *, int);
+extern unsigned long init_e820(struct e820entry *, int *);
 extern struct e820map e820;
 
 #ifndef NDEBUG

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] Initialise 1:1 mapping of physical memory map early during x86/64 boot., BitKeeper Bot <=