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?

- 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