On Sun, 20 Sep 2015, Roland Weber wrote:
> Hi Alan, hi all,
>
> in my previous mail, I wrote:
> > With "make menuconfig", I haven't been able to switch off the
> > setting, because CONFIG_PM_SLEEP and something else forces it on
>
> For the records, there are no menu entries for CONFIG_PM_SLEEP
> and CONFIG_HIBERNATE_CALLBACKS. Those are enabled implicitly.
> I had to disable "Linux guest support" within section
> "Processor types and features" to switch off CONFIG_PM.
>
> I've now compiled two 4.2 kernels with extra debug output:
> -f: CONFIG_PM enabled, the kernel freezes on unbind
> -g: CONFIG_PM disabled, the kernel does not freeze
> I also compiled two other 4.2 kernels where I replaced the
> alloc_workqueue with alloc_ordered_workqueue. That undoes
> the change from 3.17 to 3.18 which unearthed the problem.
> However, those two kernels behave no differently from the
> two above. Apparently, there have been other changes since
> 3.18 which also result in the revised order of initialization.
> I don't plan to pursue that legacy route any longer.
>
> I've put ehci_info statements in ehci_suspend and ehci_resume,
> but there's no output from them. See below for details. Next,
> I'll try to remove the usb_enable_autosuspend(hdev) calls.
>
> cheers and thanks,
> Roland
>
> = kernel -f, the one which freezes =
Did you turn off the computer before booting these kernels (i.e., a
"cold" boot) or did you reboot when the machine was already running (a
"warm" boot)?
It may make a difference. I'm beginning to suspect the problem is
caused by the BIOS. Have you checked to see if any BIOS updates are
available?
Here's a significant part of the -f kernel log:
> [ 1.012653] pci 0000:00:02.0: Video device with shadowed ROM
> [ 2.613000] pci 0000:00:1d.0: EHCI: BIOS handoff failed (BIOS bug?)
> 01010001
> [ 2.613126] PCI: CLS 64 bytes, default 64
Here's the corresponding part of the -g kernel log:
> [ 1.017430] pci 0000:00:02.0: Video device with shadowed ROM
> [ 1.017971] PCI: CLS 64 bytes, default 64
See the difference? A similarly relevant difference shows up in the
"registers" file. For the -f kernel:
> /sys/kernel/debug/usb/ehci/0000:00:1d.0/registers now contains:
> bus pci, device 0000:00:1d.0
> EHCI Host Controller
> EHCI 1.00, rh state suspended
> ownership 01000001 linux
and for the -g kernel:
> /sys/kernel/debug/usb/ehci/0000:00:1d.0/registers now contains:
> bus pci, device 0000:00:1d.0
> EHCI Host Controller
> EHCI 1.00, rh state running
> ownership 00000001
The difference in "rh state" is caused by the CONFIG_PM change. But
the difference in the ownership values is a direct consequence of the
BIOS's behavior.
If there is no BIOS update for you to install, or if it still doesn't
work, there are a few other thing you can try. Under a kernel with
CONFIG_PM enabled, before unbinding the driver try doing:
echo on >/sys/bus/pci/devices/0000:00:1d.0/usb3/power/control
That alone might cause the system to freeze, but if it doesn't then
there's a good chance the unbind and shutdown won't either.
Here's another experiment. At the start of ehci_halt(), before the
spin_lock_irq(), add this:
if (ehci->rh_state == EHCI_RH_SUSPENDED) {
ehci_writel(ehci, CMD_RUN, &ehci->regs->command);
msleep(10);
}
This may end up doing about the same thing as the previous test. Let's
see.
Alan Stern
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html