From 394b7d0877aed2be738e558a01cbc72f1ab2dada Mon Sep 17 00:00:00 2001 From: Nick Hibma Date: Mon, 16 Aug 1999 21:44:14 +0000 Subject: [PATCH] Change calling of chained event handler from always after the attach/detach to 1) MOD_LOAD before attach 2) MOD_UNLOAD after detach The driver specific event handler can now be used to function as driver specific init/deinit function (compare to device specific init/deinit functions: attach & detach). --- sys/kern/subr_bus.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/sys/kern/subr_bus.c b/sys/kern/subr_bus.c index f174d20f224..27e280e6a30 100644 --- a/sys/kern/subr_bus.c +++ b/sys/kern/subr_bus.c @@ -23,7 +23,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: subr_bus.c,v 1.37 1999/08/14 13:20:04 n_hibma Exp $ + * $Id: subr_bus.c,v 1.38 1999/08/14 13:32:25 n_hibma Exp $ */ #include @@ -2142,6 +2142,9 @@ driver_module_handler(module_t mod, int what, void *arg) switch (what) { case MOD_LOAD: + if (dmd->dmd_chainevh) + error = dmd->dmd_chainevh(mod,what,dmd->dmd_chainarg); + for (i = 0; !error && i < dmd->dmd_ndrivers; i++) { PDEBUG(("Loading module: driver %s on bus %s", DRIVERNAME(dmd->dmd_drivers[i]), @@ -2169,11 +2172,12 @@ driver_module_handler(module_t mod, int what, void *arg) error = devclass_delete_driver(bus_devclass, dmd->dmd_drivers[i]); } + + if (!error && dmd->dmd_chainevh) + error = dmd->dmd_chainevh(mod,what,dmd->dmd_chainarg); break; } - if (!error && dmd->dmd_chainevh) - error = dmd->dmd_chainevh(mod, what, dmd->dmd_chainarg); return (error); }