Skip site navigation (1)Skip section navigation (2)
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>