print_machine_type();
        print_missing_facilities();
        sclp_early_printk("See Principles of Operations for facility bits\n");
-       disabled_wait(0x8badcccc);
+       disabled_wait();
 }
 
 void verify_facilities(void)
 
        sclp_early_printk(x);
        sclp_early_printk("\n\n -- System halted");
 
-       disabled_wait(0xdeadbeef);
+       disabled_wait();
 }
 
 #ifdef CONFIG_KERNEL_UNCOMPRESSED
 
 /*
  * Function to drop a processor into disabled wait state
  */
-static inline void __noreturn disabled_wait(unsigned long code)
+static inline void __noreturn disabled_wait(void)
 {
        psw_t psw;
 
        psw.mask = PSW_MASK_BASE | PSW_MASK_WAIT | PSW_MASK_BA | PSW_MASK_EA;
-       psw.addr = code;
+       psw.addr = _THIS_IP_;
        __load_psw(psw);
        while (1);
 }
 
        addr = S390_lowcore.program_old_psw.addr;
        fixup = s390_search_extables(addr);
        if (!fixup)
-               disabled_wait(0);
+               disabled_wait();
        /* Disable low address protection before storing into lowcore. */
        __ctl_store(cr0, 0, 0);
        cr0_new = cr0 & ~(1UL << 28);
        sclp_early_printk("Linux kernel boot failure: An attempt to boot a vmlinux ELF image failed.\n");
        sclp_early_printk("This image does not contain all parts necessary for starting up. Use\n");
        sclp_early_printk("bzImage or arch/s390/boot/compressed/vmlinux instead.\n");
-       disabled_wait(0xbadb007);
+       disabled_wait();
 }
 
 void __init startup_init(void)
 
                return;
        /* TOD clock not running. Set the clock to Unix Epoch. */
        if (set_tod_clock(TOD_UNIX_EPOCH) != 0 || store_tod_clock(&time) != 0)
-               disabled_wait(0);
+               disabled_wait();
 
        memset(tod_clock_base, 0, 16);
        *(__u64 *) &tod_clock_base[1] = TOD_UNIX_EPOCH;
 
        case IPL_TYPE_FCP_DUMP:
                break;
        }
-       disabled_wait((unsigned long) __builtin_return_address(0));
+       disabled_wait();
 }
 
 static void reipl_run(struct shutdown_trigger *trigger)
 {
        if (strcmp(trigger->name, ON_PANIC_STR) == 0 ||
            strcmp(trigger->name, ON_RESTART_STR) == 0)
-               disabled_wait((unsigned long) __builtin_return_address(0));
+               disabled_wait();
        smp_stop_cpu();
 }
 
 
        start_kdump(1);
 
        /* Die if start_kdump returns */
-       disabled_wait((unsigned long) __builtin_return_address(0));
+       disabled_wait();
 }
 
 /*
        (*data_mover)(&image->head, image->start);
 
        /* Die if kexec returns */
-       disabled_wait((unsigned long) __builtin_return_address(0));
+       disabled_wait();
 }
 
 /*
 
 static notrace void s390_handle_damage(void)
 {
        smp_emergency_stop();
-       disabled_wait((unsigned long) __builtin_return_address(0));
+       disabled_wait();
        while (1);
 }
 NOKPROBE_SYMBOL(s390_handle_damage);
 
        }
 #endif
 #if defined(CONFIG_S390)
-       {
-               unsigned long caller;
-
-               caller = (unsigned long)__builtin_return_address(0);
-               disabled_wait(caller);
-       }
+       disabled_wait();
 #endif
        pr_emerg("---[ end Kernel panic - not syncing: %s ]---\n", buf);
        local_irq_enable();