Hello,

On 07/12/15(Mon) 16:48, Mathieu - wrote:
> Hello,
> 
> I worked a bit on umass(4) recently and had a diff to pass the
> umassbus_softc's real size to free so here it is.  At some point I
> pondered about deleting the whole abstraction, as it would simplify the
> free'ing, for we only have one implementation (umass_scsi_softc, as atapi
> uses it too). But I figured it would be against the whole design of the
> umass driver, thoughts?

I'd rather create a umass_scsi_detach() function symmetrical to
umass_scsi_attach().  This way you don't need an extra variable
for the size, keep the autoconf(9) glue inside umass_scsi.c and
can turn "struct umassbus_softc" into an opaque type.

> 
> Index: usb/umass.c
> ===================================================================
> RCS file: /cvs/src/sys/dev/usb/umass.c,v
> retrieving revision 1.70
> diff -u -p -r1.70 umass.c
> --- usb/umass.c       14 Mar 2015 03:38:50 -0000      1.70
> +++ usb/umass.c       7 Dec 2015 15:40:15 -0000
> @@ -651,7 +651,7 @@ umass_detach(struct device *self, int fl
>       if (scbus != NULL) {
>               if (scbus->sc_child != NULL)
>                       rv = config_detach(scbus->sc_child, flags);
> -             free(scbus, M_DEVBUF, 0);
> +             free(scbus, M_DEVBUF, scbus->sc_size);
>               sc->bus = NULL;
>       }
>  
> Index: usb/umass_scsi.c
> ===================================================================
> RCS file: /cvs/src/sys/dev/usb/umass_scsi.c,v
> retrieving revision 1.42
> diff -u -p -r1.42 umass_scsi.c
> --- usb/umass_scsi.c  14 Mar 2015 03:38:50 -0000      1.42
> +++ usb/umass_scsi.c  7 Dec 2015 15:40:16 -0000
> @@ -145,6 +145,7 @@ umass_scsi_setup(struct umass_softc *sc)
>       struct umass_scsi_softc *scbus;
>  
>       scbus = malloc(sizeof(*scbus), M_DEVBUF, M_WAITOK | M_ZERO);
> +     scbus->base.sc_size = sizeof(*scbus);
>  
>       sc->bus = (struct umassbus_softc *)scbus;
>  
> Index: usb/umassvar.h
> ===================================================================
> RCS file: /cvs/src/sys/dev/usb/umassvar.h,v
> retrieving revision 1.14
> diff -u -p -r1.14 umassvar.h
> --- usb/umassvar.h    6 Nov 2013 14:37:31 -0000       1.14
> +++ usb/umassvar.h    7 Dec 2015 15:40:16 -0000
> @@ -146,6 +146,7 @@ struct umass_wire_methods {
>  
>  struct umassbus_softc {
>       struct device           *sc_child;      /* child device, for detach */
> +     size_t                           sc_size;
>  };
>  
>  /* the per device structure */
> 

Reply via email to