Commit 18722ecf authored by Nicholas Piggin's avatar Nicholas Piggin Committed by Michael Ellerman

powerpc: do_break get registers from regs

Similar to the previous patch this makes interrupt handler function
types more regular so they can be wrapped with the next patch.
Signed-off-by: default avatarNicholas Piggin <npiggin@gmail.com>
Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/20210130130852.2952424-9-npiggin@gmail.com
parent b4ced803
...@@ -52,8 +52,7 @@ extern void do_send_trap(struct pt_regs *regs, unsigned long address, ...@@ -52,8 +52,7 @@ extern void do_send_trap(struct pt_regs *regs, unsigned long address,
unsigned long error_code, int brkpt); unsigned long error_code, int brkpt);
#else #else
extern void do_break(struct pt_regs *regs, unsigned long address, void do_break(struct pt_regs *regs);
unsigned long error_code);
#endif #endif
#endif /* _ASM_POWERPC_DEBUG_H */ #endif /* _ASM_POWERPC_DEBUG_H */
...@@ -364,10 +364,9 @@ do_databreakpoint: ...@@ -364,10 +364,9 @@ do_databreakpoint:
addi r3,r1,STACK_FRAME_OVERHEAD addi r3,r1,STACK_FRAME_OVERHEAD
mfspr r4,SPRN_BAR mfspr r4,SPRN_BAR
stw r4,_DAR(r11) stw r4,_DAR(r11)
#ifdef CONFIG_VMAP_STACK #ifndef CONFIG_VMAP_STACK
lwz r5,_DSISR(r11)
#else
mfspr r5,SPRN_DSISR mfspr r5,SPRN_DSISR
stw r5,_DSISR(r11)
#endif #endif
EXC_XFER_STD(0x1c00, do_break) EXC_XFER_STD(0x1c00, do_break)
......
...@@ -659,11 +659,10 @@ static void do_break_handler(struct pt_regs *regs) ...@@ -659,11 +659,10 @@ static void do_break_handler(struct pt_regs *regs)
} }
} }
void do_break (struct pt_regs *regs, unsigned long address, void do_break(struct pt_regs *regs)
unsigned long error_code)
{ {
current->thread.trap_nr = TRAP_HWBKPT; current->thread.trap_nr = TRAP_HWBKPT;
if (notify_die(DIE_DABR_MATCH, "dabr_match", regs, error_code, if (notify_die(DIE_DABR_MATCH, "dabr_match", regs, regs->dsisr,
11, SIGSEGV) == NOTIFY_STOP) 11, SIGSEGV) == NOTIFY_STOP)
return; return;
...@@ -681,7 +680,7 @@ void do_break (struct pt_regs *regs, unsigned long address, ...@@ -681,7 +680,7 @@ void do_break (struct pt_regs *regs, unsigned long address,
do_break_handler(regs); do_break_handler(regs);
/* Deliver the signal to userspace */ /* Deliver the signal to userspace */
force_sig_fault(SIGTRAP, TRAP_HWBKPT, (void __user *)address); force_sig_fault(SIGTRAP, TRAP_HWBKPT, (void __user *)regs->dar);
} }
#endif /* CONFIG_PPC_ADV_DEBUG_REGS */ #endif /* CONFIG_PPC_ADV_DEBUG_REGS */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment