powerpc/64s: add do_bad_page_fault_segv handler
authorNicholas Piggin <npiggin@gmail.com>
Sat, 30 Jan 2021 13:08:22 +0000 (23:08 +1000)
committerMichael Ellerman <mpe@ellerman.id.au>
Mon, 8 Feb 2021 13:02:09 +0000 (00:02 +1100)
This function acts like an interrupt handler so it needs to follow
the standard interrupt handler function signature which will be
introduced in a future change.

Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/20210130130852.2952424-13-npiggin@gmail.com
arch/powerpc/include/asm/bug.h
arch/powerpc/kernel/exceptions-64s.S
arch/powerpc/mm/fault.c

index 4220789..8f09dda 100644 (file)
@@ -114,6 +114,7 @@ struct pt_regs;
 long do_page_fault(struct pt_regs *);
 void bad_page_fault(struct pt_regs *, int);
 void __bad_page_fault(struct pt_regs *regs, int sig);
+void do_bad_page_fault_segv(struct pt_regs *regs);
 extern void _exception(int, struct pt_regs *, int, unsigned long);
 extern void _exception_pkey(struct pt_regs *, unsigned long, int);
 extern void die(const char *, struct pt_regs *, long);
index 33f88a1..fc793fa 100644 (file)
@@ -2151,9 +2151,7 @@ EXC_COMMON_BEGIN(h_data_storage_common)
        GEN_COMMON h_data_storage
        addi    r3,r1,STACK_FRAME_OVERHEAD
 BEGIN_MMU_FTR_SECTION
-       ld      r4,_DAR(r1)
-       li      r5,SIGSEGV
-       bl      bad_page_fault
+       bl      do_bad_page_fault_segv
 MMU_FTR_SECTION_ELSE
        bl      unknown_exception
 ALT_MMU_FTR_SECTION_END_IFSET(MMU_FTR_TYPE_RADIX)
index 5dd3248..e476d77 100644 (file)
@@ -615,3 +615,10 @@ void bad_page_fault(struct pt_regs *regs, int sig)
        else
                __bad_page_fault(regs, sig);
 }
+
+#ifdef CONFIG_PPC_BOOK3S_64
+void do_bad_page_fault_segv(struct pt_regs *regs)
+{
+       bad_page_fault(regs, SIGSEGV);
+}
+#endif