svn commit: r283637 - head/sys/dev/bwi

Gleb Smirnoff glebius at FreeBSD.org
Wed May 27 22:27:16 UTC 2015


Author: glebius
Date: Wed May 27 22:27:15 2015
New Revision: 283637
URL: https://svnweb.freebsd.org/changeset/base/283637

Log:
  Setup the interrupt handler after bwi_attach(). If IRQ is shared, interrupt
  may come during bwi_attach().

Modified:
  head/sys/dev/bwi/if_bwi_pci.c

Modified: head/sys/dev/bwi/if_bwi_pci.c
==============================================================================
--- head/sys/dev/bwi/if_bwi_pci.c	Wed May 27 22:25:49 2015	(r283636)
+++ head/sys/dev/bwi/if_bwi_pci.c	Wed May 27 22:27:15 2015	(r283637)
@@ -161,12 +161,6 @@ bwi_pci_attach(device_t dev)
 		device_printf(dev, "could not map interrupt\n");
 		goto bad1;
 	}
-	if (bus_setup_intr(dev, sc->sc_irq_res,
-			   INTR_TYPE_NET | INTR_MPSAFE,
-			   NULL, bwi_intr, sc, &sc->sc_irq_handle)) {
-		device_printf(dev, "could not establish interrupt\n");
-		goto bad2;
-	}
 
 	/* Get more PCI information */
 	sc->sc_pci_did = pci_get_device(dev);
@@ -174,11 +168,17 @@ bwi_pci_attach(device_t dev)
 	sc->sc_pci_subvid = pci_get_subvendor(dev);
 	sc->sc_pci_subdid = pci_get_subdevice(dev);
 
-	error = bwi_attach(sc);
-	if (error == 0)					/* success */
-		return 0;
+	if ((error = bwi_attach(sc)) != 0)
+		goto bad2;
+
+	if (bus_setup_intr(dev, sc->sc_irq_res,
+			   INTR_TYPE_NET | INTR_MPSAFE,
+			   NULL, bwi_intr, sc, &sc->sc_irq_handle)) {
+		device_printf(dev, "could not establish interrupt\n");
+		goto bad2;
+	}
+	return (0);
 
-	bus_teardown_intr(dev, sc->sc_irq_res, sc->sc_irq_handle);
 bad2:
 	bus_release_resource(dev, SYS_RES_IRQ, 0, sc->sc_irq_res);
 bad1:


More information about the svn-src-head mailing list