These changes are the raw update to linux-4.4.6-rt14. Kernel sources
[kvmfornfv.git] / kernel / arch / s390 / kernel / setup.c
index 1942f22..c837bca 100644 (file)
@@ -62,6 +62,7 @@
 #include <asm/os_info.h>
 #include <asm/sclp.h>
 #include <asm/sysinfo.h>
+#include <asm/numa.h>
 #include "entry.h"
 
 /*
@@ -76,7 +77,7 @@ EXPORT_SYMBOL(console_devno);
 unsigned int console_irq = -1;
 EXPORT_SYMBOL(console_irq);
 
-unsigned long elf_hwcap = 0;
+unsigned long elf_hwcap __read_mostly = 0;
 char elf_platform[ELF_PLATFORM_SIZE];
 
 int __initdata memory_end_set;
@@ -128,9 +129,9 @@ __setup("condev=", condev_setup);
 static void __init set_preferred_console(void)
 {
        if (MACHINE_IS_KVM) {
-               if (sclp_has_vt220())
+               if (sclp.has_vt220)
                        add_preferred_console("ttyS", 1, NULL);
-               else if (sclp_has_linemode())
+               else if (sclp.has_linemode)
                        add_preferred_console("ttyS", 0, NULL);
                else
                        add_preferred_console("hvc", 0, NULL);
@@ -510,8 +511,8 @@ static void reserve_memory_end(void)
 {
 #ifdef CONFIG_CRASH_DUMP
        if (ipl_info.type == IPL_TYPE_FCP_DUMP &&
-           !OLDMEM_BASE && sclp_get_hsa_size()) {
-               memory_end = sclp_get_hsa_size();
+           !OLDMEM_BASE && sclp.hsa_size) {
+               memory_end = sclp.hsa_size;
                memory_end &= PAGE_MASK;
                memory_end_set = 1;
        }
@@ -576,7 +577,7 @@ static void __init reserve_crashkernel(void)
                crash_base = low;
        } else {
                /* Find suitable area in free memory */
-               low = max_t(unsigned long, crash_size, sclp_get_hsa_size());
+               low = max_t(unsigned long, crash_size, sclp.hsa_size);
                high = crash_base ? crash_base + crash_size : ULONG_MAX;
 
                if (crash_base && crash_base < low) {
@@ -640,19 +641,24 @@ static void __init check_initrd(void)
 }
 
 /*
- * Reserve all kernel text
+ * Reserve memory used for lowcore/command line/kernel image.
  */
 static void __init reserve_kernel(void)
 {
-       unsigned long start_pfn;
-       start_pfn = PFN_UP(__pa(&_end));
+       unsigned long start_pfn = PFN_UP(__pa(&_end));
 
+#ifdef CONFIG_DMA_API_DEBUG
        /*
-        * Reserve memory used for lowcore/command line/kernel image.
+        * DMA_API_DEBUG code stumbles over addresses from the
+        * range [_ehead, _stext]. Mark the memory as reserved
+        * so it is not used for CONFIG_DMA_API_DEBUG=y.
         */
+       memblock_reserve(0, PFN_PHYS(start_pfn));
+#else
        memblock_reserve(0, (unsigned long)_ehead);
        memblock_reserve((unsigned long)_stext, PFN_PHYS(start_pfn)
                         - (unsigned long)_stext);
+#endif
 }
 
 static void __init reserve_elfcorehdr(void)
@@ -758,9 +764,6 @@ static int __init setup_hwcaps(void)
        get_cpu_id(&cpu_id);
        add_device_randomness(&cpu_id, sizeof(cpu_id));
        switch (cpu_id.machine) {
-       case 0x9672:
-               strcpy(elf_platform, "g5");
-               break;
        case 0x2064:
        case 0x2066:
        default:        /* Use "z900" as default for 64 bit kernels. */
@@ -867,12 +870,18 @@ void __init setup_arch(char **cmdline_p)
 
        check_initrd();
        reserve_crashkernel();
+       /*
+        * Be aware that smp_save_dump_cpus() triggers a system reset.
+        * Therefore CPU and device initialization should be done afterwards.
+        */
+       smp_save_dump_cpus();
 
        setup_resources();
        setup_vmcoreinfo();
        setup_lowcore();
        smp_fill_possible_mask();
         cpu_init();
+       numa_setup();
 
        /*
         * Create kernel page tables and switch to virtual addressing.