summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorimp <imp@FreeBSD.org>2001-06-25 04:13:54 +0000
committerimp <imp@FreeBSD.org>2001-06-25 04:13:54 +0000
commit9c03640f8131fa266b0dbeb2a532794b18cee818 (patch)
tree58cc23d5dc5ce8804a41880e3c58f43dd6f16b4a
parenta89ca1efdcee5122d5660c0173acb8a8d1d53225 (diff)
downloadFreeBSD-src-9c03640f8131fa266b0dbeb2a532794b18cee818.zip
FreeBSD-src-9c03640f8131fa266b0dbeb2a532794b18cee818.tar.gz
Work around a bug in the current interrupt system by explicitly
rejecting INTR_FAST interrupts. Since they can't be shared anyway, this just short circuits a failure case that should work but is panic fodder now. This bug is that if the interrut condiation is active when you activate the interrupt, then the interrupt routine will be called. jhb had a patch that may or may not work to fix it, but I've lost it. This may be due to the sio probe doing something odd too.
-rw-r--r--sys/pccard/pcic.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/sys/pccard/pcic.c b/sys/pccard/pcic.c
index 89c14cd..3176ce6 100644
--- a/sys/pccard/pcic.c
+++ b/sys/pccard/pcic.c
@@ -692,9 +692,13 @@ int
pcic_setup_intr(device_t dev, device_t child, struct resource *irq,
int flags, driver_intr_t *intr, void *arg, void **cookiep)
{
+ struct pcic_softc *sc = device_get_softc(dev);
struct pccard_devinfo *devi = device_get_ivars(child);
int err;
+ if (sc->csc_route == pci_parallel && (flags & INTR_FAST))
+ return (EINVAL);
+
if (((1 << rman_get_start(irq)) & PCIC_INT_MASK_ALLOWED) == 0) {
device_printf(dev, "Hardware does not support irq %ld.\n",
rman_get_start(irq));
OpenPOWER on IntegriCloud