On 11/17/2015 9:48 PM, Fu, Zhonghui wrote: > > On 11/16/2015 7:30 PM, Ulf Hansson wrote: >> On 15 November 2015 at 14:53, Fu, Zhonghui <zhonghui...@linux.intel.com> >> wrote: >>> Now, PM core supports asynchronous suspend/resume mode for devices >>> during system suspend/resume, and the power state transition of one >>> device may be completed in separate kernel thread. PM core ensures >>> all power state transition timing dependency between devices. This >>> patch enables SDIO card and function devices to suspend/resume >>> asynchronously. This will take advantage of multicore and improve >>> system suspend/resume speed. After enabling the SDIO devices and all >>> their child devices to suspend/resume asynchronously on ASUS T100TA, >>> the system suspend-to-idle time is reduced from 1645ms to 1119ms, and >>> the system resume time is reduced from 940ms to 918ms. >>> >>> Signed-off-by: Zhonghui Fu <zhonghui...@linux.intel.com> >> I think this is an interesting change, but I wonder if you really >> understand how this affects the order of how devices may be >> suspended/resumed? >> >> Also, I believe you didn't answer my question for the earlier version >> of the patch, so let me try again. >> >> There are a strict dependency chain when suspending/resuming devices >> that must be maintained. Currently this is controlled via device >> registration/probe order. >> >> An SDIO func driver/device must always be suspended *before* the SDIO >> card device. Additionally the corresponding MMC host, must be >> suspended after the SDIO card device. Vice verse applies to the resume >> sequence. >> >> As this patch enables asynchronous suspend, I am worried that it will >> break this dependency chain. What do you think? > After enabling asynchronous suspend/resume, PM core still ensures the strict > suspend/resume dependency between child and parent devices - child must be > suspended before its parent, and parent must be resumed before its child. > SDIO function is child of SDIO card, and SDIO card is child of MMC host, and > MMC host is child of MMC controller. So the dependency chain is not broken. > Actually, many devices have been using asynchronous suspend/resume mode now.
Any comments are welcome. Thanks, Zhonghui > > Thanks, > Zhonghui >> Kind regards >> Ulf Hansson >> >>> --- >>> Changes in v3: >>> - Add test result in commit message >>> >>> drivers/mmc/core/sdio.c | 4 ++++ >>> 1 files changed, 4 insertions(+), 0 deletions(-) >>> >>> diff --git a/drivers/mmc/core/sdio.c b/drivers/mmc/core/sdio.c >>> index 16d838e..530ce88 100644 >>> --- a/drivers/mmc/core/sdio.c >>> +++ b/drivers/mmc/core/sdio.c >>> @@ -1113,6 +1113,8 @@ int mmc_attach_sdio(struct mmc_host *host) >>> pm_runtime_enable(&card->dev); >>> } >>> >>> + device_enable_async_suspend(&card->dev); >>> + >>> /* >>> * The number of functions on the card is encoded inside >>> * the ocr. >>> @@ -1133,6 +1135,8 @@ int mmc_attach_sdio(struct mmc_host *host) >>> */ >>> if (host->caps & MMC_CAP_POWER_OFF_CARD) >>> pm_runtime_enable(&card->sdio_func[i]->dev); >>> + >>> + device_enable_async_suspend(&card->sdio_func[i]->dev); >>> } >>> >>> /* >>> -- 1.7.1 >>> -- To unsubscribe from this list: send the line "unsubscribe linux-mmc" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html