On Fri, 15 Apr 2011, Guennadi Liakhovetski wrote: > On Fri, 15 Apr 2011, Alan Stern wrote: > > > On Fri, 15 Apr 2011, Guennadi Liakhovetski wrote: > > > > > Restore the initial RPM_SUSPENDED runtime pm status, when disabling, > > > otherwise the following enable will not function. This happens, e.g., > > > when unloading and reloading drivers. ... > > This certainly doesn't look right. Can you explain in more detail the > > problem you are trying to solve? > > Yes, I can. On the first loading of an MMC driver, which does the standard > > pm_runtime_enable(&pdev->dev); > ret = pm_runtime_resume(&pdev->dev); > > in .probe() and > > pm_runtime_disable(&pdev->dev); > > in .release() (see [1]), with an inserted card, on the first modprobe I > see a full pm-runtime run down to platform_pm_runtime_resume() and to > platform_pm_runtime_suspend() on rmmod. On a repeated modprobe > platform_pm_runtime_resume() does not get called, because > dev->power.runtime_status != RPM_SUSPENDED, instead, it is still > RPM_ACTIVE, so, rpm_resume() exits prematurily. I see. And is it true that you really do want to set the status to RPM_SUSPENDED without touching the hardware, i.e., without disabling any clocks or gating any power supplies? If so, then your release routine should simply do pm_set_suspended(&pdev->dev); after calling pm_runtime_disable(). There's no need to modify the runtime PM core. Alan Stern _______________________________________________ linux-pm mailing list linux-pm@xxxxxxxxxxxxxxxxxxxxxxxxxx https://lists.linux-foundation.org/mailman/listinfo/linux-pm