Hi folks,
   Given the potential power savings USB_SUSPEND offers, we'd
like to turn this on in Fedora kernels, however there still
seems to be quite a few devices out there that seem to have issues.
(Notably printers it seems).  For our development kernels, we're
just shipping stuff as-is, so that we can find out about these
devices, but for our release kernels (ie, updates for Fedora 6 & 7),
we came up with the idea of eanbling CONFIG_USB_SUSPEND=y, but
change it so that it defaults to disabled by means of the following
patch..

--- linux-2.6.22.noarch/drivers/usb/core/usb.c~ 2007-07-10 12:18:12.000000000 
-0400
+++ linux-2.6.22.noarch/drivers/usb/core/usb.c  2007-07-10 12:18:20.000000000 
-0400
@@ -52,7 +52,7 @@ static int nousb;     /* Disable USB when bu
 struct workqueue_struct *ksuspend_usb_wq;
 
 #ifdef CONFIG_USB_SUSPEND
-static int usb_autosuspend_delay = 2;          /* Default delay value,
+static int usb_autosuspend_delay = 0;          /* Default delay value,
                                                 * in seconds */
 module_param_named(autosuspend, usb_autosuspend_delay, int, 0644);
 MODULE_PARM_DESC(autosuspend, "default autosuspend delay");

It seemed to have the desired effect of not enabling this feature, but
making it available for those who want to try changing it, but there
seems to be a side-effect that would also appear if someone were
to insmod usb-core with usb_autosuspend_delay=0

During boot I now see several of these traces..
usb 5-1.4: new high speed USB device using ehci_hcd and address 6
usb 5-1.4: configuration #1 chosen from 1 choice
WARNING: at drivers/usb/core/driver.c:1192 usb_autopm_do_device() (Not tainted)

Call Trace:
 [<ffffffff811acf2c>] usb_autopm_do_device+0x6e/0xf1
 [<ffffffff811ad339>] usb_suspend_both+0x212/0x229
 [<ffffffff811acf97>] usb_autopm_do_device+0xd9/0xf1
 [<ffffffff811ac1a6>] usb_set_configuration+0x3fb/0x42e
 [<ffffffff811b359b>] generic_probe+0x1a6/0x1f3
 [<ffffffff81194147>] driver_probe_device+0xff/0x17c
 [<ffffffff811941c4>] __device_attach+0x0/0x5
 [<ffffffff81193386>] bus_for_each_drv+0x40/0x72
 [<ffffffff81194265>] device_attach+0x79/0x90
 [<ffffffff811932f2>] bus_attach_device+0x2a/0x7e
 [<ffffffff81192019>] device_add+0x3cb/0x611
 [<ffffffff811a776e>] usb_new_device+0xab/0xf6
 [<ffffffff811a8462>] hub_thread+0x7f1/0xc0a
 [<ffffffff81050169>] trace_hardirqs_on+0x12f/0x153
 [<ffffffff81257d90>] thread_return+0x88/0x117
 [<ffffffff810465da>] autoremove_wake_function+0x0/0x2e
 [<ffffffff811a7c71>] hub_thread+0x0/0xc0a
 [<ffffffff81046498>] kthread+0x47/0x73
 [<ffffffff8125a14b>] trace_hardirqs_on_thunk+0x35/0x37
 [<ffffffff8100aa28>] child_rip+0xa/0x12
 [<ffffffff8100a13c>] restore_args+0x0/0x30
 [<ffffffff81046321>] kthreadd+0x117/0x13c
 [<ffffffff81046321>] kthreadd+0x117/0x13c
 [<ffffffff81046451>] kthread+0x0/0x73
 [<ffffffff8100aa1e>] child_rip+0x0/0x12

which corresponds to the

        WARN_ON(udev->pm_usage_cnt < 0);

in usb_autopm_do_device()
I'm suspecting logic is underflowing here causing this.
Before I dig deeper, are there other side-effects of changing
this default ?

Thanks,

        Dave

-- 
http://www.codemonkey.org.uk

-------------------------------------------------------------------------
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

Reply via email to