From 7f1ea65fed8697f18acb9a18feab7940904e5e80 Mon Sep 17 00:00:00 2001 From: Mark Kettenis Date: Fri, 24 Jun 2011 19:08:47 +0000 Subject: 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@ --- sys/arch/sparc64/sparc64/intr.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'sys/arch') 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; -- cgit v1.2.3