Re: [PATCH] Fix USB suspend/resume crasher

From: Rafael J. Wysocki
Date: Thu Nov 24 2005 - 16:12:50 EST


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?
>
> Yes.
>
> > > It may be worth following it with a memory barrier actually... just in case
> > > (due to the absence of locks in that area).
> >
> > wmb()?
>
> Yup.
>
> 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.

Thanks.

FWIW, does the appended change look reasonable to you? (It apparently
helps. ;-))

Rafael


Index: linux-2.6.15-rc2-mm1/drivers/usb/host/ehci-pci.c
===================================================================
--- 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))
msleep(100);

+ set_bit(HCD_FLAG_HW_ACCESSIBLE, &hcd->flags);
+ wmb();
+
/* If CF is clear, we lost PCI Vaux power and need to restart. */
if (readl(&ehci->regs->configured_flag) != FLAG_CF)
goto restart;

- 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.
-
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/