summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sys/dev/if_ndis/if_ndis.c17
1 files changed, 13 insertions, 4 deletions
diff --git a/sys/dev/if_ndis/if_ndis.c b/sys/dev/if_ndis/if_ndis.c
index 1634160..cc1ee9c 100644
--- a/sys/dev/if_ndis/if_ndis.c
+++ b/sys/dev/if_ndis/if_ndis.c
@@ -288,6 +288,19 @@ ndis_attach(dev)
sc->ndis_rescnt++;
+ /*
+ * Hook interrupt early, since calling the driver's
+ * init routine may trigger an interrupt.
+ */
+ error = bus_setup_intr(dev, sc->ndis_irq, INTR_TYPE_NET,
+ ndis_intr, sc, &sc->ndis_intrhand);
+
+ if (error) {
+ printf("ndis%d: couldn't register interrupt\n", unit);
+ error = ENXIO;
+ goto fail;
+ }
+
/*
* Allocate the parent bus DMA tag appropriate for PCI.
*/
@@ -545,10 +558,6 @@ ndis_attach(dev)
ifmedia_set(&sc->ifmedia, IFM_ETHER|IFM_AUTO);
}
- /* Hook interrupt last to avoid having to lock softc */
- error = bus_setup_intr(dev, sc->ndis_irq, INTR_TYPE_NET,
- ndis_intr, sc, &sc->ndis_intrhand);
-
/* Override the status handler so we can detect link changes. */
sc->ndis_block.nmb_status_func = ndis_linksts;
OpenPOWER on IntegriCloud