x86: Reserve setup_data ranges late after parsing memmap cmdline
authorDave Young <dyoung@redhat.com>
Fri, 20 Dec 2013 10:02:22 +0000 (18:02 +0800)
committerMatt Fleming <matt.fleming@intel.com>
Sun, 29 Dec 2013 13:09:07 +0000 (13:09 +0000)
Currently e820_reserve_setup_data() is called before parsing early
params, it works in normal case. But for memmap=exactmap, the final
memory ranges are created after parsing memmap= cmdline params, so the
previous e820_reserve_setup_data() has no effect. For example,
setup_data ranges will still be marked as normal system ram, thus when
later sysfs driver ioremap them kernel will warn about mapping normal
ram.

This patch fix it by moving the e820_reserve_setup_data() callback after
parsing early params so they can be set as reserved ranges and later
ioremap will be fine with it.

Signed-off-by: Dave Young <dyoung@redhat.com>
Acked-by: Borislav Petkov <bp@suse.de>
Tested-by: Toshi Kani <toshi.kani@hp.com>
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
arch/x86/kernel/setup.c

index 24536f7a0ae6cacc62698c9e9c1d78674c5e6483..be4b456e444ba6fbd23f3a2a8dead363ab25275c 100644 (file)
@@ -927,8 +927,6 @@ void __init setup_arch(char **cmdline_p)
        iomem_resource.end = (1ULL << boot_cpu_data.x86_phys_bits) - 1;
        setup_memory_map();
        parse_setup_data();
-       /* update the e820_saved too */
-       e820_reserve_setup_data();
 
        copy_edd();
 
@@ -990,6 +988,8 @@ void __init setup_arch(char **cmdline_p)
                early_dump_pci_devices();
 #endif
 
+       /* update the e820_saved too */
+       e820_reserve_setup_data();
        finish_e820_parsing();
 
        if (efi_enabled(EFI_BOOT))