summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--arch/s390/include/asm/stacktrace.h4
-rw-r--r--arch/s390/kernel/machine_kexec.c13
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;