svn commit: r188464 - head/sys/kern

M. Warner Losh imp at bsdimp.com
Tue Feb 10 21:00:23 PST 2009


In message: <200902102322.n1ANMTgW007393 at svn.freebsd.org>
            Alexander Motin <mav at freebsd.org> writes:
: Author: mav
: Date: Tue Feb 10 23:22:29 2009
: New Revision: 188464
: URL: http://svn.freebsd.org/changeset/base/188464
: 
: Log:
:   Check for device_set_devclass() errors and skip driver probe/attach if any.
:   Attach call without devclass set crashes the system.
:   
:   On resume AHCI driver sometimes tries to create duplicate adX device.
:   It is surely his own problem, but IMHO it is not a reason to crash here.
:   Other reasons are also possible.
: 
: Modified:
:   head/sys/kern/subr_bus.c
: 
: Modified: head/sys/kern/subr_bus.c
: ==============================================================================
: --- head/sys/kern/subr_bus.c	Tue Feb 10 23:17:20 2009	(r188463)
: +++ head/sys/kern/subr_bus.c	Tue Feb 10 23:22:29 2009	(r188464)
: @@ -1756,8 +1756,13 @@ device_probe_child(device_t dev, device_
:  		     dl = next_matching_driver(dc, child, dl)) {
:  			PDEBUG(("Trying %s", DRIVERNAME(dl->driver)));
:  			device_set_driver(child, dl->driver);
: -			if (!hasclass)
: -				device_set_devclass(child, dl->driver->name);
: +			if (!hasclass) {
: +				if (device_set_devclass(child, dl->driver->name)) {
: +					PDEBUG(("Unable to set device class"));
: +					device_set_driver(child, NULL);
: +					continue;
: +				}
: +			}
:  
:  			/* Fetch any flags for the device before probing. */
:  			resource_int_value(dl->driver->name, child->unit,

I'd prefer applying this patch to make it whine louder so we don't
forget about it:

Index: subr_bus.c
===================================================================
--- subr_bus.c	(revision 188476)
+++ subr_bus.c	(working copy)
@@ -1758,7 +1758,8 @@
 			device_set_driver(child, dl->driver);
 			if (!hasclass) {
 				if (device_set_devclass(child, dl->driver->name)) {
-					PDEBUG(("Unable to set device class"));
+					printf("driver bug: Unable to set devclass (devname: %s)\n",
+					    DEVICENAME(child));
 					device_set_driver(child, NULL);
 					continue;
 				}

Comments?

Warner


More information about the svn-src-head mailing list