diff options
-rw-r--r-- | usr/src/uts/i86pc/io/apix/apix_intr.c | 9 |
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; |