summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBob Warning <RWarning@atto.com>2016-12-15 23:20:08 +0100
committerHans Rosenfeld <rosenfeld@grumpf.hope-2000.org>2017-01-10 10:48:14 +0100
commitcb214887258e20b89cd275946a280fee9c4b47fa (patch)
tree11b5a35c81d9266da73eb49a349b4f71d2b40b28
parent9d08e1f8c231016dcfeb854acff457e0e54f179d (diff)
downloadillumos-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.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;