Date: Sun, 23 Jan 2000 13:48:16 -0500 (EST) From: Louis Mamakos <louie@TransSys.COM> To: FreeBSD-gnats-submit@freebsd.org, n_hibma@webweaving.org Subject: kern/16315: ugen set configuration ioctl returns EIO on "normal" completeion Message-ID: <200001231848.NAA05102@whizzo.transsys.com>
next in thread | raw e-mail | index | archive | help
>Number: 16315 >Category: kern >Synopsis: USB ugen set configuration ioctl() returns EIO rather than 0 >Confidential: no >Severity: non-critical >Priority: medium >Responsible: freebsd-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Sun Jan 23 10:50:01 PST 2000 >Closed-Date: >Last-Modified: >Originator: Louis Mamakos >Release: FreeBSD 4.0-CURRENT i386 >Organization: >Environment: Just out of the oven 4.0-current. >Description: The previous fix for the USB ugen device set configuration ioctl() has a slight error, and returns EIO way too often. >How-To-Repeat: Try the ioctl() on a device that supports it. >Fix: Includes additional debugging message. Index: /sys/dev/usb/ugen.c =================================================================== RCS file: /usr/local/FreeBSD/cvs/src/sys/dev/usb/ugen.c,v retrieving revision 1.35 diff -u -r1.35 ugen.c --- /sys/dev/usb/ugen.c 2000/01/23 15:48:29 1.35 +++ /sys/dev/usb/ugen.c 2000/01/23 18:42:49 @@ -209,8 +209,12 @@ * control endpoint is open or not. It is always present. */ for (endptno = 1; endptno < USB_MAX_ENDPOINTS; endptno++) - if (sc->sc_is_open[endptno]) + if (sc->sc_is_open[endptno]) { + DPRINTFN(1, + ("ugen_set_config: %s - endpoint %d is open\n", + USBDEVNAME(sc->sc_dev), endptno)); return (USBD_IN_USE); + } if (usbd_get_config_descriptor(dev)->bConfigurationValue != configno) { /* Avoid setting the current value. */ @@ -957,10 +961,14 @@ if (!(flag & FWRITE)) return (EPERM); err = ugen_set_config(sc, *(int *)addr); - if (err == USBD_IN_USE) - return(EBUSY); - else + switch (err) { + case USBD_NORMAL_COMPLETION: + break; + case USBD_IN_USE: + return (EBUSY); + default: return (EIO); + } break; case USB_GET_ALTINTERFACE: ai = (struct usb_alt_interface *)addr; >Release-Note: >Audit-Trail: >Unformatted: To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-bugs" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200001231848.NAA05102>