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>