On Tue, Apr 19, 2011 at 4:23 PM, Guennadi Liakhovetski <g.liakhovetski@xxxxxx> wrote: > Seeing a "struct dev_pm_ops" instance with .runtime_suspend(), > .runtime_resume(), and .runtime_idle() methods I understand, that > "suspend" and "resume" are two counterparts, that balance each other. Now > with "idle" I am not sure which method should balance it. With platform > devices in the generic case idle ends up calling > pm_generic_runtime_idle(), which then calls pm_runtime_suspend(). So, > there should be a balancing pm_runtime_resume() somewhere? There are many ways with which the dev_pm_ops handlers get called, but none of them include imbalance. E.g. take a look how pm_runtime_{get,put}_sync balance each other, while involving all three runtime pm handlers that you've specified (suspend/resume/idle). Can you point out an existing device/flow that demonstrates a runtime pm imbalance ? >> More specifically, without having this ->runtime_idle() handler, the >> last user giving up its power usage_count (e.g. by calling >> pm_runtime_put{_sync}) will not end up powering down the MMC card. > > How do they work then? Who does the pm_runtime_resume() to undo the > effects of the pm_runtime_suspend() Let's take SDIO for example; note how sdio_bus_probe and sdio_bus_remove balance each other with respect to runtime PM api invocations. > or is it the platform runtime-pm that is implementing the "idle" method wrongly? I'm not following what's wrong exactly. If you point out specific code and specify exactly the issues you witness, it might be easier to help. Thanks, Ohad. -- To unsubscribe from this list: send the line "unsubscribe linux-mmc" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html