diff options
author | Mark Kettenis <kettenis@cvs.openbsd.org> | 2011-06-24 19:08:47 +0000 |
---|---|---|
committer | Mark Kettenis <kettenis@cvs.openbsd.org> | 2011-06-24 19:08:47 +0000 |
commit | 7f1ea65fed8697f18acb9a18feab7940904e5e80 (patch) | |
tree | 82171a2ada065d4c96f527a6a650115b2698b68c | |
parent | 911657628f8bb1203d3ad5fa49d0d21dcac458cb (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@
-rw-r--r-- | sys/arch/sparc64/sparc64/intr.c | 5 |
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; |