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>