lc->restart_psw.mask = PSW_KERNEL_BITS & ~PSW_MASK_DAT;
        lc->restart_psw.addr = __pa(restart_int_handler);
-       lc->external_new_psw.mask = PSW_KERNEL_BITS | PSW_MASK_MCHECK;
+       lc->external_new_psw.mask = PSW_KERNEL_BITS;
        lc->external_new_psw.addr = (unsigned long) ext_int_handler;
-       lc->svc_new_psw.mask = PSW_KERNEL_BITS | PSW_MASK_MCHECK;
+       lc->svc_new_psw.mask = PSW_KERNEL_BITS;
        lc->svc_new_psw.addr = (unsigned long) system_call;
-       lc->program_new_psw.mask = PSW_KERNEL_BITS | PSW_MASK_MCHECK;
+       lc->program_new_psw.mask = PSW_KERNEL_BITS;
        lc->program_new_psw.addr = (unsigned long) pgm_check_handler;
        lc->mcck_new_psw.mask = PSW_KERNEL_BITS;
        lc->mcck_new_psw.addr = (unsigned long) mcck_int_handler;
-       lc->io_new_psw.mask = PSW_KERNEL_BITS | PSW_MASK_MCHECK;
+       lc->io_new_psw.mask = PSW_KERNEL_BITS;
        lc->io_new_psw.addr = (unsigned long) io_int_handler;
        lc->clock_comparator = clock_comparator_max;
        lc->current_task = (unsigned long)&init_task;
 
 
 void __init trap_init(void)
 {
+       unsigned long flags;
+       struct ctlreg cr0;
+
+       local_irq_save(flags);
+       cr0 = local_ctl_clear_bit(0, CR0_LOW_ADDRESS_PROTECTION_BIT);
+       psw_bits(S390_lowcore.external_new_psw).mcheck = 1;
+       psw_bits(S390_lowcore.program_new_psw).mcheck = 1;
+       psw_bits(S390_lowcore.svc_new_psw).mcheck = 1;
+       psw_bits(S390_lowcore.io_new_psw).mcheck = 1;
+       local_ctl_load(0, &cr0);
+       local_irq_restore(flags);
        local_mcck_enable();
        test_monitor_call();
 }