mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-07-22 23:04:43 +00:00
powerpc/irq: Make alignment & program interrupt behave the same
Alignment was the last user of the ENABLE_INTS macro, which we can now remove. All non-syscall exceptions now disable interrupts on entry, they get re-enabled conditionally from C code. Don't unconditionally re-enable in program check either, check the original context. Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
This commit is contained in:
parent
56dfa7fa19
commit
a3512b2dd5
3 changed files with 9 additions and 10 deletions
|
@ -248,7 +248,7 @@ void _exception(int signr, struct pt_regs *regs, int code, unsigned long addr)
|
|||
addr, regs->nip, regs->link, code);
|
||||
}
|
||||
|
||||
if (!arch_irq_disabled_regs(regs))
|
||||
if (arch_irqs_disabled() && !arch_irq_disabled_regs(regs))
|
||||
local_irq_enable();
|
||||
|
||||
memset(&info, 0, sizeof(info));
|
||||
|
@ -1019,7 +1019,9 @@ void __kprobes program_check_exception(struct pt_regs *regs)
|
|||
return;
|
||||
}
|
||||
|
||||
local_irq_enable();
|
||||
/* We restore the interrupt state now */
|
||||
if (!arch_irq_disabled_regs(regs))
|
||||
local_irq_enable();
|
||||
|
||||
#ifdef CONFIG_MATH_EMULATION
|
||||
/* (reason & REASON_ILLEGAL) would be the obvious thing here,
|
||||
|
@ -1069,6 +1071,10 @@ void alignment_exception(struct pt_regs *regs)
|
|||
{
|
||||
int sig, code, fixed = 0;
|
||||
|
||||
/* We restore the interrupt state now */
|
||||
if (!arch_irq_disabled_regs(regs))
|
||||
local_irq_enable();
|
||||
|
||||
/* we don't implement logging of alignment exceptions */
|
||||
if (!(current->thread.align_ctl & PR_UNALIGN_SIGBUS))
|
||||
fixed = fix_alignment(regs);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue