]> git.karo-electronics.de Git - linux-beck.git/blobdiff - arch/s390/kernel/setup.c
[PATCH] s390: improved machine check handling
[linux-beck.git] / arch / s390 / kernel / setup.c
index df83215beac34740263366f121b14d1ce6a0738c..eb7be0ad717551d61babe4be662f7e3b90c019d2 100644 (file)
@@ -414,7 +414,8 @@ setup_lowcore(void)
        lc->program_new_psw.mask = PSW_KERNEL_BITS;
        lc->program_new_psw.addr =
                PSW_ADDR_AMODE | (unsigned long)pgm_check_handler;
-       lc->mcck_new_psw.mask = PSW_KERNEL_BITS;
+       lc->mcck_new_psw.mask =
+               PSW_KERNEL_BITS & ~PSW_MASK_MCHECK & ~PSW_MASK_DAT;
        lc->mcck_new_psw.addr =
                PSW_ADDR_AMODE | (unsigned long) mcck_int_handler;
        lc->io_new_psw.mask = PSW_KERNEL_BITS;
@@ -424,12 +425,18 @@ setup_lowcore(void)
        lc->kernel_stack = ((unsigned long) &init_thread_union) + THREAD_SIZE;
        lc->async_stack = (unsigned long)
                __alloc_bootmem(ASYNC_SIZE, ASYNC_SIZE, 0) + ASYNC_SIZE;
-#ifdef CONFIG_CHECK_STACK
        lc->panic_stack = (unsigned long)
                __alloc_bootmem(PAGE_SIZE, PAGE_SIZE, 0) + PAGE_SIZE;
-#endif
        lc->current_task = (unsigned long) init_thread_union.thread_info.task;
        lc->thread_info = (unsigned long) &init_thread_union;
+#ifndef CONFIG_ARCH_S390X
+       if (MACHINE_HAS_IEEE) {
+               lc->extended_save_area_addr = (__u32)
+                       __alloc_bootmem(PAGE_SIZE, PAGE_SIZE, 0);
+               /* enable extended save area */
+               ctl_set_bit(14, 29);
+       }
+#endif
 #ifdef CONFIG_ARCH_S390X
        if (MACHINE_HAS_DIAG44)
                lc->diag44_opcode = 0x83000044;