mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-03 11:06:42 +07:00
sparc32: drop hardcoding trap_level in kgdb_trap
Fix this so we pass the trap_level from the actual trap code like we do in sparc64. Add use on ENTRY(), ENDPROC() in the assembler function too. This fixes a bug where the hardcoded value for trap_level was the sparc64 value. As the generic code does not use the trap_level argument (for sparc32) - this patch does not have any functional impact. Signed-off-by: Sam Ravnborg <sam@ravnborg.org> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
33656a1f2e
commit
d097efa950
@ -43,10 +43,10 @@
|
||||
nop;
|
||||
|
||||
#ifdef CONFIG_KGDB
|
||||
#define KGDB_TRAP(num) \
|
||||
b kgdb_trap_low; \
|
||||
rd %psr,%l0; \
|
||||
nop; \
|
||||
#define KGDB_TRAP(num) \
|
||||
mov num, %l7; \
|
||||
b kgdb_trap_low; \
|
||||
rd %psr,%l0; \
|
||||
nop;
|
||||
#else
|
||||
#define KGDB_TRAP(num) \
|
||||
|
@ -28,10 +28,10 @@ enum regnames {
|
||||
#define NUMREGBYTES ((GDB_CSR + 1) * 4)
|
||||
#else
|
||||
#define NUMREGBYTES ((GDB_Y + 1) * 8)
|
||||
#endif
|
||||
|
||||
struct pt_regs;
|
||||
asmlinkage void kgdb_trap(unsigned long trap_level, struct pt_regs *regs);
|
||||
#endif
|
||||
|
||||
void arch_kgdb_breakpoint(void);
|
||||
|
||||
|
@ -1225,20 +1225,18 @@ breakpoint_trap:
|
||||
RESTORE_ALL
|
||||
|
||||
#ifdef CONFIG_KGDB
|
||||
.align 4
|
||||
.globl kgdb_trap_low
|
||||
.type kgdb_trap_low,#function
|
||||
kgdb_trap_low:
|
||||
ENTRY(kgdb_trap_low)
|
||||
rd %wim,%l3
|
||||
SAVE_ALL
|
||||
wr %l0, PSR_ET, %psr
|
||||
WRITE_PAUSE
|
||||
|
||||
mov %l7, %o0 ! trap_level
|
||||
call kgdb_trap
|
||||
add %sp, STACKFRAME_SZ, %o0
|
||||
add %sp, STACKFRAME_SZ, %o1 ! struct pt_regs *regs
|
||||
|
||||
RESTORE_ALL
|
||||
.size kgdb_trap_low,.-kgdb_trap_low
|
||||
ENDPROC(kgdb_trap_low)
|
||||
#endif
|
||||
|
||||
.align 4
|
||||
|
@ -135,19 +135,19 @@ int kgdb_arch_handle_exception(int e_vector, int signo, int err_code,
|
||||
|
||||
extern void do_hw_interrupt(struct pt_regs *regs, unsigned long type);
|
||||
|
||||
asmlinkage void kgdb_trap(struct pt_regs *regs)
|
||||
asmlinkage void kgdb_trap(unsigned long trap_level, struct pt_regs *regs)
|
||||
{
|
||||
unsigned long flags;
|
||||
|
||||
if (user_mode(regs)) {
|
||||
do_hw_interrupt(regs, 0xfd);
|
||||
do_hw_interrupt(regs, trap_level);
|
||||
return;
|
||||
}
|
||||
|
||||
flushw_all();
|
||||
|
||||
local_irq_save(flags);
|
||||
kgdb_handle_exception(0x172, SIGTRAP, 0, regs);
|
||||
kgdb_handle_exception(trap_level, SIGTRAP, 0, regs);
|
||||
local_irq_restore(flags);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user