summaryrefslogtreecommitdiff
path: root/usr/src/uts/sun4/io/px/px_ib.c
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/uts/sun4/io/px/px_ib.c')
-rw-r--r--usr/src/uts/sun4/io/px/px_ib.c19
1 files changed, 10 insertions, 9 deletions
diff --git a/usr/src/uts/sun4/io/px/px_ib.c b/usr/src/uts/sun4/io/px/px_ib.c
index 9355a15741..90fec6ae2c 100644
--- a/usr/src/uts/sun4/io/px/px_ib.c
+++ b/usr/src/uts/sun4/io/px/px_ib.c
@@ -699,14 +699,6 @@ px_ib_ino_rem_intr(px_t *px_p, px_ino_pil_t *ipil_p, px_ih_t *ih_p)
/* Disable the interrupt */
PX_INTR_DISABLE(px_p->px_dip, sysino);
- if (ipil_p->ipil_ih_size == 1) {
- if (ih_lst != ih_p)
- goto not_found;
-
- /* No need to set head/tail as ino_p will be freed */
- goto reset;
- }
-
/* Busy wait on pending interrupt */
for (start_time = gethrtime(); !panicstr &&
((ret = px_lib_intr_getstate(dip, sysino, &intr_state))
@@ -727,7 +719,8 @@ px_ib_ino_rem_intr(px_t *px_p, px_ino_pil_t *ipil_p, px_ih_t *ih_p)
* because of jabber we need to clear the pending state in case the
* jabber has gone away.
*/
- if (ino_p->ino_unclaimed_intrs > px_unclaimed_intr_max) {
+ if (ret == DDI_SUCCESS &&
+ ino_p->ino_unclaimed_intrs > px_unclaimed_intr_max) {
cmn_err(CE_WARN, "%s%d: px_ib_ino_rem_intr: "
"ino 0x%x has been unblocked",
ddi_driver_name(dip), ddi_get_instance(dip), ino);
@@ -743,6 +736,14 @@ px_ib_ino_rem_intr(px_t *px_p, px_ino_pil_t *ipil_p, px_ih_t *ih_p)
return (ret);
}
+ if (ipil_p->ipil_ih_size == 1) {
+ if (ih_lst != ih_p)
+ goto not_found;
+
+ /* No need to set head/tail as ino_p will be freed */
+ goto reset;
+ }
+
/* Search the link list for ih_p */
for (i = 0; (i < ipil_p->ipil_ih_size) &&
(ih_lst->ih_next != ih_p); i++, ih_lst = ih_lst->ih_next)