summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--usr/src/uts/i86pc/io/apix/apix_intr.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/usr/src/uts/i86pc/io/apix/apix_intr.c b/usr/src/uts/i86pc/io/apix/apix_intr.c
index d870a4d365..752a4045da 100644
--- a/usr/src/uts/i86pc/io/apix/apix_intr.c
+++ b/usr/src/uts/i86pc/io/apix/apix_intr.c
@@ -901,9 +901,13 @@ apix_do_interrupt(struct regs *rp, trap_trace_rec_t *ttp)
(void) apix_do_softint(rp);
ASSERT(!interrupts_enabled());
#ifdef TRAPTRACE
- ttp->ttr_vector = T_SOFTINT;
+ ttp->ttr_vector = T_SOFTINT;
#endif
- return;
+ /*
+ * We need to check again for pending interrupts that may have
+ * arrived while the softint was running.
+ */
+ goto do_pending;
}
/*
@@ -957,6 +961,7 @@ apix_do_interrupt(struct regs *rp, trap_trace_rec_t *ttp)
return;
}
+do_pending:
if (apix_do_pending_hilevel(cpu, rp) < 0)
return;