[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <47F3C3C0.5080705@rtr.ca>
Date: Wed, 02 Apr 2008 13:34:56 -0400
From: Mark Lord <lkml@....ca>
To: Alan Stern <stern@...land.harvard.edu>
Cc: David Brownell <david-b@...bell.net>, pavel@...e.cz,
oliver@...kum.org, linux-usb@...r.kernel.org,
linux-kernel@...r.kernel.org, jikos@...e.cz, gregkh@...e.de,
akpm@...ux-foundation.org
Subject: Re: [PATCH] usb ehci_iaa_watchdog fix
Alan Stern wrote:
> On Wed, 2 Apr 2008, Mark Lord wrote:
>
>> Yup, that does indeed cure it.
>> Here's a patch, in case you didn't already generate one:
>>
>> Signed-off-by: Mark Lord <mlord@...ox.com>
>>
>> --- rc8/drivers/usb/host/ehci-hcd.c 2008-03-11 11:18:40.000000000 -0400
>> +++ linux/drivers/usb/host/ehci-hcd.c 2008-04-02 12:16:40.000000000 -0400
>> @@ -289,9 +289,7 @@
>> * (a) SMP races against real IAA firing and retriggering, and
>> * (b) clean HC shutdown, when IAA watchdog was pending.
>> */
>> - if (ehci->reclaim
>> - && !timer_pending(&ehci->iaa_watchdog)
>> - && HC_IS_RUNNING(ehci_to_hcd(ehci)->state)) {
>> + if (ehci->reclaim && !timer_pending(&ehci->iaa_watchdog)) {
>> u32 cmd, status;
>>
>> /* If we get here, IAA is *REALLY* late. It's barely
>
> Okay, I'm puzzled. How could this make any difference?
> ehci_bus_suspend() calls end_unlink_async() anyway, whenever reclaim is
> set.
>
> Is the real problem that it does so before calling ehci_work() instead
> of after calling ehci_halt()?
>
> Mark, if you want to experiment some more, try reverting your patch
> above and moving:
..
Here's what I did, and yes, this also works. Pick one.
This patch, suggested by Alan Stern, fixes the hung USB issues
on my notebook from suspend/resume cycles.
Signed-off-by: Mark Lord <mlord@...ox.com>
--- rc8/drivers/usb/host/ehci-hub.c 2008-03-11 11:18:40.000000000 -0400
+++ linux/drivers/usb/host/ehci-hub.c 2008-04-02 13:28:50.000000000 -0400
@@ -135,8 +135,6 @@
hcd->state = HC_STATE_QUIESCING;
}
ehci->command = ehci_readl(ehci, &ehci->regs->command);
- if (ehci->reclaim)
- end_unlink_async(ehci);
ehci_work(ehci);
/* Unlike other USB host controller types, EHCI doesn't have
@@ -180,6 +178,9 @@
ehci_halt (ehci);
hcd->state = HC_STATE_SUSPENDED;
+ if (ehci->reclaim)
+ end_unlink_async(ehci);
+
/* allow remote wakeup */
mask = INTR_MASK;
if (!device_may_wakeup(&hcd->self.root_hub->dev))
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists