[S390] Make sure the restore psw masks are initialized.
[linux-2.6-block.git] / arch / s390 / kernel / setup.c
index 51d6309e7f3bc90939335c6269c04170ab987481..577aa7dd660eba1371d39fe33e8847cc6de815a3 100644 (file)
@@ -300,6 +300,7 @@ static void __init setup_zfcpdump(unsigned int console_devno)
        else
                sprintf(str, "cio_ignore=all,!0.0.%04x",
                        ipl_info.data.fcp.dev_id.devno);
+       strcat(COMMAND_LINE, " ");
        strcat(COMMAND_LINE, str);
        console_loglevel = 2;
 }
@@ -346,7 +347,7 @@ void (*_machine_power_off)(void) = do_machine_power_off_nonsmp;
 
 void machine_restart(char *command)
 {
-       if (!in_interrupt() || oops_in_progress)
+       if ((!in_interrupt() && !in_atomic()) || oops_in_progress)
                /*
                 * Only unblank the console if we are called in enabled
                 * context or a bust_spinlocks cleared the way for us.
@@ -485,12 +486,14 @@ static void setup_addressing_mode(void)
        if (s390_noexec) {
                printk("S390 execute protection active, ");
                set_amode_and_uaccess(PSW_ASC_SECONDARY, PSW32_ASC_SECONDARY);
-               return;
-       }
-       if (switch_amode) {
+       } else if (switch_amode) {
                printk("S390 address spaces switched, ");
                set_amode_and_uaccess(PSW_ASC_PRIMARY, PSW32_ASC_PRIMARY);
        }
+#ifdef CONFIG_TRACE_IRQFLAGS
+       sysc_restore_trace_psw.mask = psw_kernel_bits & ~PSW_MASK_MCHECK;
+       io_restore_trace_psw.mask = psw_kernel_bits & ~PSW_MASK_MCHECK;
+#endif
 }
 
 static void __init