diff options
author | Bob Warning <RWarning@atto.com> | 2016-12-15 23:20:08 +0100 |
---|---|---|
committer | Hans Rosenfeld <rosenfeld@grumpf.hope-2000.org> | 2017-01-10 10:48:14 +0100 |
commit | cb214887258e20b89cd275946a280fee9c4b47fa (patch) | |
tree | 11b5a35c81d9266da73eb49a349b4f71d2b40b28 | |
parent | 9d08e1f8c231016dcfeb854acff457e0e54f179d (diff) | |
download | illumos-joyent-cb214887258e20b89cd275946a280fee9c4b47fa.tar.gz |
7724 apix may lose interrupts occuring while softint is running at same IPL
Reviewed by: Hans Rosenfeld <hans.rosenfeld@nexenta.com>
Reviewed by: Dan McDonald <danmcd@omniti.com>
Reviewed by: Robert Mustacchi <rm@joyent.com>
Approved by: Gordon Ross <gordon.w.ross@gmail.com>
-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; |