diff options
-rw-r--r-- | arch/s390/include/asm/stacktrace.h | 4 | ||||
-rw-r--r-- | arch/s390/kernel/machine_kexec.c | 13 |
2 files changed, 5 insertions, 12 deletions
diff --git a/arch/s390/include/asm/stacktrace.h b/arch/s390/include/asm/stacktrace.h index 1966422cf030..78f7b729b65f 100644 --- a/arch/s390/include/asm/stacktrace.h +++ b/arch/s390/include/asm/stacktrace.h @@ -210,7 +210,9 @@ static __always_inline unsigned long get_stack_pointer(struct task_struct *task, #define call_nodat(nr, rettype, fn, ...) \ ({ \ rettype (*__fn)(CALL_PARM_##nr(__VA_ARGS__)) = (fn); \ - psw_t psw_enter, psw_leave; \ + /* aligned since psw_leave must not cross page boundary */ \ + psw_t __aligned(16) psw_leave; \ + psw_t psw_enter; \ CALL_LARGS_##nr(__VA_ARGS__); \ CALL_REGS_##nr; \ \ diff --git a/arch/s390/kernel/machine_kexec.c b/arch/s390/kernel/machine_kexec.c index f5d8abf3b4fb..6d9276c096a6 100644 --- a/arch/s390/kernel/machine_kexec.c +++ b/arch/s390/kernel/machine_kexec.c @@ -112,13 +112,6 @@ static noinline void __machine_kdump(void *image) store_status(__do_machine_kdump, image); } -static int do_start_kdump(struct kimage *image) -{ - purgatory_t purgatory = (purgatory_t)image->start; - - return call_nodat(1, int, purgatory, int, 0); -} - #endif /* CONFIG_CRASH_DUMP */ /* @@ -127,12 +120,10 @@ static int do_start_kdump(struct kimage *image) static bool kdump_csum_valid(struct kimage *image) { #ifdef CONFIG_CRASH_DUMP + purgatory_t purgatory = (purgatory_t)image->start; int rc; - preempt_disable(); - rc = call_on_stack(1, S390_lowcore.nodat_stack, int, do_start_kdump, - struct kimage *, image); - preempt_enable(); + rc = call_nodat(1, int, purgatory, int, 0); return rc == 0; #else return false; |