mirror of https://gitee.com/openkylin/linux.git
powerpc: add and use unknown_async_exception
This is currently the same as unknown_exception, but it will diverge after interrupt wrappers are added and code moved out of asm into the wrappers (e.g., async handlers will check FINISH_NAP). 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-22-npiggin@gmail.com
This commit is contained in:
parent
0440b8a22c
commit
6c6aee009e
|
@ -57,6 +57,7 @@ extern void timer_interrupt(struct pt_regs *);
|
|||
extern void performance_monitor_exception(struct pt_regs *regs);
|
||||
extern void WatchdogException(struct pt_regs *regs);
|
||||
extern void unknown_exception(struct pt_regs *regs);
|
||||
void unknown_async_exception(struct pt_regs *regs);
|
||||
|
||||
#ifdef CONFIG_PPC64
|
||||
#include <asm/paca.h>
|
||||
|
|
|
@ -1926,7 +1926,7 @@ EXC_COMMON_BEGIN(doorbell_super_common)
|
|||
#ifdef CONFIG_PPC_DOORBELL
|
||||
bl doorbell_exception
|
||||
#else
|
||||
bl unknown_exception
|
||||
bl unknown_async_exception
|
||||
#endif
|
||||
b interrupt_return
|
||||
|
||||
|
@ -2312,7 +2312,7 @@ EXC_COMMON_BEGIN(h_doorbell_common)
|
|||
#ifdef CONFIG_PPC_DOORBELL
|
||||
bl doorbell_exception
|
||||
#else
|
||||
bl unknown_exception
|
||||
bl unknown_async_exception
|
||||
#endif
|
||||
b interrupt_return
|
||||
|
||||
|
|
|
@ -238,8 +238,8 @@ __secondary_hold_acknowledge:
|
|||
|
||||
/* System reset */
|
||||
/* core99 pmac starts the seconary here by changing the vector, and
|
||||
putting it back to what it was (unknown_exception) when done. */
|
||||
EXCEPTION(0x100, Reset, unknown_exception, EXC_XFER_STD)
|
||||
putting it back to what it was (unknown_async_exception) when done. */
|
||||
EXCEPTION(0x100, Reset, unknown_async_exception, EXC_XFER_STD)
|
||||
|
||||
/* Machine check */
|
||||
/*
|
||||
|
@ -641,7 +641,7 @@ END_MMU_FTR_SECTION_IFSET(MMU_FTR_NEED_DTLB_SW_LRU)
|
|||
#endif
|
||||
|
||||
#ifndef CONFIG_TAU_INT
|
||||
#define TAUException unknown_exception
|
||||
#define TAUException unknown_async_exception
|
||||
#endif
|
||||
|
||||
EXCEPTION(0x1300, Trap_13, instruction_breakpoint_exception, EXC_XFER_STD)
|
||||
|
|
|
@ -1073,6 +1073,18 @@ void unknown_exception(struct pt_regs *regs)
|
|||
exception_exit(prev_state);
|
||||
}
|
||||
|
||||
void unknown_async_exception(struct pt_regs *regs)
|
||||
{
|
||||
enum ctx_state prev_state = exception_enter();
|
||||
|
||||
printk("Bad trap at PC: %lx, SR: %lx, vector=%lx\n",
|
||||
regs->nip, regs->msr, regs->trap);
|
||||
|
||||
_exception(SIGTRAP, regs, TRAP_UNK, 0);
|
||||
|
||||
exception_exit(prev_state);
|
||||
}
|
||||
|
||||
void instruction_breakpoint_exception(struct pt_regs *regs)
|
||||
{
|
||||
enum ctx_state prev_state = exception_enter();
|
||||
|
|
Loading…
Reference in New Issue