diff options
Diffstat (limited to 'usr/src')
-rw-r--r-- | usr/src/uts/common/disp/thread.c | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/usr/src/uts/common/disp/thread.c b/usr/src/uts/common/disp/thread.c index 0d6ec7ddac..4405e40209 100644 --- a/usr/src/uts/common/disp/thread.c +++ b/usr/src/uts/common/disp/thread.c @@ -1545,12 +1545,18 @@ intr_active(struct cpu *cp, int level) int servicing_interrupt() { - /* - * Note: single-OR used on purpose to return non-zero if T_INTR_THREAD - * flag set or CPU_ON_INTR(CPU) is non-zero (indicating high-level - * interrupt). - */ - return ((curthread->t_flag & T_INTR_THREAD) | CPU_ON_INTR(CPU)); + int onintr = 0; + + /* Are we an interrupt thread */ + if (curthread->t_flag & T_INTR_THREAD) + return (1); + /* Are we servicing a high level interrupt? */ + if (CPU_ON_INTR(CPU)) { + kpreempt_disable(); + onintr = CPU_ON_INTR(CPU); + kpreempt_enable(); + } + return (onintr); } |