Date: Fri, 06 Dec 2019 13:17:36 -0700 From: Ian Lepore <ian@freebsd.org> To: Luiz Otavio O Souza <loos@FreeBSD.org>, src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: Re: svn commit: r355461 - head/sys/arm/mv Message-ID: <4e4999fec53ec82f9cfa9a441be09b884cb77e4d.camel@freebsd.org> In-Reply-To: <201912062005.xB6K58OX065449@repo.freebsd.org> References: <201912062005.xB6K58OX065449@repo.freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
On Fri, 2019-12-06 at 20:05 +0000, Luiz Otavio O Souza wrote: > Author: loos > Date: Fri Dec 6 20:05:08 2019 > New Revision: 355461 > URL: https://svnweb.freebsd.org/changeset/base/355461 > > Log: > Fix the ARM64 build, include the necessary <sys/mutex.h> header. > > While here, call device_delete_children() to detach and dealloc all > the > existent children and handle the child's detach errors properly. > > Reported by: jenkins, hselasky, ian > Sponsored by: Rubicon Communications, LLC (Netgate) > > Modified: > head/sys/arm/mv/a37x0_spi.c > > Modified: head/sys/arm/mv/a37x0_spi.c > ===================================================================== > ========= > --- head/sys/arm/mv/a37x0_spi.c Fri Dec 6 19:33:39 2019 (r355 > 460) > +++ head/sys/arm/mv/a37x0_spi.c Fri Dec 6 20:05:08 2019 (r355 > 461) > @@ -29,9 +29,9 @@ __FBSDID("$FreeBSD$"); > #include <sys/param.h> > #include <sys/systm.h> > #include <sys/bus.h> > - > #include <sys/kernel.h> > #include <sys/module.h> > +#include <sys/mutex.h> > #include <sys/rman.h> > > #include <machine/bus.h> > @@ -228,9 +228,11 @@ a37x0_spi_attach(device_t dev) > static int > a37x0_spi_detach(device_t dev) > { > + int err; > struct a37x0_spi_softc *sc; > > - bus_generic_detach(dev); > + if ((err = device_delete_children(dev)) != 0) > + return (err); > sc = device_get_softc(dev); > mtx_destroy(&sc->sc_mtx); > if (sc->sc_intrhand) Oops, not quite right; I should have been more explicit. Something more like this: if ((err = bus_generic_detach(dev)) != 0) return (err); device_delete_children(dev); The delete is basically cannot-fail (as long as they're not attached), but bus_generic_detach() can fail if the detach method of any child/grandchilden fails. Hrm. You know, now that I've just looked in the code for device_delete_children(), it appears it will call detach if necessary, so maybe your approach is fine. I've just never done it that way. If anyone knows a reason why one approach is better than the other, say so. Otherwise I guess we should call this good. -- Ian
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4e4999fec53ec82f9cfa9a441be09b884cb77e4d.camel>