Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 11 Feb 2009 08:48:44 +0200
From:      "Alexander Motin" <mav@FreeBSD.org>
To:        "M. Warner Losh" <imp@bsdimp.com>
Cc:        svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org
Subject:   Re: svn commit: r188464 - head/sys/kern
Message-ID:  <200902110848450000@442211619>

next in thread | raw e-mail | index | archive | help
>             Alexander Motin <mav@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:

device_set_devclass() itself already complains about driver problem (but only with verbose messages). At this point the only thing we should do is not to crash. As I have said, there also can be other failure reasons except driver bugs, for example, low memory.

-- 
Alexander Motin



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200902110848450000>