From 4cb8428465148bcca0b6b8593d51f805818a70e0 Mon Sep 17 00:00:00 2001 From: Nicholas Piggin Date: Sat, 30 Jan 2021 23:08:23 +1000 Subject: [PATCH] powerpc: rearrange do_page_fault error case to be inside exception_enter This keeps the context tracking over the entire interrupt handler which helps later with moving context tracking into interrupt wrappers. Signed-off-by: Nicholas Piggin Signed-off-by: Michael Ellerman Link: https://lore.kernel.org/r/20210130130852.2952424-14-npiggin@gmail.com --- arch/powerpc/mm/fault.c | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/arch/powerpc/mm/fault.c b/arch/powerpc/mm/fault.c index e476d77014132..970ac317e018f 100644 --- a/arch/powerpc/mm/fault.c +++ b/arch/powerpc/mm/fault.c @@ -545,19 +545,24 @@ NOKPROBE_SYMBOL(__do_page_fault); long do_page_fault(struct pt_regs *regs) { const struct exception_table_entry *entry; - enum ctx_state prev_state = exception_enter(); - int rc = __do_page_fault(regs, regs->dar, regs->dsisr); - exception_exit(prev_state); - if (likely(!rc)) - return 0; + enum ctx_state prev_state; + long err; + + prev_state = exception_enter(); + err = __do_page_fault(regs, regs->dar, regs->dsisr); + if (likely(!err)) + goto out; entry = search_exception_tables(regs->nip); - if (unlikely(!entry)) - return rc; + if (likely(entry)) { + instruction_pointer_set(regs, extable_fixup(entry)); + err = 0; + } - instruction_pointer_set(regs, extable_fixup(entry)); +out: + exception_exit(prev_state); - return 0; + return err; } NOKPROBE_SYMBOL(do_page_fault); -- 2.39.5