summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sys/arch/alpha/alpha/interrupt.c17
-rw-r--r--sys/arch/amd64/amd64/softintr.c6
-rw-r--r--sys/arch/i386/i386/softintr.c6
3 files changed, 16 insertions, 13 deletions
diff --git a/sys/arch/alpha/alpha/interrupt.c b/sys/arch/alpha/alpha/interrupt.c
index 568aa609610..952498d253e 100644
--- a/sys/arch/alpha/alpha/interrupt.c
+++ b/sys/arch/alpha/alpha/interrupt.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: interrupt.c,v 1.28 2009/03/25 21:41:40 miod Exp $ */
+/* $OpenBSD: interrupt.c,v 1.29 2009/04/19 19:13:57 oga Exp $ */
/* $NetBSD: interrupt.c,v 1.46 2000/06/03 20:47:36 thorpej Exp $ */
/*-
@@ -553,18 +553,17 @@ softintr_dispatch()
mtx_enter(&asi->softintr_mtx);
sih = TAILQ_FIRST(&asi->softintr_q);
- if (sih != NULL) {
- TAILQ_REMOVE(&asi->softintr_q, sih,
- sih_q);
- sih->sih_pending = 0;
+ if (sih == NULL) {
+ mtx_leave(&asi->softintr_mtx);
+ break;
}
+ TAILQ_REMOVE(&asi->softintr_q, sih, sih_q);
+ sih->sih_pending = 0;
- mtx_leave(&asi->softintr_mtx);
+ uvmexp.softs++;
- if (sih == NULL)
- break;
+ mtx_leave(&asi->softintr_mtx);
- uvmexp.softs++;
(*sih->sih_fn)(sih->sih_arg);
}
}
diff --git a/sys/arch/amd64/amd64/softintr.c b/sys/arch/amd64/amd64/softintr.c
index a6e659d2744..b0d22813c76 100644
--- a/sys/arch/amd64/amd64/softintr.c
+++ b/sys/arch/amd64/amd64/softintr.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: softintr.c,v 1.4 2009/04/19 17:50:18 oga Exp $ */
+/* $OpenBSD: softintr.c,v 1.5 2009/04/19 19:13:57 oga Exp $ */
/* $NetBSD: softintr.c,v 1.1 2003/02/26 21:26:12 fvdl Exp $ */
/*-
@@ -88,9 +88,11 @@ softintr_dispatch(int which)
}
TAILQ_REMOVE(&si->softintr_q, sih, sih_q);
sih->sih_pending = 0;
- mtx_leave(&si->softintr_lock);
uvmexp.softs++;
+
+ mtx_leave(&si->softintr_lock);
+
(*sih->sih_fn)(sih->sih_arg);
}
}
diff --git a/sys/arch/i386/i386/softintr.c b/sys/arch/i386/i386/softintr.c
index 4a9a65a04d4..1c2f9dde53d 100644
--- a/sys/arch/i386/i386/softintr.c
+++ b/sys/arch/i386/i386/softintr.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: softintr.c,v 1.3 2009/04/19 17:50:18 oga Exp $ */
+/* $OpenBSD: softintr.c,v 1.4 2009/04/19 19:13:57 oga Exp $ */
/* $NetBSD: softintr.c,v 1.1 2003/02/26 21:26:12 fvdl Exp $ */
/*-
@@ -88,9 +88,11 @@ softintr_dispatch(int which)
}
TAILQ_REMOVE(&si->softintr_q, sih, sih_q);
sih->sih_pending = 0;
- mtx_leave(&si->softintr_lock);
uvmexp.softs++;
+
+ mtx_leave(&si->softintr_lock);
+
(*sih->sih_fn)(sih->sih_arg);
}
}