usb/94311: [ugen][PATCH] allow interrupt IN transactions to be
affected by USB_SET_TIMEOUT
Lonnie Mendez
lmendez19 at austin.rr.com
Sat Mar 11 05:50:27 UTC 2006
>Number: 94311
>Category: usb
>Synopsis: [ugen][PATCH] allow interrupt IN transactions to be affected by USB_SET_TIMEOUT
>Confidential: no
>Severity: non-critical
>Priority: medium
>Responsible: freebsd-usb
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: sw-bug
>Submitter-Id: current-users
>Arrival-Date: Sat Mar 11 05:50:20 GMT 2006
>Closed-Date:
>Last-Modified:
>Originator: Lonnie Mendez
>Release: 6.1-BETA2
>Organization:
>Environment:
FreeBSD twind 6.1-BETA2 FreeBSD 6.1-BETA2 #4: Fri Mar 10 22:09:38 CST 2006 root at twind:/usr/src/sys/i386/compile/MYKERNEL i386
>Description:
While developing the usb redirector for qemu on FreeBSD I ran into the fact that the interrupt transaction process in ugen.c:ugen_do_read() does not allow for a timeout value (hangs process without O_NONBLOCK and no data). The man page for ugen also does not mention that USB_SET_TIMEOUT ioctl has no effect for interrupt IN transaction so I'm led to believe this is a bug/feature not yet fixed:
USB_SET_TIMEOUT (int)
Set the timeout on the device operations, the time is specified
in milliseconds. The value 0 is used to indicate that there is
no timeout.
The patch below I believe corrects for this by using the timeout value that can be set from USB_SET_TIMEOUT ioctl in the tsleep call. With this patch the redirector can maintain the KISS principle while functioning properly.
>How-To-Repeat:
>Fix:
--- sys/dev/usb/ugen.c Fri Mar 10 23:17:56 2006
+++ sys/dev/usb/ugen.c Fri Mar 10 22:28:32 2006
@@ -726,12 +726,15 @@
}
sce->state |= UGEN_ASLP;
DPRINTFN(5, ("ugenread: sleep on %p\n", sce));
- error = tsleep(sce, PZERO | PCATCH, "ugenri", 0);
+ error = tsleep(sce, PZERO | PCATCH, "ugenri",
+ (sce->timeout*hz+999)/1000);
DPRINTFN(5, ("ugenread: woke, error=%d\n", error));
if (sc->sc_dying)
error = EIO;
if (error) {
sce->state &= ~UGEN_ASLP;
+ if (error == EWOULDBLOCK)
+ error = ETIMEDOUT;
break;
}
}
>Release-Note:
>Audit-Trail:
>Unformatted:
More information about the freebsd-usb
mailing list