svn commit: r228298 - head/sys/dev/et
Pyun YongHyeon
yongari at FreeBSD.org
Tue Dec 6 00:58:43 UTC 2011
Author: yongari
Date: Tue Dec 6 00:58:42 2011
New Revision: 228298
URL: http://svn.freebsd.org/changeset/base/228298
Log:
Make et_probe() return BUS_PROBE_DEFAULT such that allow other
driver that has high precedence for the controller override et(4).
Add missing callout_drain(9) in device detach and rework detach
routine. While I'm here use rman_get_rid(9) instead of using
cached resource id because bus methods are free to change the
id.
Modified:
head/sys/dev/et/if_et.c
Modified: head/sys/dev/et/if_et.c
==============================================================================
--- head/sys/dev/et/if_et.c Tue Dec 6 00:18:37 2011 (r228297)
+++ head/sys/dev/et/if_et.c Tue Dec 6 00:58:42 2011 (r228298)
@@ -226,7 +226,7 @@ et_probe(device_t dev)
for (d = et_devices; d->desc != NULL; ++d) {
if (vid == d->vid && did == d->did) {
device_set_desc(dev, d->desc);
- return (0);
+ return (BUS_PROBE_DEFAULT);
}
}
return (ENXIO);
@@ -378,31 +378,27 @@ et_detach(device_t dev)
struct et_softc *sc = device_get_softc(dev);
if (device_is_attached(dev)) {
- struct ifnet *ifp = sc->ifp;
-
+ ether_ifdetach(sc->ifp);
ET_LOCK(sc);
et_stop(sc);
- bus_teardown_intr(dev, sc->sc_irq_res, sc->sc_irq_handle);
ET_UNLOCK(sc);
-
- ether_ifdetach(ifp);
+ callout_drain(&sc->sc_tick);
}
if (sc->sc_miibus != NULL)
device_delete_child(dev, sc->sc_miibus);
bus_generic_detach(dev);
- if (sc->sc_irq_res != NULL) {
- bus_release_resource(dev, SYS_RES_IRQ, sc->sc_irq_rid,
- sc->sc_irq_res);
- }
+ if (sc->sc_irq_handle != NULL)
+ bus_teardown_intr(dev, sc->sc_irq_res, sc->sc_irq_handle);
+ if (sc->sc_irq_res != NULL)
+ bus_release_resource(dev, SYS_RES_IRQ,
+ rman_get_rid(sc->sc_irq_res), sc->sc_irq_res);
if ((sc->sc_flags & ET_FLAG_MSI) != 0)
pci_release_msi(dev);
-
- if (sc->sc_mem_res != NULL) {
- bus_release_resource(dev, SYS_RES_MEMORY, sc->sc_mem_rid,
- sc->sc_mem_res);
- }
+ if (sc->sc_mem_res != NULL)
+ bus_release_resource(dev, SYS_RES_MEMORY,
+ rman_get_rid(sc->sc_mem_res), sc->sc_mem_res);
if (sc->ifp != NULL)
if_free(sc->ifp);
More information about the svn-src-all
mailing list