]> xenbits.xensource.com Git - xenclient/kernel.git/commitdiff
Revert 630:9c730ffb48f. Crashes on boot.
authorKeir Fraser <keir.fraser@citrix.com>
Mon, 11 Aug 2008 12:39:00 +0000 (13:39 +0100)
committerKeir Fraser <keir.fraser@citrix.com>
Mon, 11 Aug 2008 12:39:00 +0000 (13:39 +0100)
Signed-off-by: Keir Fraser <keir.fraser@citrix.com>
arch/i386/kernel/setup-xen.c
arch/x86_64/kernel/e820-xen.c
arch/x86_64/kernel/setup-xen.c
arch/x86_64/mm/init-xen.c
drivers/xen/core/machine_reboot.c
include/asm-x86_64/mach-xen/asm/pgtable.h

index 6fb2eaaaa2de3dde640d7140c0f8b6ee8e7c163a..f7e17485f598802db5fd3c0b2c2dcadb71e68cf0 100644 (file)
@@ -405,7 +405,7 @@ shared_info_t *HYPERVISOR_shared_info = (shared_info_t *)empty_zero_page;
 EXPORT_SYMBOL(HYPERVISOR_shared_info);
 
 unsigned long *phys_to_machine_mapping;
-unsigned long *pfn_to_mfn_frame_list_list, **pfn_to_mfn_frame_list;
+unsigned long *pfn_to_mfn_frame_list_list, *pfn_to_mfn_frame_list[16];
 EXPORT_SYMBOL(phys_to_machine_mapping);
 
 /* Raw start-of-day parameters from the hypervisor. */
@@ -831,7 +831,6 @@ static void __init parse_cmdline_early (char ** cmdline_p)
                        }
                }
 
-#ifndef CONFIG_XEN
                else if (!memcmp(from, "memmap=", 7)) {
                        if (to != command_line)
                                to--;
@@ -873,7 +872,6 @@ static void __init parse_cmdline_early (char ** cmdline_p)
                                }
                        }
                }
-#endif
 
                else if (!memcmp(from, "noexec=", 7))
                        noexec_setup(from + 7);
@@ -1619,7 +1617,7 @@ void __init setup_arch(char **cmdline_p)
        int i, j, k, fpp;
        struct physdev_set_iopl set_iopl;
        unsigned long max_low_pfn;
-       unsigned long p2m_pages, size;
+       unsigned long p2m_pages;
 
        /* Force a quick death if the kernel panics (not domain 0). */
        extern int panic_timeout;
