diff options
Diffstat (limited to 'arch/s390/kernel/machine_kexec.c')
-rw-r--r-- | arch/s390/kernel/machine_kexec.c | 19 |
1 files changed, 8 insertions, 11 deletions
diff --git a/arch/s390/kernel/machine_kexec.c b/arch/s390/kernel/machine_kexec.c index 4685337fa7c6..fb0901ec4306 100644 --- a/arch/s390/kernel/machine_kexec.c +++ b/arch/s390/kernel/machine_kexec.c | |||
@@ -103,21 +103,18 @@ static int __init machine_kdump_pm_init(void) | |||
103 | return 0; | 103 | return 0; |
104 | } | 104 | } |
105 | arch_initcall(machine_kdump_pm_init); | 105 | arch_initcall(machine_kdump_pm_init); |
106 | #endif | ||
107 | 106 | ||
108 | /* | 107 | /* |
109 | * Start kdump: We expect here that a store status has been done on our CPU | 108 | * Start kdump: We expect here that a store status has been done on our CPU |
110 | */ | 109 | */ |
111 | static void __do_machine_kdump(void *image) | 110 | static void __do_machine_kdump(void *image) |
112 | { | 111 | { |
113 | #ifdef CONFIG_CRASH_DUMP | ||
114 | int (*start_kdump)(int) = (void *)((struct kimage *) image)->start; | 112 | int (*start_kdump)(int) = (void *)((struct kimage *) image)->start; |
115 | 113 | ||
116 | setup_regs(); | ||
117 | __load_psw_mask(PSW_MASK_BASE | PSW_DEFAULT_KEY | PSW_MASK_EA | PSW_MASK_BA); | 114 | __load_psw_mask(PSW_MASK_BASE | PSW_DEFAULT_KEY | PSW_MASK_EA | PSW_MASK_BA); |
118 | start_kdump(1); | 115 | start_kdump(1); |
119 | #endif | ||
120 | } | 116 | } |
117 | #endif | ||
121 | 118 | ||
122 | /* | 119 | /* |
123 | * Check if kdump checksums are valid: We call purgatory with parameter "0" | 120 | * Check if kdump checksums are valid: We call purgatory with parameter "0" |
@@ -249,18 +246,18 @@ static void __do_machine_kexec(void *data) | |||
249 | */ | 246 | */ |
250 | static void __machine_kexec(void *data) | 247 | static void __machine_kexec(void *data) |
251 | { | 248 | { |
252 | struct kimage *image = data; | ||
253 | |||
254 | __arch_local_irq_stosm(0x04); /* enable DAT */ | 249 | __arch_local_irq_stosm(0x04); /* enable DAT */ |
255 | pfault_fini(); | 250 | pfault_fini(); |
256 | tracing_off(); | 251 | tracing_off(); |
257 | debug_locks_off(); | 252 | debug_locks_off(); |
258 | if (image->type == KEXEC_TYPE_CRASH) { | 253 | #ifdef CONFIG_CRASH_DUMP |
254 | if (((struct kimage *) data)->type == KEXEC_TYPE_CRASH) { | ||
255 | |||
259 | lgr_info_log(); | 256 | lgr_info_log(); |
260 | s390_reset_system(__do_machine_kdump, data); | 257 | s390_reset_system(setup_regs, __do_machine_kdump, data); |
261 | } else { | 258 | } else |
262 | s390_reset_system(__do_machine_kexec, data); | 259 | #endif |
263 | } | 260 | s390_reset_system(NULL, __do_machine_kexec, data); |
264 | disabled_wait((unsigned long) __builtin_return_address(0)); | 261 | disabled_wait((unsigned long) __builtin_return_address(0)); |
265 | } | 262 | } |
266 | 263 | ||