Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 18 Apr 2009 03:10:28 +0000 (UTC)
From:      Warner Losh <imp@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r191234 - head/sys/dev/ed
Message-ID:  <200904180310.n3I3ASIg052308@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: imp
Date: Sat Apr 18 03:10:28 2009
New Revision: 191234
URL: http://svn.freebsd.org/changeset/base/191234

Log:
  Establish the interrupt handler AFTER we successfully attach.  We need
  to do this in case we have a shared interrupt that fires during the
  attach process....

Modified:
  head/sys/dev/ed/if_ed_cbus.c
  head/sys/dev/ed/if_ed_isa.c
  head/sys/dev/ed/if_ed_pccard.c
  head/sys/dev/ed/if_ed_pci.c

Modified: head/sys/dev/ed/if_ed_cbus.c
==============================================================================
--- head/sys/dev/ed/if_ed_cbus.c	Sat Apr 18 03:02:44 2009	(r191233)
+++ head/sys/dev/ed/if_ed_cbus.c	Sat Apr 18 03:10:28 2009	(r191234)
@@ -242,15 +242,18 @@ ed_cbus_attach(dev)
 
 	ed_alloc_irq(dev, sc->irq_rid, 0);
 
-	error = bus_setup_intr(dev, sc->irq_res, INTR_TYPE_NET | INTR_MPSAFE,
-	    NULL, edintr, sc, &sc->irq_handle);
+	if (sc->sc_media_ioctl == NULL)
+		ed_gen_ifmedia_init(sc);
+	error = ed_attach(dev);
 	if (error) {
 		ed_release_resources(dev);
 		return (error);
 	}
-	if (sc->sc_media_ioctl == NULL)
-		ed_gen_ifmedia_init(sc);
-	return ed_attach(dev);
+	error = bus_setup_intr(dev, sc->irq_res, INTR_TYPE_NET | INTR_MPSAFE,
+	    NULL, edintr, sc, &sc->irq_handle);
+	if (error)
+		ed_release_resources(dev);
+	return (error);
 }
 
 /*

Modified: head/sys/dev/ed/if_ed_isa.c
==============================================================================
--- head/sys/dev/ed/if_ed_isa.c	Sat Apr 18 03:02:44 2009	(r191233)
+++ head/sys/dev/ed/if_ed_isa.c	Sat Apr 18 03:10:28 2009	(r191234)
@@ -169,15 +169,18 @@ ed_isa_attach(device_t dev)
 
 	ed_alloc_irq(dev, sc->irq_rid, 0);
 
-	error = bus_setup_intr(dev, sc->irq_res, INTR_TYPE_NET | INTR_MPSAFE,
-	    NULL, edintr, sc, &sc->irq_handle);
+	if (sc->sc_media_ioctl == NULL)
+		ed_gen_ifmedia_init(sc);
+	error = ed_attach(dev);
 	if (error) {
 		ed_release_resources(dev);
 		return (error);
 	}
-	if (sc->sc_media_ioctl == NULL)
-		ed_gen_ifmedia_init(sc);
-	return ed_attach(dev);
+	error = bus_setup_intr(dev, sc->irq_res, INTR_TYPE_NET | INTR_MPSAFE,
+	    NULL, edintr, sc, &sc->irq_handle);
+	if (error)
+		ed_release_resources(dev);
+	return (error);
 }
 
 static device_method_t ed_isa_methods[] = {

Modified: head/sys/dev/ed/if_ed_pccard.c
==============================================================================
--- head/sys/dev/ed/if_ed_pccard.c	Sat Apr 18 03:02:44 2009	(r191233)
+++ head/sys/dev/ed/if_ed_pccard.c	Sat Apr 18 03:10:28 2009	(r191234)
@@ -495,13 +495,6 @@ ed_pccard_attach(device_t dev)
 	if (error)
 		goto bad;
 
-	error = bus_setup_intr(dev, sc->irq_res, INTR_TYPE_NET | INTR_MPSAFE,
-	    NULL, edintr, sc, &sc->irq_handle);
-	if (error) {
-		device_printf(dev, "setup intr failed %d \n", error);
-		goto bad;
-	}	      
-
 	/*
 	 * There are several ways to get the MAC address for the card.
 	 * Some of the above probe routines can fill in the enaddr.  If
@@ -589,6 +582,14 @@ ed_pccard_attach(device_t dev)
 	}
 	if (sc->modem_rid != -1)
 		ed_pccard_add_modem(dev);
+
+	error = bus_setup_intr(dev, sc->irq_res, INTR_TYPE_NET | INTR_MPSAFE,
+	    NULL, edintr, sc, &sc->irq_handle);
+	if (error) {
+		device_printf(dev, "setup intr failed %d \n", error);
+		goto bad;
+	}	      
+
 	return (0);
 bad:
 	ed_detach(dev);

Modified: head/sys/dev/ed/if_ed_pci.c
==============================================================================
--- head/sys/dev/ed/if_ed_pci.c	Sat Apr 18 03:02:44 2009	(r191233)
+++ head/sys/dev/ed/if_ed_pci.c	Sat Apr 18 03:10:28 2009	(r191234)
@@ -110,15 +110,15 @@ ed_pci_attach(device_t dev)
 		ed_release_resources(dev);
 		return (error);
 	}
-	error = bus_setup_intr(dev, sc->irq_res, INTR_TYPE_NET | INTR_MPSAFE,
-	    NULL, edintr, sc, &sc->irq_handle);
+	if (sc->sc_media_ioctl == NULL)
+		ed_gen_ifmedia_init(sc);
+	error = ed_attach(dev);
 	if (error) {
 		ed_release_resources(dev);
 		return (error);
 	}
-	if (sc->sc_media_ioctl == NULL)
-		ed_gen_ifmedia_init(sc);
-	error = ed_attach(dev);
+	error = bus_setup_intr(dev, sc->irq_res, INTR_TYPE_NET | INTR_MPSAFE,
+	    NULL, edintr, sc, &sc->irq_handle);
 	if (error)
 		ed_release_resources(dev);
 	return (error);



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200904180310.n3I3ASIg052308>