On Thu, 3 Jun 2010, Maxim Levitsky wrote: > On Wed, 2010-06-02 at 21:51 -0400, Alan Stern wrote: > > On Thu, 3 Jun 2010, Maxim Levitsky wrote: > > > > > I have a card reader on which one function implements SDHCI and other > > > MMC (to workaround windows bug....) > > > > > > There is a way to disable MMC function, but is causes the device > > > sometimes to die on resume from disk/ram. > > > > > > I today was told that MMC function is in fact _almost_ standard SDHCI > > > controller, and in fact now sdhci binds to it and works just fine. > > > > > > However since both devices share same hardware they appear to have need > > > to be resumed one after another, and definitely not in parallel. > > > I tried to use device_disable_async_suspend on both pci devices and > > > indeed both power/async turns to false. > > > > > > But they are still resumed in parallel: > > > (look how well mmc0 and mmc1 interleave...) > > > Why? > > > > My guess is that you shouldn't have disabled async suspend on the PCI > > devices but on their children instead. That is, the PCI devices are > > 0000:07:00.1 and 0000:07:00.2, but the devices causing your problem are > > mmc0 and mmc1. Or maybe you'd prefer to disable async suspend on all > > four devices. > Nope, all childeren of both pci device has 'async' disabled. > Just checked that. The mmc drivers probably do part of their work in a separate thread (a workqueue). But I'm not acquainted with those drivers and I don't know for certain. You could get a clearer idea by putting printk statements at the beginning and end of the resume routines. And a dump_stack() would tell you for certain whether the routine was invoked asynchronously. Alan Stern _______________________________________________ linux-pm mailing list linux-pm@xxxxxxxxxxxxxxxxxxxxxxxxxx https://lists.linux-foundation.org/mailman/listinfo/linux-pm