aboutsummaryrefslogtreecommitdiff
path: root/arch/s390/kernel/early.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/s390/kernel/early.c')
-rw-r--r--arch/s390/kernel/early.c14
1 files changed, 3 insertions, 11 deletions
diff --git a/arch/s390/kernel/early.c b/arch/s390/kernel/early.c
index 9d151808d03e..5715d1aab173 100644
--- a/arch/s390/kernel/early.c
+++ b/arch/s390/kernel/early.c
@@ -149,22 +149,14 @@ static __init void setup_topology(void)
topology_max_mnest = max_mnest;
}
-static void early_pgm_check_handler(void)
+static void early_pgm_check_handler(struct pt_regs *regs)
{
const struct exception_table_entry *fixup;
- unsigned long cr0, cr0_new;
- unsigned long addr;
- addr = S390_lowcore.program_old_psw.addr;
- fixup = s390_search_extables(addr);
+ fixup = s390_search_extables(regs->psw.addr);
if (!fixup)
disabled_wait();
- /* Disable low address protection before storing into lowcore. */
- __ctl_store(cr0, 0, 0);
- cr0_new = cr0 & ~(1UL << 28);
- __ctl_load(cr0_new, 0, 0);
- S390_lowcore.program_old_psw.addr = extable_fixup(fixup);
- __ctl_load(cr0, 0, 0);
+ regs->psw.addr = extable_fixup(fixup);
}
static noinline __init void setup_lowcore_early(void)