On Fri, Sep 07, 2018 at 12:40:49AM +0800, Michael Mikonos wrote:
> Hello,
> 
> The umidi(4) driver has three different endpoint allocation
> functions, which are called by alloc_all_endpoints(). The
> initial jack count can be moved here because it is zero
> no matter which allocation function is used.
> Also when we eventually free the jacks the count can
> be reset. Does this look OK?

Yes, it does.

> 
> - Michael
> 
> 
> Index: umidi.c
> ===================================================================
> RCS file: /cvs/src/sys/dev/usb/umidi.c,v
> retrieving revision 1.47
> diff -u -p -u -r1.47 umidi.c
> --- umidi.c   6 Sep 2018 09:48:23 -0000       1.47
> +++ umidi.c   6 Sep 2018 16:24:22 -0000
> @@ -387,6 +387,8 @@ alloc_all_endpoints(struct umidi_softc *
>       struct umidi_endpoint *ep;
>       int i;
>  
> +     sc->sc_out_num_jacks = sc->sc_in_num_jacks = 0;
> +
>       if (UMQ_ISTYPE(sc, UMQ_TYPE_FIXED_EP))
>               err = alloc_all_endpoints_fixed_ep(sc);
>       else if (UMQ_ISTYPE(sc, UMQ_TYPE_YAMAHA))
> @@ -436,8 +438,6 @@ alloc_all_endpoints_fixed_ep(struct umid
>  
>       fp = umidi_get_quirk_data_from_type(sc->sc_quirk,
>                                           UMQ_TYPE_FIXED_EP);
> -     sc->sc_out_num_jacks = 0;
> -     sc->sc_in_num_jacks = 0;
>       sc->sc_out_num_endpoints = fp->num_out_ep;
>       sc->sc_in_num_endpoints = fp->num_in_ep;
>       sc->sc_endpoints = mallocarray(sc->sc_out_num_endpoints +
> @@ -521,7 +521,6 @@ alloc_all_endpoints_yamaha(struct umidi_
>       int out_addr, in_addr, in_packetsize, i, dir;
>       size_t remain, descsize;
>  
> -     sc->sc_out_num_jacks = sc->sc_in_num_jacks = 0;
>       out_addr = in_addr = 0;
>  
>       /* detect endpoints */
> @@ -627,7 +626,6 @@ alloc_all_endpoints_genuine(struct umidi
>       if (!p)
>               return USBD_NOMEM;
>  
> -     sc->sc_out_num_jacks = sc->sc_in_num_jacks = 0;
>       sc->sc_out_num_endpoints = sc->sc_in_num_endpoints = 0;
>       epaddr = -1;
>  
> @@ -780,6 +778,7 @@ free_all_jacks(struct umidi_softc *sc)
>       if (sc->sc_out_jacks) {
>               free(sc->sc_jacks, M_USBDEV, jacks * sizeof(*sc->sc_out_jacks));
>               sc->sc_jacks = sc->sc_in_jacks = sc->sc_out_jacks = NULL;
> +             sc->sc_out_num_jacks = sc->sc_in_num_jacks = 0;
>       }
>       splx(s);
>  }
> 

Reply via email to