Sorry it took a few days to get back to you... On Sat, 13 Mar 2004, Matthias Andree wrote:
> > yet, can you post both the strace output and the dmesg output for the same > > run? > > Not on the list, too large. I can show the URL of a bzip2ed copy of the > logs on some FTP/HTTP server once I've had the leisure to reboot the > machine several times, and I can mail them off-list. I looked at your logs. Interestingly, the problems occur with control transfers, not bulk transfers, but the strace only shows USBDEVFS_BULK ioctls, not USBDEVFS_CONTROL. I can't imagine what that means or how it happened. (Unless it's a bug in strace?) The syslog includes some information about the failed control transfers. They are Get_Descriptor requests, but exactly which descriptor isn't shown. Below is a patch that will provide more complete information. Try running it as before. The strace log may or may not help, it's hard to say; you might as well include it too. Ultimately your downfall was caused by the reply to one of those control transfers. The program requested a 9-byte descriptor from the scanner and the reply was longer than 9 bytes (that's the "Babble" near the end of your syslog). Many VIA USB controllers have a bug that causes them to stop working when they receive an unexpectedly long packet, and that happened to you. When the controller dies it takes everything along with it. (When I have a chance I'll change the UHCI driver so that doesn't happen -- but for now it does.) This patch will quite likely apply to a 2.4.recent kernel as well as to 2.6.4, although you will have to edit the third line to take out the "/core" element in the pathname. It would be a good idea for you to try running it under 2.4 too, so I can compare the resulting syslogs and see what has changed. Alan Stern ===== devio.c 1.87 vs edited ===== --- 1.87/drivers/usb/core/devio.c Mon Mar 1 06:40:11 2004 +++ edited/drivers/usb/core/devio.c Tue Mar 16 17:06:27 2004 @@ -549,6 +549,9 @@ if (!(tbuf = (unsigned char *)__get_free_page(GFP_KERNEL))) return -ENOMEM; tmo = (ctrl.timeout * HZ + 999) / 1000; + printk(KERN_INFO "usbfs: proc_control: dev %d rqt %x rq %x val %x ind %x len %u\n", + dev->devnum, ctrl.bRequestType, ctrl.bRequest, ctrl.wValue, ctrl.wIndex, + ctrl.wLength); if (ctrl.bRequestType & 0x80) { if (ctrl.wLength && !access_ok(VERIFY_WRITE, ctrl.data, ctrl.wLength)) { free_page((unsigned long)tbuf); ------------------------------------------------------- This SF.Net email is sponsored by: IBM Linux Tutorials Free Linux tutorial presented by Daniel Robbins, President and CEO of GenToo technologies. Learn everything from fundamentals to system administration.http://ads.osdn.com/?ad_id=1470&alloc_id=3638&op=click _______________________________________________ [EMAIL PROTECTED] To unsubscribe, use the last form field at: https://lists.sourceforge.net/lists/listinfo/linux-usb-devel