diff options
Diffstat (limited to 'arch/powerpc/kernel/traps.c')
-rw-r--r-- | arch/powerpc/kernel/traps.c | 26 |
1 files changed, 25 insertions, 1 deletions
diff --git a/arch/powerpc/kernel/traps.c b/arch/powerpc/kernel/traps.c index 239f1cde3fff..0dc43f9932cf 100644 --- a/arch/powerpc/kernel/traps.c +++ b/arch/powerpc/kernel/traps.c | |||
@@ -302,6 +302,16 @@ long machine_check_early(struct pt_regs *regs) | |||
302 | return handled; | 302 | return handled; |
303 | } | 303 | } |
304 | 304 | ||
305 | long hmi_exception_realmode(struct pt_regs *regs) | ||
306 | { | ||
307 | __get_cpu_var(irq_stat).hmi_exceptions++; | ||
308 | |||
309 | if (ppc_md.hmi_exception_early) | ||
310 | ppc_md.hmi_exception_early(regs); | ||
311 | |||
312 | return 0; | ||
313 | } | ||
314 | |||
305 | #endif | 315 | #endif |
306 | 316 | ||
307 | /* | 317 | /* |
@@ -609,7 +619,7 @@ int machine_check_e500(struct pt_regs *regs) | |||
609 | if (reason & MCSR_BUS_RBERR) | 619 | if (reason & MCSR_BUS_RBERR) |
610 | printk("Bus - Read Data Bus Error\n"); | 620 | printk("Bus - Read Data Bus Error\n"); |
611 | if (reason & MCSR_BUS_WBERR) | 621 | if (reason & MCSR_BUS_WBERR) |
612 | printk("Bus - Read Data Bus Error\n"); | 622 | printk("Bus - Write Data Bus Error\n"); |
613 | if (reason & MCSR_BUS_IPERR) | 623 | if (reason & MCSR_BUS_IPERR) |
614 | printk("Bus - Instruction Parity Error\n"); | 624 | printk("Bus - Instruction Parity Error\n"); |
615 | if (reason & MCSR_BUS_RPERR) | 625 | if (reason & MCSR_BUS_RPERR) |
@@ -738,6 +748,20 @@ void SMIException(struct pt_regs *regs) | |||
738 | die("System Management Interrupt", regs, SIGABRT); | 748 | die("System Management Interrupt", regs, SIGABRT); |
739 | } | 749 | } |
740 | 750 | ||
751 | void handle_hmi_exception(struct pt_regs *regs) | ||
752 | { | ||
753 | struct pt_regs *old_regs; | ||
754 | |||
755 | old_regs = set_irq_regs(regs); | ||
756 | irq_enter(); | ||
757 | |||
758 | if (ppc_md.handle_hmi_exception) | ||
759 | ppc_md.handle_hmi_exception(regs); | ||
760 | |||
761 | irq_exit(); | ||
762 | set_irq_regs(old_regs); | ||
763 | } | ||
764 | |||
741 | void unknown_exception(struct pt_regs *regs) | 765 | void unknown_exception(struct pt_regs *regs) |
742 | { | 766 | { |
743 | enum ctx_state prev_state = exception_enter(); | 767 | enum ctx_state prev_state = exception_enter(); |