Re: 2.6.25-rc7: Ugh.

From: Mark Lord
Date: Mon Mar 31 2008 - 13:30:59 EST


Mark Lord wrote:
Mark Lord wrote:
Mark Lord wrote:
Oliver Neukum wrote:
Am Montag, 31. MÃrz 2008 17:04:46 schrieb Mark Lord:
Oliver Neukum wrote:
Am Montag, 31. MÃrz 2008 16:39:33 schrieb Mark Lord:
..
Still want USB_SUSPEND=n ? Please explain.
It looks like you are hanging in the kthread for autosuspending.
Compiling that out should confirm it.
..

Okay, and once we see that it works fine: then what?

We'll combine that information with the result of only removing usbhid
and arrive at a pretty good idea where in the kernel the hang occurs.
There are only two functions that touch autosuspend in the usbhid code.
So if it works with usbhid unloaded, either of them should be to blame.
..
It does still hang with *usbhid* unloaded,
but not if all USB stuff is unloaded.
..

And it does *not* hang with # CONFIG_USB_SUSPEND is not set.

I have figured out a way to make this much more reproducible now:
When suspended, the notebook does not supply +5V over USB.
But with a voltmeter, I discovered that there is sufficient capacitance
on the USB +5V, that it takes many minutes for the voltage to decay
from 5.1V down to near 0V.

Resuming while the voltage is still relatively high, generally works.
Resuming after the voltage drops to near zero, always fails (with USB modules loaded).

So I've put a 2Kohm resistor across the USB +5V lines,
forcing it to decay to zero within about 5 seconds.
This helps a lot for debugging here.

It probably also provides a vital clue as to what is wrong.
Resume seems to generally work when the USB devices maintain
some amount of standby power, and always fails when they don't.
..

Note that it makes no difference whether I unplug all external USB devices
prior to suspend or not. The failure patterns remain the same.
..

I've now removed the internal USB-Bluetooth adaptor, so we can now test
without any USB devices connected.

Suspend without any USB devices plugged-in, and it *always* resumes fine
with working USB, even when the USB stuff is plugged in before hitting
the resume button.

But suspend *with* any USB device plugged-in, and it *always* fails resume,
even when the USB device is unplugged before hitting the resume button.

Conclusion: the bug is in the usb SUSPEND code, not the RESUME code.
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/