On 06/09/18(Thu) 23:01, Michael Mikonos wrote: > Hello, > > In the umidi(4) driver the function alloc_all_endpoints_fixed_ep() > returns USBD_NOMEM if mallocarray() fails, but the return value is > always USBD_INVAL when 'goto error' happens. OK?
Note that it'd be better to *not* use `usbd_status' for indicating generic failures. It would be great if `usbd_status' could be only used for code related to transfer (xfer) error/status. In that particular case alloc_all_endpoints() & friends could use normal errnos values. But that's a different issue ;) Since you're here, adding sizes to free(9) is also a nice possible cleanup :D Anyway, your diff is ok mpi@ > 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 14:28:21 -0000 > @@ -428,7 +428,6 @@ free_all_endpoints(struct umidi_softc *s > static usbd_status > alloc_all_endpoints_fixed_ep(struct umidi_softc *sc) > { > - usbd_status err; > struct umq_fixed_ep_desc *fp; > struct umidi_endpoint *ep; > usb_endpoint_descriptor_t *epd; > @@ -458,14 +457,12 @@ alloc_all_endpoints_fixed_ep(struct umid > if (!epd) { > DPRINTF(("%s: cannot get endpoint descriptor(out:%d)\n", > sc->sc_dev.dv_xname, fp->out_ep[i].ep)); > - err = USBD_INVAL; > goto error; > } > if (UE_GET_XFERTYPE(epd->bmAttributes)!=UE_BULK || > UE_GET_DIR(epd->bEndpointAddress)!=UE_DIR_OUT) { > printf("%s: illegal endpoint(out:%d)\n", > sc->sc_dev.dv_xname, fp->out_ep[i].ep); > - err = USBD_INVAL; > goto error; > } > ep->sc = sc; > @@ -485,14 +482,12 @@ alloc_all_endpoints_fixed_ep(struct umid > if (!epd) { > DPRINTF(("%s: cannot get endpoint descriptor(in:%d)\n", > sc->sc_dev.dv_xname, fp->in_ep[i].ep)); > - err = USBD_INVAL; > goto error; > } > if (UE_GET_XFERTYPE(epd->bmAttributes)!=UE_BULK || > UE_GET_DIR(epd->bEndpointAddress)!=UE_DIR_IN) { > printf("%s: illegal endpoint(in:%d)\n", > sc->sc_dev.dv_xname, fp->in_ep[i].ep); > - err = USBD_INVAL; > goto error; > } > ep->sc = sc; > @@ -509,7 +504,7 @@ alloc_all_endpoints_fixed_ep(struct umid > error: > free(sc->sc_endpoints, M_USBDEV, 0); > sc->sc_endpoints = NULL; > - return err; > + return USBD_INVAL; > } > > static usbd_status >