Pavlik, Below is a trivial but very important bug fix. I suspect that bug _might_ be the reason why the BTC keyboard would cause hangs with any host-controller, not just the OHCI HCD (which, as I reported today, had another bug which caused machines to hang or crash). What happens is that the BTC has some INPUT reports with no fields. Not sure why this is so, but it definitely caused hidinput_connect() go get stuck in an infinite loop because it failed to advance the "list" pointer...
FYI, here is the dump of the relevant reports: INPUT(1)[INPUT] INPUT(2)[INPUT] Field(0) Usage(3) GenericDesktop.0081 GenericDesktop.0082 GenericDesktop.0083 Logical Minimum(0) Logical Maximum(1) Report Size(1) Report Count(3) Report Offset(0) Flags( Variable Relative ) INPUT(3)[INPUT] So it looks like the interface for the System Power Down (81), Sleep (82), and Wake Up (83) usages has two extra report id's which aren't really used and that then triggered the infinite loop. If the patch looks fine, I'd appreciate it if you could forward it to Linus urgently so it can make it into 2.6.4. Thanks, --david ===== drivers/usb/input/hid-input.c 1.22 vs edited ===== --- 1.22/drivers/usb/input/hid-input.c Wed Jan 21 00:29:52 2004 +++ edited/drivers/usb/input/hid-input.c Tue Mar 9 21:21:11 2004 @@ -567,8 +567,10 @@ while (list != &report_enum->report_list) { report = (struct hid_report *) list; - if (!report->maxfield) + if (!report->maxfield) { + list = list->next; continue; + } if (!hidinput) { hidinput = kmalloc(sizeof(*hidinput), GFP_KERNEL); ------------------------------------------------------- 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