[PATCH] alpha smp fix

As usual, the reason of this breakage is quite silly: in do_entIF, we
are checking for PS == 0 to see whether it was a kernel BUG() or
userspace trap.

It works, unless BUG() happens in interrupt - PS is not 0 in kernel mode
due to non-zero IPL, and the things get messed up horribly then. In
this particular case it was BUG_ON(!irqs_disabled()) triggered in
run_posix_cpu_timers(), so we ended up shooting "current" with the
bursts of one SIGTRAP and three SIGILLs on every timer tick. ;-)

authored by Ivan Kokshaysky and committed by Linus Torvalds eaf05be0 62351cc3

+1 -1
+1 -1
arch/alpha/kernel/traps.c
··· 240 240 siginfo_t info; 241 241 int signo, code; 242 242 243 - if (regs->ps == 0) { 243 + if ((regs->ps & ~IPL_MAX) == 0) { 244 244 if (type == 1) { 245 245 const unsigned int *data 246 246 = (const unsigned int *) regs->pc;