PERFORCE change 124315 for review
Maxim Zhuravlev
thioretic at FreeBSD.org
Sun Jul 29 15:00:55 UTC 2007
http://perforce.freebsd.org/chv.cgi?CH=124315
Change 124315 by thioretic at thioretic on 2007/07/29 15:00:03
Propogate all changes in soc2007/thioretic_gidl
to new soc2007/thioretic_gidl2
Affected files ...
.. //depot/projects/soc2007/thioretic_gidl2/kern/subr_bus.c#2 integrate
Differences ...
==== //depot/projects/soc2007/thioretic_gidl2/kern/subr_bus.c#2 (text+ko) ====
@@ -1345,7 +1345,9 @@
}
return (NULL);
}
+ dcl->devclass_ptr = dc;
TAILQ_INSERT_TAIL(&dcp->filters, dcl, link);
+ bus_data_generation_update();
}
return (dc);
}
@@ -1404,7 +1406,6 @@
if (!dl)
return (ENOMEM);
- isfilter = driverinfo_isfilter (driver);
/*
* Compile the driver's methods. Also increase the reference count
* so that the class doesn't get freed when the last instance
@@ -1416,10 +1417,15 @@
drv_internal_t drv_intnl;
drv_intnl = driverinfo_create_driver_drv_internal (driver);
- if (!drv_intnl && !(di = driverinfo_add_driver(intnl)))
- if (drv_intnl) free (drv_intnl);
+ if (!drv_intnl && !(di = driverinfo_add_driver(drv_intnl)))
+ if (drv_intnl){
+ free (drv_intnl);
+ return (1);
+ }
}
+ isfilter = driverinfo_isfilter (driver);
+
/*
* Make sure the devclass which the driver is implementing exists.
*/
@@ -1442,7 +1448,7 @@
BUS_DRIVER_ADDED(dc->devices[i], driver);
}
else {
- devclass_filter2devices(dc, driver);
+ devclass_filter2devices(pdc, driver);
}
bus_data_generation_update();
@@ -1970,8 +1976,6 @@
dev->devclass = dc;
snprintf(dev->nameunit, buflen, "%s%d", dc->name, dev->unit);
- devclass_device2filters (dc, dev);
-
return (0);
}
@@ -2015,6 +2019,12 @@
device_set_driver (dev, driver);
if (DEVICE_PROBE(dev)<=0){
device_attach(dev);
+ else {
+ dev->driver = TAILQ_FIRST(&dev->drivers[DRL_LOWEST]);
+ dev->driver_level=DRL_LOWEST;
+ dev->raw--;
+ if(!dev->raw)
+ dev->state = DS_ATTACHED;
}
}
@@ -2039,7 +2049,7 @@
for (i=0, i<=dc->maxunit; i++){
if ((dc->devices[i]) &&
- ((dc->devices[i])->state >= DS_ALIVE))
+ ((dc->devices[i])->state == DS_ATTACHED))
filter_probe_and_attach (dv->devices[i], filter);
}
}
@@ -2082,12 +2092,13 @@
return (NULL);
TAILQ_INIT(&(dev->parents));
pd = malloc(sizeof(struct devicelink), M_BUS, M_NOWAIT|M_ZERO);
+ if (!pd){free(dev); return(NULL);}
pd->device_ptr = parent;
- TAILQ_INSERT_TAIL(&(dev->parents), pd, link);
- TAILQ_INIT(&(dev->children));
+ TAILQ_INSERT_TAIL(&dev->parents, pd, link);
+ TAILQ_INIT(&dev->children);
kobj_init((kobj_t) dev, &drv_compat_ctrl_driver)
for (level=DRL_LOWEST; level<=DRL_TOPMOST; level++)
- TAILQ_INIT(&((dev->drivers)[level]));
+ TAILQ_INIT(&dev->drivers[level]);
dev->devclass = NULL;
dev->state = DS_NOTPRESENT;
dev->refs = 0;
@@ -3212,7 +3223,7 @@
level = driverinfo_flags2idx(flags);
if (driver != NULL){
- TAILQ_FOREACH(dil, &(dev->drivers[level]), link){
+ TAILQ_FOREACH(dil, &dev->drivers[level], link){
if (dil->pdriver == di)
break;
}
More information about the p4-projects
mailing list