]> Pileus Git - ~andy/linux/blobdiff - arch/x86/kernel/setup.c
Merge remote-tracking branch 'spi/fix/mpc512x' into spi-linus
[~andy/linux] / arch / x86 / kernel / setup.c
index f8ec57815c05729baa90ac4df52b990975796e2e..f0de6294b95573bce74a61ff3b6fed04443f434e 100644 (file)
@@ -206,9 +206,9 @@ EXPORT_SYMBOL(boot_cpu_data);
 
 
 #if !defined(CONFIG_X86_PAE) || defined(CONFIG_X86_64)
-unsigned long mmu_cr4_features;
+__visible unsigned long mmu_cr4_features;
 #else
-unsigned long mmu_cr4_features = X86_CR4_PAE;
+__visible unsigned long mmu_cr4_features = X86_CR4_PAE;
 #endif
 
 /* Boot loader ID and version as integers, for the benefit of proc_dointvec */
@@ -426,25 +426,23 @@ static void __init reserve_initrd(void)
 static void __init parse_setup_data(void)
 {
        struct setup_data *data;
-       u64 pa_data;
+       u64 pa_data, pa_next;
 
        pa_data = boot_params.hdr.setup_data;
        while (pa_data) {
-               u32 data_len, map_len;
+               u32 data_len, map_len, data_type;
 
                map_len = max(PAGE_SIZE - (pa_data & ~PAGE_MASK),
                              (u64)sizeof(struct setup_data));
                data = early_memremap(pa_data, map_len);
                data_len = data->len + sizeof(struct setup_data);
-               if (data_len > map_len) {
-                       early_iounmap(data, map_len);
-                       data = early_memremap(pa_data, data_len);
-                       map_len = data_len;
-               }
+               data_type = data->type;
+               pa_next = data->next;
+               early_iounmap(data, map_len);
 
-               switch (data->type) {
+               switch (data_type) {
                case SETUP_E820_EXT:
-                       parse_e820_ext(data);
+                       parse_e820_ext(pa_data, data_len);
                        break;
                case SETUP_DTB:
                        add_dtb(pa_data);
@@ -452,8 +450,7 @@ static void __init parse_setup_data(void)
                default:
                        break;
                }
-               pa_data = data->next;
-               early_iounmap(data, map_len);
+               pa_data = pa_next;
        }
 }
 
@@ -1070,7 +1067,7 @@ void __init setup_arch(char **cmdline_p)
 
        cleanup_highmap();
 
-       memblock.current_limit = ISA_END_ADDRESS;
+       memblock_set_current_limit(ISA_END_ADDRESS);
        memblock_x86_fill();
 
        /*
@@ -1103,7 +1100,7 @@ void __init setup_arch(char **cmdline_p)
 
        setup_real_mode();
 
-       memblock.current_limit = get_max_mapped();
+       memblock_set_current_limit(get_max_mapped());
        dma_contiguous_reserve(0);
 
        /*