Re: [PATCH v4] xhci - correct comp_mode_recovery_timer on return from hibernate

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 02/25/2013 05:15 PM, Alan Stern wrote:

Probably because the buses are registered at boot but there aren't
any devices plugged in.  (Or maybe there are devices, but the system
is too busy doing other things during boot to detect them for a
while.) Since the buses are idle, they get suspended.


Then should I continue to pursue relocating calls to init and delete
the compliance mode recovery timer to xhci_bus_suspend/resume?

On Mon, 25 Feb 2013, Tony Camuso wrote:
Furthermore, xhci_bus_suspend is called before xhci_bus_resume, so
an attempt is made to delete the compliance mode recovery timer,
which does not yet exist. This produces a list_add corruption call
trace a number of times during boot.

That doesn't make sense.

You are correct. It's when xhci_bus_resume is called that we get the
list_add corruption.

WARNING: at lib/list_debug.c:33 __list_add+0xbe/0xd0()
Hardware name: HP Z820 Workstation
list_add corruption. prev->next should be next (ffff8801a9199028),
but was           (null). (prev=ffff88032ef22c40).
  :
  :
Call Trace:
 [<ffffffff8105676f>] warn_slowpath_common+0x7f/0xc0
 [<ffffffff81056866>] warn_slowpath_fmt+0x46/0x50
 [<ffffffff81080f07>] ? down_trylock+0x37/0x50
 [<ffffffff8127512e>] __list_add+0xbe/0xd0
 [<ffffffff810663ab>] __internal_add_timer+0x9b/0x110
 [<ffffffff81066441>] internal_add_timer+0x21/0x50
 [<ffffffff81067d4a>] mod_timer+0x10a/0x210
 [<ffffffff81067e68>] add_timer+0x18/0x30
 [<ffffffffa044b547>] compliance_mode_recovery_timer_init+0x77/0xb0 [xhci_hcd]
 [<ffffffff813f6fff>] hcd_bus_resume+0x9f/0x220
 [<ffffffff81406d65>] generic_resume+0x25/0x30
 [<ffffffff813fd764>] usb_resume_both+0x134/0x150
    :
    :
   etc

The timer must be added somewhere other than in xhci_bus_resume;
otherwise it would never get activated in the current xhci-hcd.
Wherever that other place is, it should still be in operation.


Presently, the timer is added in xchi_init() and xhci_resume(). Our problem
emerges when xhci_resume tries to add the timer after it has been restored
by resuming from hibernate.

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux