summaryrefslogtreecommitdiff
path: root/sys/arch/sparc/dev/xd.c
diff options
context:
space:
mode:
authorArtur Grabowski <art@cvs.openbsd.org>2002-04-30 01:12:30 +0000
committerArtur Grabowski <art@cvs.openbsd.org>2002-04-30 01:12:30 +0000
commit88066c9a0811bfa66b9e85d8790cbfab53d8d481 (patch)
treead08df2b2e5d355769383393b043398e0c0dc4b0 /sys/arch/sparc/dev/xd.c
parent953dd9ca5783b67d25ed99deab898083deb94c3f (diff)
Fix an ancient problem in how sparc interrupts are handled.
There are many interrupt handlers that assume that they don't need to do any spl protection in their code because the interrupt of some level can't be interrupted by an interrupt of the same level. The problem is that some interrupt handlers have hardware levels that are lower then their "software" levels. Fix this by adding an additional field to struct intrhand that specifies which "software" level an interrupt handler has and blocks that level while handling the interrupt. This new field is initialized in intr_establish which gets an additional argument (which can be -1 meaning that the interrupt handler doesn't need to block any additional level). ok deraadt@
Diffstat (limited to 'sys/arch/sparc/dev/xd.c')
-rw-r--r--sys/arch/sparc/dev/xd.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/sys/arch/sparc/dev/xd.c b/sys/arch/sparc/dev/xd.c
index 76a433b9149..9648f63ea3d 100644
--- a/sys/arch/sparc/dev/xd.c
+++ b/sys/arch/sparc/dev/xd.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: xd.c,v 1.21 2002/03/14 01:26:43 millert Exp $ */
+/* $OpenBSD: xd.c,v 1.22 2002/04/30 01:12:29 art Exp $ */
/* $NetBSD: xd.c,v 1.37 1997/07/29 09:58:16 fair Exp $ */
/*
@@ -488,7 +488,7 @@ xdcattach(parent, self, aux)
xdc->sc_ih.ih_fun = xdcintr;
xdc->sc_ih.ih_arg = xdc;
vmeintr_establish(ca->ca_ra.ra_intr[0].int_vec,
- ca->ca_ra.ra_intr[0].int_pri, &xdc->sc_ih);
+ ca->ca_ra.ra_intr[0].int_pri, &xdc->sc_ih, IPL_BIO);
evcnt_attach(&xdc->sc_dev, "intr", &xdc->sc_intrcnt);