On Mon, 16 Jul 2007, Dave Jones wrote: > > > in usb_autopm_do_device() > > > I'm suspecting logic is underflowing here causing this. > > > > Yes, that's what it means. I'm puzzled as to how this could occur; let > > me try some tests. What types of devices give rise to these warnings? > > On the machine I tried it on, there's nothing really exotic.. > lsusb shows.. > Bus 005 Device 054: ID 0781:5150 SanDisk Corp. SDCZ2 Cruzer Mini Flash Drive > (thin) > Bus 005 Device 002: ID 050d:0234 Belkin Components F5U234 USB 2.0 4-Port Hub > Bus 005 Device 001: ID 0000:0000 > Bus 004 Device 003: ID 0aec:3050 Neodio Technologies Corp. ND3050 8-in-1 Card > Reader > Bus 004 Device 001: ID 0000:0000 > Bus 003 Device 001: ID 0000:0000 > Bus 002 Device 004: ID 04a9:1097 Canon, Inc. > Bus 002 Device 003: ID 045e:0053 Microsoft Corp. > Bus 002 Device 001: ID 0000:0000 > Bus 001 Device 001: ID 0000:0000 > > so, usb memory stick, hub, card reader, printer, mouse. > > The 28 warnings in my dmesg are all preceded by.. > usb 5-1.4: new high speed USB device using ehci_hcd and address 51 > usb 5-1.4: configuration #1 chosen from 1 choice > > I'm not sure how that 5-1.4 relates to the above map. > > oh, there's one other case, where it prints the same thing for usb 4-2:
All right, it turns out there really is a minor bug that shows up only with the autosuspend delay set to 0. The patch below fixes it (should you happen to care). Alan Stern Index: 2.6.22/drivers/usb/core/hub.c =================================================================== --- 2.6.22.orig/drivers/usb/core/hub.c +++ 2.6.22/drivers/usb/core/hub.c @@ -1388,6 +1388,10 @@ int usb_new_device(struct usb_device *ud udev->dev.devt = MKDEV(USB_DEVICE_MAJOR, (((udev->bus->busnum-1) * 128) + (udev->devnum-1))); + /* Increment the parent's count of unsuspended children */ + if (udev->parent) + usb_autoresume_device(udev->parent); + /* Register the device. The device driver is responsible * for adding the device files to sysfs and for configuring * the device. @@ -1395,13 +1399,11 @@ int usb_new_device(struct usb_device *ud err = device_add(&udev->dev); if (err) { dev_err(&udev->dev, "can't device_add, error %d\n", err); + if (udev->parent) + usb_autosuspend_device(udev->parent); goto fail; } - /* Increment the parent's count of unsuspended children */ - if (udev->parent) - usb_autoresume_device(udev->parent); - exit: return err; ------------------------------------------------------------------------- This SF.net email is sponsored by DB2 Express Download DB2 Express C - the FREE version of DB2 express and take control of your XML. No limits. Just data. Click to get it now. http://sourceforge.net/powerbar/db2/ _______________________________________________ linux-usb-devel@lists.sourceforge.net To unsubscribe, use the last form field at: https://lists.sourceforge.net/lists/listinfo/linux-usb-devel