summaryrefslogtreecommitdiff
path: root/sys/arch
diff options
context:
space:
mode:
authorMark Kettenis <kettenis@cvs.openbsd.org>2011-06-24 19:08:47 +0000
committerMark Kettenis <kettenis@cvs.openbsd.org>2011-06-24 19:08:47 +0000
commit7f1ea65fed8697f18acb9a18feab7940904e5e80 (patch)
tree82171a2ada065d4c96f527a6a650115b2698b68c /sys/arch
parent911657628f8bb1203d3ad5fa49d0d21dcac458cb (diff)
We should only ack a shared interrupt once, after we've run all the handlers.
So let the intr_list_handler do this, and prevent the real handlers from doing it as well. tested by deraadt@
Diffstat (limited to 'sys/arch')
-rw-r--r--sys/arch/sparc64/sparc64/intr.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/sys/arch/sparc64/sparc64/intr.c b/sys/arch/sparc64/sparc64/intr.c
index 50a2950b594..93ae040d882 100644
--- a/sys/arch/sparc64/sparc64/intr.c
+++ b/sys/arch/sparc64/sparc64/intr.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: intr.c,v 1.39 2010/12/21 14:56:24 claudio Exp $ */
+/* $OpenBSD: intr.c,v 1.40 2011/06/24 19:08:46 kettenis Exp $ */
/* $NetBSD: intr.c,v 1.39 2001/07/19 23:38:11 eeh Exp $ */
/*
@@ -225,6 +225,7 @@ intr_establish(int level, struct intrhand *ih)
nih->ih_map = q->ih_map;
nih->ih_clr = q->ih_clr;
nih->ih_ack = q->ih_ack;
+ q->ih_ack = NULL;
intrlev[ih->ih_number] = q = nih;
} else {
@@ -232,6 +233,8 @@ intr_establish(int level, struct intrhand *ih)
q->ih_pil = ih->ih_pil;
}
+ ih->ih_ack = NULL;
+
/* Add the ih to the head of the list */
ih->ih_next = q->ih_arg;
q->ih_arg = ih;