[PATCH] Fix USB suspend/resume crasher
Rafael J. Wysocki
rjw at sisk.pl
Fri Nov 25 08:14:15 EST 2005
On Thursday, 24 of November 2005 22:01, Benjamin Herrenschmidt wrote:
> > Well, it's there (actually the problem occurs in vanilla 2.6.15-rc2-mm1 that
> > contains the patch). Do you mean it should go before the
> > if (readl(&ehci->regs->configured_flag) != FLAG_CF)
> > goto restart;
> > thing?
> > > It may be worth following it with a memory barrier actually... just in case
> > > (due to the absence of locks in that area).
> > wmb()?
> I wrote that patch against a tree that had different things in that
> function, Greg merged it by hand but he got that little bit wrong
> unfortunately. I'll send a new patch later today.
FWIW, does the appended change look reasonable to you? (It apparently
--- linux-2.6.15-rc2-mm1.orig/drivers/usb/host/ehci-pci.c 2005-11-24 21:42:34.000000000 +0100
+++ linux-2.6.15-rc2-mm1/drivers/usb/host/ehci-pci.c 2005-11-24 21:50:38.000000000 +0100
@@ -281,12 +281,13 @@
if (time_before(jiffies, ehci->next_statechange))
+ set_bit(HCD_FLAG_HW_ACCESSIBLE, &hcd->flags);
/* If CF is clear, we lost PCI Vaux power and need to restart. */
if (readl(&ehci->regs->configured_flag) != FLAG_CF)
- set_bit(HCD_FLAG_HW_ACCESSIBLE, &hcd->flags);
/* If any port is suspended (or owned by the companion),
* we know we can/must resume the HC (and mustn't reset it).
* We just defer that to the root hub code.
More information about the Linuxppc-dev