mirror of
https://github.com/opnsense/src.git
synced 2026-04-27 00:58:36 -04:00
MFC 198367:
Set the devclass_t pointer specified in the DRIVER_MODULE() macro sooner so it is always valid when a driver's identify routine is called.
This commit is contained in:
parent
dcf9f13772
commit
f6b15c7b77
1 changed files with 14 additions and 24 deletions
|
|
@ -1049,9 +1049,10 @@ devclass_driver_added(devclass_t dc, driver_t *driver)
|
|||
* @param driver the driver to register
|
||||
*/
|
||||
static int
|
||||
devclass_add_driver(devclass_t dc, driver_t *driver, int pass)
|
||||
devclass_add_driver(devclass_t dc, driver_t *driver, int pass, devclass_t *dcp)
|
||||
{
|
||||
driverlink_t dl;
|
||||
const char *parentname;
|
||||
|
||||
PDEBUG(("%s", DRIVERNAME(driver)));
|
||||
|
||||
|
|
@ -1072,9 +1073,17 @@ devclass_add_driver(devclass_t dc, driver_t *driver, int pass)
|
|||
kobj_class_compile((kobj_class_t) driver);
|
||||
|
||||
/*
|
||||
* Make sure the devclass which the driver is implementing exists.
|
||||
* If the driver has any base classes, make the
|
||||
* devclass inherit from the devclass of the driver's
|
||||
* first base class. This will allow the system to
|
||||
* search for drivers in both devclasses for children
|
||||
* of a device using this driver.
|
||||
*/
|
||||
devclass_find_internal(driver->name, NULL, TRUE);
|
||||
if (driver->baseclasses)
|
||||
parentname = driver->baseclasses[0]->name;
|
||||
else
|
||||
parentname = NULL;
|
||||
*dcp = devclass_find_internal(driver->name, parentname, TRUE);
|
||||
|
||||
dl->driver = driver;
|
||||
TAILQ_INSERT_TAIL(&dc->drivers, dl, link);
|
||||
|
|
@ -4117,27 +4126,8 @@ driver_module_handler(module_t mod, int what, void *arg)
|
|||
driver = dmd->dmd_driver;
|
||||
PDEBUG(("Loading module: driver %s on bus %s (pass %d)",
|
||||
DRIVERNAME(driver), dmd->dmd_busname, pass));
|
||||
error = devclass_add_driver(bus_devclass, driver, pass);
|
||||
if (error)
|
||||
break;
|
||||
|
||||
/*
|
||||
* If the driver has any base classes, make the
|
||||
* devclass inherit from the devclass of the driver's
|
||||
* first base class. This will allow the system to
|
||||
* search for drivers in both devclasses for children
|
||||
* of a device using this driver.
|
||||
*/
|
||||
if (driver->baseclasses) {
|
||||
const char *parentname;
|
||||
parentname = driver->baseclasses[0]->name;
|
||||
*dmd->dmd_devclass =
|
||||
devclass_find_internal(driver->name,
|
||||
parentname, TRUE);
|
||||
} else {
|
||||
*dmd->dmd_devclass =
|
||||
devclass_find_internal(driver->name, NULL, TRUE);
|
||||
}
|
||||
error = devclass_add_driver(bus_devclass, driver, pass,
|
||||
dmd->dmd_devclass);
|
||||
break;
|
||||
|
||||
case MOD_UNLOAD:
|
||||
|
|
|
|||
Loading…
Reference in a new issue