@@ -1781,11 +1779,11 @@ void __init setup_arch(char **cmdline_p)
        if (!xen_feature(XENFEAT_auto_translated_physmap)) {
                phys_to_machine_mapping = alloc_bootmem_low_pages(
                     max_pfn * sizeof(unsigned long));
+               memset(phys_to_machine_mapping, ~0,
+                      max_pfn * sizeof(unsigned long));
                memcpy(phys_to_machine_mapping,
                       (unsigned long *)xen_start_info->mfn_list,
                       p2m_pages * sizeof(unsigned long));
-               memset(phys_to_machine_mapping + p2m_pages, ~0,
-                      (max_pfn - p2m_pages) * sizeof(unsigned long));
                free_bootmem(
                     __pa(xen_start_info->mfn_list),
                     PFN_PHYS(PFN_UP(xen_start_info->nr_pages *
@@ -1795,18 +1793,13 @@ void __init setup_arch(char **cmdline_p)
                 * Initialise the list of the frames that specify the list of
                 * frames that make up the p2m table. Used by save/restore
                 */
-               fpp = PAGE_SIZE/sizeof(unsigned long);
-               size = (max_pfn + fpp - 1) / fpp;
-               size = (size + fpp - 1) / fpp;
-               size *= sizeof(unsigned long);
-               BUG_ON(size > PAGE_SIZE);
-               pfn_to_mfn_frame_list_list = alloc_bootmem_low_pages(size);
-               pfn_to_mfn_frame_list = alloc_bootmem_low(size);
+               pfn_to_mfn_frame_list_list = alloc_bootmem_low_pages(PAGE_SIZE);
 
+               fpp = PAGE_SIZE/sizeof(unsigned long);
                for (i=0, j=0, k=-1; i< max_pfn; i+=fpp, j++) {
                        if ((j % fpp) == 0) {
                                k++;
-                               BUG_ON(k * sizeof(unsigned long) >= size);
+                               BUG_ON(k>=16);
                                pfn_to_mfn_frame_list[k] =
                                        alloc_bootmem_low_pages(PAGE_SIZE);
                                pfn_to_mfn_frame_list_list[k] =
index e713667c27254f8d8a41ee08066ac35301b0d6de..413d6b15773d652afb860f894116415ef828b3a5 100644 (file)
@@ -16,7 +16,6 @@
 #include <linux/string.h>
 #include <linux/kexec.h>
 #include <linux/module.h>
-#include <linux/mm.h>
 
 #include <asm/pgtable.h>
 #include <asm/page.h>
@@ -704,24 +703,6 @@ void __init parse_memopt(char *p, char **from)
        i = e820.nr_map-1;
        current_end = e820.map[i].addr + e820.map[i].size;
 
-       /*
-        * A little less than 2% of available memory are needed for page
-        * tables, p2m map, and mem_map. Hence the maximum amount of memory
-        * we can potentially balloon up to cannot exceed about 50 times
-        * what we've been given initially.
-        */
-#define PAGE_OVERHEAD (PAGE_SIZE \
-                      / (sizeof(pte_t) + sizeof(long) + sizeof(struct page)))
-       if (end_user_pfn / (PAGE_OVERHEAD - 1) > xen_start_info->nr_pages) {
-               end = (xen_start_info->nr_pages * (PAGE_OVERHEAD - 1))
-                     << PAGE_SHIFT;
-               printk(KERN_WARNING "mem=%lu is invalid for an initial"
-                                   " allocation of %lu, using %lu\n",
-                      end_user_pfn << PAGE_SHIFT,
-                      xen_start_info->nr_pages << PAGE_SHIFT, end);
-               end_user_pfn = end >> PAGE_SHIFT;
-       }
-
        if (current_end < end) {
                /*
                  * The e820 map ends before our requested size so
@@ -734,7 +715,6 @@ void __init parse_memopt(char *p, char **from)
        }
 } 
 
-#ifndef CONFIG_XEN
 void __init parse_memmapopt(char *p, char **from)
 {
        unsigned long long start_at, mem_size;
@@ -755,7 +735,6 @@ void __init parse_memmapopt(char *p, char **from)
        }
        p = *from;
 }
-#endif
 
 unsigned long pci_mem_start = 0xaeedbabe;
 EXPORT_SYMBOL(pci_mem_start);
index cfff7ba59538d9bde4c01b4d78123cee12948745..10ac4bb24a26f167236b7fdc3cc410743af0dad7 100644 (file)
@@ -97,7 +97,7 @@ static struct notifier_block xen_panic_block = {
 };
 
 unsigned long *phys_to_machine_mapping;
-unsigned long *pfn_to_mfn_frame_list_list, **pfn_to_mfn_frame_list;
+unsigned long *pfn_to_mfn_frame_list_list, *pfn_to_mfn_frame_list[512];
 
 EXPORT_SYMBOL(phys_to_machine_mapping);
 
@@ -419,7 +419,6 @@ static __init void parse_cmdline_early (char ** cmdline_p)
                if (!memcmp(from, "mem=", 4))
                        parse_memopt(from+4, &from); 
 
-#ifndef CONFIG_XEN
                if (!memcmp(from, "memmap=", 7)) {
                        /* exactmap option is for used defined memory */
                        if (!memcmp(from+7, "exactmap", 8)) {
@@ -441,7 +440,6 @@ static __init void parse_cmdline_early (char ** cmdline_p)
                                userdef = 1;
                        }
                }
-#endif
 
 #ifdef CONFIG_NUMA
                if (!memcmp(from, "numa=", 5))
@@ -778,7 +776,7 @@ void __init setup_arch(char **cmdline_p)
 #ifdef CONFIG_XEN
        {
                int i, j, k, fpp;
-               unsigned long p2m_pages, size;
+               unsigned long p2m_pages;
 
                p2m_pages = end_pfn;
                if (xen_start_info->nr_pages > end_pfn) {
@@ -810,11 +808,11 @@ void __init setup_arch(char **cmdline_p)
                        /* Make sure we have a large enough P->M table. */
                        phys_to_machine_mapping = alloc_bootmem_pages(
                                end_pfn * sizeof(unsigned long));
+                       memset(phys_to_machine_mapping, ~0,
+                              end_pfn * sizeof(unsigned long));
                        memcpy(phys_to_machine_mapping,
                               (unsigned long *)xen_start_info->mfn_list,
                               p2m_pages * sizeof(unsigned long));
-                       memset(phys_to_machine_mapping + p2m_pages, ~0,
-                              (end_pfn - p2m_pages) * sizeof(unsigned long));
                        free_bootmem(
                                __pa(xen_start_info->mfn_list),
                                PFN_PHYS(PFN_UP(xen_start_info->nr_pages *
@@ -825,22 +823,13 @@ void __init setup_arch(char **cmdline_p)
                         * list of frames that make up the p2m table. Used by
                          * save/restore.
                         */
-                       fpp = PAGE_SIZE/sizeof(unsigned long);
-                       size = (max_pfn + fpp - 1) / fpp;
-                       size = (size + fpp - 1) / fpp;
-                       size *= sizeof(unsigned long);
-                       pfn_to_mfn_frame_list_list = alloc_bootmem_pages(size);
-                       if (size > PAGE_SIZE
-                           && xen_create_contiguous_region((unsigned long)
-                                                           pfn_to_mfn_frame_list_list,
-                                                           get_order(size), 0))
-                               BUG();
-                       pfn_to_mfn_frame_list = alloc_bootmem(size);
+                       pfn_to_mfn_frame_list_list = alloc_bootmem_pages(PAGE_SIZE);
 
+                       fpp = PAGE_SIZE/sizeof(unsigned long);
                        for (i=0, j=0, k=-1; i< end_pfn; i+=fpp, j++) {
                                if ((j % fpp) == 0) {
                                        k++;
-                                       BUG_ON(k * sizeof(unsigned long) >= size);
+                                       BUG_ON(k>=fpp);
                                        pfn_to_mfn_frame_list[k] =
                                                alloc_bootmem_pages(PAGE_SIZE);
                                        pfn_to_mfn_frame_list_list[k] =
index 23c576ef11f300a41fa78b710e6cde725e443752..0a86adf47f2f69c4b242ec976280620c596461f1 100644 (file)
@@ -610,13 +610,6 @@ static void __init extend_init_mapping(unsigned long tables_space)
        while (va < (__START_KERNEL_map
                     + (start_pfn << PAGE_SHIFT)
                     + tables_space)) {
-               if (!pmd_index(va) && !pte_index(va)) {
-                       page = (unsigned long *)init_level4_pgt;
-                       addr = page[pgd_index(va)];
-                       addr_to_page(addr, page);
-                       addr = page[pud_index(va)];
-                       addr_to_page(addr, page);
-               }
                pmd = (pmd_t *)&page[pmd_index(va)];
                if (pmd_none(*pmd)) {
                        pte_page = alloc_static_page(&phys);
index f92c90873879ba8251e9b73bc12ae5dda09252d5..e011788a8636c99d5c6f80a320f4f465f4bc156f 100644 (file)
@@ -74,7 +74,7 @@ static void post_suspend(int suspend_cancelled)
        unsigned long shinfo_mfn;
        extern unsigned long max_pfn;
        extern unsigned long *pfn_to_mfn_frame_list_list;
-       extern unsigned long **pfn_to_mfn_frame_list;
+       extern unsigned long *pfn_to_mfn_frame_list[];
 
        if (suspend_cancelled) {
                xen_start_info->store_mfn =
index 6600795a727ef3d9d11753111217a651bb9b4b8a..fb1e21208cb8c71c217dde0296bd797c58e1edf9 100644 (file)
@@ -135,11 +135,11 @@ static inline void pgd_clear (pgd_t * pgd)
 #define FIRST_USER_ADDRESS     0
 
 #ifndef __ASSEMBLY__
-#define MAXMEM          0xdfffffffffUL
+#define MAXMEM          0x3fffffffffffUL
 #define VMALLOC_START    0xffffc20000000000UL
 #define VMALLOC_END      0xffffe1ffffffffffUL
 #define MODULES_VADDR    0xffffffff88000000UL
-#define MODULES_END      0xffffffffff000000UL
+#define MODULES_END      0xfffffffffff00000UL
 #define MODULES_LEN   (MODULES_END - MODULES_VADDR)
 
 #define _PAGE_BIT_PRESENT      0