Commit 6c6aee00 authored by Nicholas Piggin's avatar Nicholas Piggin Committed by Michael Ellerman

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: default avatarNicholas Piggin <npiggin@gmail.com>
Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/20210130130852.2952424-22-npiggin@gmail.com
parent 0440b8a2
...@@ -57,6 +57,7 @@ extern void timer_interrupt(struct pt_regs *); ...@@ -57,6 +57,7 @@ extern void timer_interrupt(struct pt_regs *);
extern void performance_monitor_exception(struct pt_regs *regs); extern void performance_monitor_exception(struct pt_regs *regs);
extern void WatchdogException(struct pt_regs *regs); extern void WatchdogException(struct pt_regs *regs);
extern void unknown_exception(struct pt_regs *regs); extern void unknown_exception(struct pt_regs *regs);
void unknown_async_exception(struct pt_regs *regs);
#ifdef CONFIG_PPC64 #ifdef CONFIG_PPC64
#include <asm/paca.h> #include <asm/paca.h>
......
...@@ -1926,7 +1926,7 @@ EXC_COMMON_BEGIN(doorbell_super_common) ...@@ -1926,7 +1926,7 @@ EXC_COMMON_BEGIN(doorbell_super_common)
#ifdef CONFIG_PPC_DOORBELL #ifdef CONFIG_PPC_DOORBELL
bl doorbell_exception bl doorbell_exception
#else #else
bl unknown_exception bl unknown_async_exception
#endif #endif
b interrupt_return b interrupt_return
...@@ -2312,7 +2312,7 @@ EXC_COMMON_BEGIN(h_doorbell_common) ...@@ -2312,7 +2312,7 @@ EXC_COMMON_BEGIN(h_doorbell_common)
#ifdef CONFIG_PPC_DOORBELL #ifdef CONFIG_PPC_DOORBELL
bl doorbell_exception bl doorbell_exception
#else #else
bl unknown_exception bl unknown_async_exception
#endif #endif
b interrupt_return b interrupt_return
......
...@@ -238,8 +238,8 @@ __secondary_hold_acknowledge: ...@@ -238,8 +238,8 @@ __secondary_hold_acknowledge:
/* System reset */ /* System reset */
/* core99 pmac starts the seconary here by changing the vector, and /* core99 pmac starts the seconary here by changing the vector, and
putting it back to what it was (unknown_exception) when done. */ putting it back to what it was (unknown_async_exception) when done. */
EXCEPTION(0x100, Reset, unknown_exception, EXC_XFER_STD) EXCEPTION(0x100, Reset, unknown_async_exception, EXC_XFER_STD)
/* Machine check */ /* Machine check */
/* /*
...@@ -641,7 +641,7 @@ END_MMU_FTR_SECTION_IFSET(MMU_FTR_NEED_DTLB_SW_LRU) ...@@ -641,7 +641,7 @@ END_MMU_FTR_SECTION_IFSET(MMU_FTR_NEED_DTLB_SW_LRU)
#endif #endif
#ifndef CONFIG_TAU_INT #ifndef CONFIG_TAU_INT
#define TAUException unknown_exception #define TAUException unknown_async_exception
#endif #endif
EXCEPTION(0x1300, Trap_13, instruction_breakpoint_exception, EXC_XFER_STD) EXCEPTION(0x1300, Trap_13, instruction_breakpoint_exception, EXC_XFER_STD)
......
...@@ -1073,6 +1073,18 @@ void unknown_exception(struct pt_regs *regs) ...@@ -1073,6 +1073,18 @@ void unknown_exception(struct pt_regs *regs)
exception_exit(prev_state); 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) void instruction_breakpoint_exception(struct pt_regs *regs)
{ {
enum ctx_state prev_state = exception_enter(); enum ctx_state prev_state = exception_enter();
......
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