Commit 3a96570f authored by Nicholas Piggin's avatar Nicholas Piggin Committed by Michael Ellerman

powerpc: convert interrupt handlers to use wrappers

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-29-npiggin@gmail.com
parent fd3f1e0f
...@@ -56,35 +56,6 @@ int exit_vmx_usercopy(void); ...@@ -56,35 +56,6 @@ int exit_vmx_usercopy(void);
int enter_vmx_ops(void); int enter_vmx_ops(void);
void *exit_vmx_ops(void *dest); void *exit_vmx_ops(void *dest);
/* Traps */
long machine_check_early(struct pt_regs *regs);
long hmi_exception_realmode(struct pt_regs *regs);
void SMIException(struct pt_regs *regs);
void handle_hmi_exception(struct pt_regs *regs);
void instruction_breakpoint_exception(struct pt_regs *regs);
void RunModeException(struct pt_regs *regs);
void single_step_exception(struct pt_regs *regs);
void program_check_exception(struct pt_regs *regs);
void alignment_exception(struct pt_regs *regs);
void StackOverflow(struct pt_regs *regs);
void stack_overflow_exception(struct pt_regs *regs);
void kernel_fp_unavailable_exception(struct pt_regs *regs);
void altivec_unavailable_exception(struct pt_regs *regs);
void vsx_unavailable_exception(struct pt_regs *regs);
void fp_unavailable_tm(struct pt_regs *regs);
void altivec_unavailable_tm(struct pt_regs *regs);
void vsx_unavailable_tm(struct pt_regs *regs);
void facility_unavailable_exception(struct pt_regs *regs);
void TAUException(struct pt_regs *regs);
void altivec_assist_exception(struct pt_regs *regs);
void unrecoverable_exception(struct pt_regs *regs);
void kernel_bad_stack(struct pt_regs *regs);
void system_reset_exception(struct pt_regs *regs);
void machine_check_exception(struct pt_regs *regs);
void emulation_assist_interrupt(struct pt_regs *regs);
long do_slb_fault(struct pt_regs *regs);
void do_bad_slb_fault(struct pt_regs *regs);
/* signals, syscalls and interrupts */ /* signals, syscalls and interrupts */
long sys_swapcontext(struct ucontext __user *old_ctx, long sys_swapcontext(struct ucontext __user *old_ctx,
struct ucontext __user *new_ctx, struct ucontext __user *new_ctx,
......
...@@ -456,7 +456,6 @@ static inline unsigned long hpt_hash(unsigned long vpn, ...@@ -456,7 +456,6 @@ static inline unsigned long hpt_hash(unsigned long vpn,
long hpte_insert_repeating(unsigned long hash, unsigned long vpn, unsigned long pa, long hpte_insert_repeating(unsigned long hash, unsigned long vpn, unsigned long pa,
unsigned long rlags, unsigned long vflags, int psize, int ssize); unsigned long rlags, unsigned long vflags, int psize, int ssize);
long do_hash_fault(struct pt_regs *regs);
extern int __hash_page_4K(unsigned long ea, unsigned long access, extern int __hash_page_4K(unsigned long ea, unsigned long access,
unsigned long vsid, pte_t *ptep, unsigned long trap, unsigned long vsid, pte_t *ptep, unsigned long trap,
unsigned long flags, int ssize, int subpage_prot); unsigned long flags, int ssize, int subpage_prot);
......
...@@ -50,9 +50,6 @@ bool ppc_breakpoint_available(void); ...@@ -50,9 +50,6 @@ bool ppc_breakpoint_available(void);
#ifdef CONFIG_PPC_ADV_DEBUG_REGS #ifdef CONFIG_PPC_ADV_DEBUG_REGS
extern void do_send_trap(struct pt_regs *regs, unsigned long address, 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
void do_break(struct pt_regs *regs);
#endif #endif
#endif /* _ASM_POWERPC_DEBUG_H */ #endif /* _ASM_POWERPC_DEBUG_H */
...@@ -50,15 +50,6 @@ ...@@ -50,15 +50,6 @@
#ifndef __ASSEMBLY__ #ifndef __ASSEMBLY__
extern void replay_system_reset(void);
extern void replay_soft_interrupts(void);
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 #ifdef CONFIG_PPC64
#include <asm/paca.h> #include <asm/paca.h>
......
...@@ -232,4 +232,70 @@ __visible noinstr long func(struct pt_regs *regs) \ ...@@ -232,4 +232,70 @@ __visible noinstr long func(struct pt_regs *regs) \
\ \
static __always_inline long ____##func(struct pt_regs *regs) static __always_inline long ____##func(struct pt_regs *regs)
/* Interrupt handlers */
/* kernel/traps.c */
DECLARE_INTERRUPT_HANDLER_NMI(system_reset_exception);
#ifdef CONFIG_PPC_BOOK3S_64
DECLARE_INTERRUPT_HANDLER_ASYNC(machine_check_exception);
#else
DECLARE_INTERRUPT_HANDLER_NMI(machine_check_exception);
#endif
DECLARE_INTERRUPT_HANDLER(SMIException);
DECLARE_INTERRUPT_HANDLER(handle_hmi_exception);
DECLARE_INTERRUPT_HANDLER(unknown_exception);
DECLARE_INTERRUPT_HANDLER_ASYNC(unknown_async_exception);
DECLARE_INTERRUPT_HANDLER(instruction_breakpoint_exception);
DECLARE_INTERRUPT_HANDLER(RunModeException);
DECLARE_INTERRUPT_HANDLER(single_step_exception);
DECLARE_INTERRUPT_HANDLER(program_check_exception);
DECLARE_INTERRUPT_HANDLER(emulation_assist_interrupt);
DECLARE_INTERRUPT_HANDLER(alignment_exception);
DECLARE_INTERRUPT_HANDLER(StackOverflow);
DECLARE_INTERRUPT_HANDLER(stack_overflow_exception);
DECLARE_INTERRUPT_HANDLER(kernel_fp_unavailable_exception);
DECLARE_INTERRUPT_HANDLER(altivec_unavailable_exception);
DECLARE_INTERRUPT_HANDLER(vsx_unavailable_exception);
DECLARE_INTERRUPT_HANDLER(facility_unavailable_exception);
DECLARE_INTERRUPT_HANDLER(fp_unavailable_tm);
DECLARE_INTERRUPT_HANDLER(altivec_unavailable_tm);
DECLARE_INTERRUPT_HANDLER(vsx_unavailable_tm);
DECLARE_INTERRUPT_HANDLER_NMI(performance_monitor_exception_nmi);
DECLARE_INTERRUPT_HANDLER_ASYNC(performance_monitor_exception_async);
DECLARE_INTERRUPT_HANDLER_RAW(performance_monitor_exception);
DECLARE_INTERRUPT_HANDLER(DebugException);
DECLARE_INTERRUPT_HANDLER(altivec_assist_exception);
DECLARE_INTERRUPT_HANDLER(CacheLockingException);
DECLARE_INTERRUPT_HANDLER(SPEFloatingPointException);
DECLARE_INTERRUPT_HANDLER(SPEFloatingPointRoundException);
DECLARE_INTERRUPT_HANDLER(unrecoverable_exception);
DECLARE_INTERRUPT_HANDLER(WatchdogException);
DECLARE_INTERRUPT_HANDLER(kernel_bad_stack);
/* slb.c */
DECLARE_INTERRUPT_HANDLER_RAW(do_slb_fault);
DECLARE_INTERRUPT_HANDLER(do_bad_slb_fault);
/* hash_utils.c */
DECLARE_INTERRUPT_HANDLER_RAW(do_hash_fault);
/* fault.c */
DECLARE_INTERRUPT_HANDLER_RET(do_page_fault);
DECLARE_INTERRUPT_HANDLER(do_bad_page_fault_segv);
/* process.c */
DECLARE_INTERRUPT_HANDLER(do_break);
/* time.c */
DECLARE_INTERRUPT_HANDLER_ASYNC(timer_interrupt);
/* mce.c */
DECLARE_INTERRUPT_HANDLER_NMI(machine_check_early);
DECLARE_INTERRUPT_HANDLER_NMI(hmi_exception_realmode);
DECLARE_INTERRUPT_HANDLER_ASYNC(TAUException);
void replay_system_reset(void);
void replay_soft_interrupts(void);
#endif /* _ASM_POWERPC_INTERRUPT_H */ #endif /* _ASM_POWERPC_INTERRUPT_H */
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
#ifdef CONFIG_PPC_WATCHDOG #ifdef CONFIG_PPC_WATCHDOG
extern void arch_touch_nmi_watchdog(void); extern void arch_touch_nmi_watchdog(void);
void soft_nmi_interrupt(struct pt_regs *regs); long soft_nmi_interrupt(struct pt_regs *regs);
#else #else
static inline void arch_touch_nmi_watchdog(void) {} static inline void arch_touch_nmi_watchdog(void) {}
#endif #endif
......
...@@ -12,13 +12,14 @@ ...@@ -12,13 +12,14 @@
#include <linux/hardirq.h> #include <linux/hardirq.h>
#include <asm/dbell.h> #include <asm/dbell.h>
#include <asm/interrupt.h>
#include <asm/irq_regs.h> #include <asm/irq_regs.h>
#include <asm/kvm_ppc.h> #include <asm/kvm_ppc.h>
#include <asm/trace.h> #include <asm/trace.h>
#ifdef CONFIG_SMP #ifdef CONFIG_SMP
void doorbell_exception(struct pt_regs *regs) DEFINE_INTERRUPT_HANDLER_ASYNC(doorbell_exception)
{ {
struct pt_regs *old_regs = set_irq_regs(regs); struct pt_regs *old_regs = set_irq_regs(regs);
...@@ -39,9 +40,8 @@ void doorbell_exception(struct pt_regs *regs) ...@@ -39,9 +40,8 @@ void doorbell_exception(struct pt_regs *regs)
set_irq_regs(old_regs); set_irq_regs(old_regs);
} }
#else /* CONFIG_SMP */ #else /* CONFIG_SMP */
void doorbell_exception(struct pt_regs *regs) DEFINE_INTERRUPT_HANDLER_ASYNC(doorbell_exception)
{ {
printk(KERN_WARNING "Received doorbell on non-smp system\n"); printk(KERN_WARNING "Received doorbell on non-smp system\n");
} }
#endif /* CONFIG_SMP */ #endif /* CONFIG_SMP */
...@@ -54,6 +54,7 @@ ...@@ -54,6 +54,7 @@
#include <linux/pgtable.h> #include <linux/pgtable.h>
#include <linux/uaccess.h> #include <linux/uaccess.h>
#include <asm/interrupt.h>
#include <asm/io.h> #include <asm/io.h>
#include <asm/irq.h> #include <asm/irq.h>
#include <asm/cache.h> #include <asm/cache.h>
...@@ -665,7 +666,7 @@ void __do_irq(struct pt_regs *regs) ...@@ -665,7 +666,7 @@ void __do_irq(struct pt_regs *regs)
irq_exit(); irq_exit();
} }
void do_IRQ(struct pt_regs *regs) DEFINE_INTERRUPT_HANDLER_ASYNC(do_IRQ)
{ {
struct pt_regs *old_regs = set_irq_regs(regs); struct pt_regs *old_regs = set_irq_regs(regs);
void *cursp, *irqsp, *sirqsp; void *cursp, *irqsp, *sirqsp;
......
...@@ -19,6 +19,7 @@ ...@@ -19,6 +19,7 @@
#include <linux/ftrace.h> #include <linux/ftrace.h>
#include <linux/memblock.h> #include <linux/memblock.h>
#include <asm/interrupt.h>
#include <asm/machdep.h> #include <asm/machdep.h>
#include <asm/mce.h> #include <asm/mce.h>
#include <asm/nmi.h> #include <asm/nmi.h>
...@@ -583,7 +584,7 @@ EXPORT_SYMBOL_GPL(machine_check_print_event_info); ...@@ -583,7 +584,7 @@ EXPORT_SYMBOL_GPL(machine_check_print_event_info);
* *
* regs->nip and regs->msr contains srr0 and ssr1. * regs->nip and regs->msr contains srr0 and ssr1.
*/ */
long notrace machine_check_early(struct pt_regs *regs) DEFINE_INTERRUPT_HANDLER_NMI(machine_check_early)
{ {
long handled = 0; long handled = 0;
u8 ftrace_enabled = this_cpu_get_ftrace_enabled(); u8 ftrace_enabled = this_cpu_get_ftrace_enabled();
...@@ -717,7 +718,7 @@ long hmi_handle_debugtrig(struct pt_regs *regs) ...@@ -717,7 +718,7 @@ long hmi_handle_debugtrig(struct pt_regs *regs)
/* /*
* Return values: * Return values:
*/ */
long hmi_exception_realmode(struct pt_regs *regs) DEFINE_INTERRUPT_HANDLER_NMI(hmi_exception_realmode)
{ {
int ret; int ret;
......
...@@ -41,6 +41,7 @@ ...@@ -41,6 +41,7 @@
#include <linux/pkeys.h> #include <linux/pkeys.h>
#include <linux/seq_buf.h> #include <linux/seq_buf.h>
#include <asm/interrupt.h>
#include <asm/io.h> #include <asm/io.h>
#include <asm/processor.h> #include <asm/processor.h>
#include <asm/mmu.h> #include <asm/mmu.h>
...@@ -659,7 +660,7 @@ static void do_break_handler(struct pt_regs *regs) ...@@ -659,7 +660,7 @@ static void do_break_handler(struct pt_regs *regs)
} }
} }
void do_break(struct pt_regs *regs) DEFINE_INTERRUPT_HANDLER(do_break)
{ {
current->thread.trap_nr = TRAP_HWBKPT; current->thread.trap_nr = TRAP_HWBKPT;
if (notify_die(DIE_DABR_MATCH, "dabr_match", regs, regs->dsisr, if (notify_die(DIE_DABR_MATCH, "dabr_match", regs, regs->dsisr,
......
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
#include <asm/kup.h> #include <asm/kup.h>
#include <asm/cputime.h> #include <asm/cputime.h>
#include <asm/hw_irq.h> #include <asm/hw_irq.h>
#include <asm/interrupt.h>
#include <asm/kprobes.h> #include <asm/kprobes.h>
#include <asm/paca.h> #include <asm/paca.h>
#include <asm/ptrace.h> #include <asm/ptrace.h>
......
...@@ -22,6 +22,7 @@ ...@@ -22,6 +22,7 @@
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/workqueue.h> #include <linux/workqueue.h>
#include <asm/interrupt.h>
#include <asm/io.h> #include <asm/io.h>
#include <asm/reg.h> #include <asm/reg.h>
#include <asm/nvram.h> #include <asm/nvram.h>
...@@ -100,7 +101,7 @@ static void TAUupdate(int cpu) ...@@ -100,7 +101,7 @@ static void TAUupdate(int cpu)
* with interrupts disabled * with interrupts disabled
*/ */
void TAUException(struct pt_regs * regs) DEFINE_INTERRUPT_HANDLER_ASYNC(TAUException)
{ {
int cpu = smp_processor_id(); int cpu = smp_processor_id();
......
...@@ -57,6 +57,7 @@ ...@@ -57,6 +57,7 @@
#include <linux/processor.h> #include <linux/processor.h>
#include <asm/trace.h> #include <asm/trace.h>
#include <asm/interrupt.h>
#include <asm/io.h> #include <asm/io.h>
#include <asm/nvram.h> #include <asm/nvram.h>
#include <asm/cache.h> #include <asm/cache.h>
...@@ -571,7 +572,7 @@ void arch_irq_work_raise(void) ...@@ -571,7 +572,7 @@ void arch_irq_work_raise(void)
* timer_interrupt - gets called when the decrementer overflows, * timer_interrupt - gets called when the decrementer overflows,
* with interrupts disabled. * with interrupts disabled.
*/ */
void timer_interrupt(struct pt_regs *regs) DEFINE_INTERRUPT_HANDLER_ASYNC(timer_interrupt)
{ {
struct clock_event_device *evt = this_cpu_ptr(&decrementers); struct clock_event_device *evt = this_cpu_ptr(&decrementers);
u64 *next_tb = this_cpu_ptr(&decrementers_next_tb); u64 *next_tb = this_cpu_ptr(&decrementers_next_tb);
......
This diff is collapsed.
...@@ -26,6 +26,7 @@ ...@@ -26,6 +26,7 @@
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/smp.h> #include <linux/smp.h>
#include <asm/interrupt.h>
#include <asm/paca.h> #include <asm/paca.h>
#include <asm/nmi.h> #include <asm/nmi.h>
...@@ -248,14 +249,14 @@ static void watchdog_timer_interrupt(int cpu) ...@@ -248,14 +249,14 @@ static void watchdog_timer_interrupt(int cpu)
watchdog_smp_panic(cpu, tb); watchdog_smp_panic(cpu, tb);
} }
void soft_nmi_interrupt(struct pt_regs *regs) DEFINE_INTERRUPT_HANDLER_NMI(soft_nmi_interrupt)
{ {
unsigned long flags; unsigned long flags;
int cpu = raw_smp_processor_id(); int cpu = raw_smp_processor_id();
u64 tb; u64 tb;
if (!cpumask_test_cpu(cpu, &wd_cpus_enabled)) if (!cpumask_test_cpu(cpu, &wd_cpus_enabled))
return; return 0;
nmi_enter(); nmi_enter();
...@@ -292,6 +293,8 @@ void soft_nmi_interrupt(struct pt_regs *regs) ...@@ -292,6 +293,8 @@ void soft_nmi_interrupt(struct pt_regs *regs)
out: out:
nmi_exit(); nmi_exit();
return 0;
} }
static enum hrtimer_restart watchdog_timer_fn(struct hrtimer *hrtimer) static enum hrtimer_restart watchdog_timer_fn(struct hrtimer *hrtimer)
......
...@@ -53,6 +53,7 @@ ...@@ -53,6 +53,7 @@
#include <asm/cputable.h> #include <asm/cputable.h>
#include <asm/cacheflush.h> #include <asm/cacheflush.h>
#include <linux/uaccess.h> #include <linux/uaccess.h>
#include <asm/interrupt.h>
#include <asm/io.h> #include <asm/io.h>
#include <asm/kvm_ppc.h> #include <asm/kvm_ppc.h>
#include <asm/kvm_book3s.h> #include <asm/kvm_book3s.h>
......
...@@ -17,6 +17,7 @@ ...@@ -17,6 +17,7 @@
#include <asm/asm-prototypes.h> #include <asm/asm-prototypes.h>
#include <asm/cputable.h> #include <asm/cputable.h>
#include <asm/interrupt.h>
#include <asm/kvm_ppc.h> #include <asm/kvm_ppc.h>
#include <asm/kvm_book3s.h> #include <asm/kvm_book3s.h>
#include <asm/archrandom.h> #include <asm/archrandom.h>
......
...@@ -20,6 +20,7 @@ ...@@ -20,6 +20,7 @@
#include <asm/cputable.h> #include <asm/cputable.h>
#include <linux/uaccess.h> #include <linux/uaccess.h>
#include <asm/interrupt.h>
#include <asm/kvm_ppc.h> #include <asm/kvm_ppc.h>
#include <asm/cacheflush.h> #include <asm/cacheflush.h>
#include <asm/dbell.h> #include <asm/dbell.h>
......
...@@ -38,6 +38,7 @@ ...@@ -38,6 +38,7 @@
#include <linux/pgtable.h> #include <linux/pgtable.h>
#include <asm/debugfs.h> #include <asm/debugfs.h>
#include <asm/interrupt.h>
#include <asm/processor.h> #include <asm/processor.h>
#include <asm/mmu.h> #include <asm/mmu.h>
#include <asm/mmu_context.h> #include <asm/mmu_context.h>
...@@ -1512,7 +1513,8 @@ int hash_page(unsigned long ea, unsigned long access, unsigned long trap, ...@@ -1512,7 +1513,8 @@ int hash_page(unsigned long ea, unsigned long access, unsigned long trap,
} }
EXPORT_SYMBOL_GPL(hash_page); EXPORT_SYMBOL_GPL(hash_page);
static long __do_hash_fault(struct pt_regs *regs) DECLARE_INTERRUPT_HANDLER_RET(__do_hash_fault);
DEFINE_INTERRUPT_HANDLER_RET(__do_hash_fault)
{ {
unsigned long ea = regs->dar; unsigned long ea = regs->dar;
unsigned long dsisr = regs->dsisr; unsigned long dsisr = regs->dsisr;
...@@ -1565,7 +1567,11 @@ static long __do_hash_fault(struct pt_regs *regs) ...@@ -1565,7 +1567,11 @@ static long __do_hash_fault(struct pt_regs *regs)
return err; return err;
} }
long do_hash_fault(struct pt_regs *regs) /*
* The _RAW interrupt entry checks for the in_nmi() case before
* running the full handler.
*/
DEFINE_INTERRUPT_HANDLER_RAW(do_hash_fault)
{ {
unsigned long dsisr = regs->dsisr; unsigned long dsisr = regs->dsisr;
long err; long err;
...@@ -1587,7 +1593,7 @@ long do_hash_fault(struct pt_regs *regs) ...@@ -1587,7 +1593,7 @@ long do_hash_fault(struct pt_regs *regs)
* the access, or panic if there isn't a handler. * the access, or panic if there isn't a handler.
*/ */
if (unlikely(in_nmi())) { if (unlikely(in_nmi())) {
bad_page_fault(regs, SIGSEGV); do_bad_page_fault_segv(regs);
return 0; return 0;
} }
......
...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
*/ */
#include <asm/asm-prototypes.h> #include <asm/asm-prototypes.h>
#include <asm/interrupt.h>
#include <asm/mmu.h> #include <asm/mmu.h>
#include <asm/mmu_context.h> #include <asm/mmu_context.h>
#include <asm/paca.h> #include <asm/paca.h>
...@@ -813,7 +814,7 @@ static long slb_allocate_user(struct mm_struct *mm, unsigned long ea) ...@@ -813,7 +814,7 @@ static long slb_allocate_user(struct mm_struct *mm, unsigned long ea)
return slb_insert_entry(ea, context, flags, ssize, false); return slb_insert_entry(ea, context, flags, ssize, false);
} }
long do_slb_fault(struct pt_regs *regs) DEFINE_INTERRUPT_HANDLER_RAW(do_slb_fault)
{ {
unsigned long ea = regs->dar; unsigned long ea = regs->dar;
unsigned long id = get_region_id(ea); unsigned long id = get_region_id(ea);
...@@ -833,7 +834,7 @@ long do_slb_fault(struct pt_regs *regs) ...@@ -833,7 +834,7 @@ long do_slb_fault(struct pt_regs *regs)
*/ */
/* /*
* The interrupt state is not reconciled, for performance, so that * This is a raw interrupt handler, for performance, so that
* fast_interrupt_return can be used. The handler must not touch local * fast_interrupt_return can be used. The handler must not touch local
* irq state, or schedule. We could test for usermode and upgrade to a * irq state, or schedule. We could test for usermode and upgrade to a
* normal process context (synchronous) interrupt for those, which * normal process context (synchronous) interrupt for those, which
...@@ -868,7 +869,7 @@ long do_slb_fault(struct pt_regs *regs) ...@@ -868,7 +869,7 @@ long do_slb_fault(struct pt_regs *regs)
} }
} }
void do_bad_slb_fault(struct pt_regs *regs) DEFINE_INTERRUPT_HANDLER(do_bad_slb_fault)
{ {
int err = regs->result; int err = regs->result;
......
...@@ -34,6 +34,7 @@ ...@@ -34,6 +34,7 @@
#include <linux/uaccess.h> #include <linux/uaccess.h>
#include <asm/firmware.h> #include <asm/firmware.h>
#include <asm/interrupt.h>
#include <asm/page.h> #include <asm/page.h>
#include <asm/mmu.h> #include <asm/mmu.h>
#include <asm/mmu_context.h> #include <asm/mmu_context.h>
...@@ -540,7 +541,7 @@ static int __do_page_fault(struct pt_regs *regs, unsigned long address, ...@@ -540,7 +541,7 @@ static int __do_page_fault(struct pt_regs *regs, unsigned long address,
} }
NOKPROBE_SYMBOL(__do_page_fault); NOKPROBE_SYMBOL(__do_page_fault);
long do_page_fault(struct pt_regs *regs) DEFINE_INTERRUPT_HANDLER_RET(do_page_fault)
{ {
const struct exception_table_entry *entry; const struct exception_table_entry *entry;
enum ctx_state prev_state; enum ctx_state prev_state;
...@@ -624,7 +625,7 @@ void bad_page_fault(struct pt_regs *regs, int sig) ...@@ -624,7 +625,7 @@ void bad_page_fault(struct pt_regs *regs, int sig)
} }
#ifdef CONFIG_PPC_BOOK3S_64 #ifdef CONFIG_PPC_BOOK3S_64
void do_bad_page_fault_segv(struct pt_regs *regs) DEFINE_INTERRUPT_HANDLER(do_bad_page_fault_segv)
{ {
bad_page_fault(regs, SIGSEGV); bad_page_fault(regs, SIGSEGV);
} }
......
...@@ -49,7 +49,7 @@ static void dump_fir(int cpu) ...@@ -49,7 +49,7 @@ static void dump_fir(int cpu)
} }
void cbe_system_error_exception(struct pt_regs *regs) DEFINE_INTERRUPT_HANDLER(cbe_system_error_exception)
{ {
int cpu = smp_processor_id(); int cpu = smp_processor_id();
...@@ -58,7 +58,7 @@ void cbe_system_error_exception(struct pt_regs *regs) ...@@ -58,7 +58,7 @@ void cbe_system_error_exception(struct pt_regs *regs)
dump_stack(); dump_stack();
} }
void cbe_maintenance_exception(struct pt_regs *regs) DEFINE_INTERRUPT_HANDLER(cbe_maintenance_exception)
{ {
int cpu = smp_processor_id(); int cpu = smp_processor_id();
...@@ -70,7 +70,7 @@ void cbe_maintenance_exception(struct pt_regs *regs) ...@@ -70,7 +70,7 @@ void cbe_maintenance_exception(struct pt_regs *regs)
dump_stack(); dump_stack();
} }
void cbe_thermal_exception(struct pt_regs *regs) DEFINE_INTERRUPT_HANDLER(cbe_thermal_exception)
{ {
int cpu = smp_processor_id(); int cpu = smp_processor_id();
......
...@@ -2,9 +2,12 @@ ...@@ -2,9 +2,12 @@
#ifndef RAS_H #ifndef RAS_H
#define RAS_H #define RAS_H
extern void cbe_system_error_exception(struct pt_regs *regs); #include <asm/interrupt.h>
extern void cbe_maintenance_exception(struct pt_regs *regs);
extern void cbe_thermal_exception(struct pt_regs *regs); DECLARE_INTERRUPT_HANDLER(cbe_system_error_exception);
DECLARE_INTERRUPT_HANDLER(cbe_maintenance_exception);
DECLARE_INTERRUPT_HANDLER(cbe_thermal_exception);
extern void cbe_ras_init(void); extern void cbe_ras_init(void);
#endif /* RAS_H */ #endif /* RAS_H */
...@@ -14,6 +14,7 @@ ...@@ -14,6 +14,7 @@
#include <asm/asm-prototypes.h> #include <asm/asm-prototypes.h>
#include <asm/firmware.h> #include <asm/firmware.h>
#include <asm/interrupt.h>
#include <asm/machdep.h> #include <asm/machdep.h>
#include <asm/opal.h> #include <asm/opal.h>
#include <asm/cputhreads.h> #include <asm/cputhreads.h>
......
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