2015-08-03 12:39:23

by Fu, Zhonghui

[permalink] [raw]
Subject: [PATCH] mmc: enable mmc host device to suspend/resume asynchronously

Enable mmc host device to suspend/resume asynchronously.
This can improve system suspend/resume speed.

Signed-off-by: Zhonghui Fu <[email protected]>
---
drivers/mmc/core/host.c | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)

diff --git a/drivers/mmc/core/host.c b/drivers/mmc/core/host.c
index 99a9c90..85f2bbb 100644
--- a/drivers/mmc/core/host.c
+++ b/drivers/mmc/core/host.c
@@ -577,6 +577,7 @@ struct mmc_host *mmc_alloc_host(int extra, struct device *dev)
host->class_dev.parent = dev;
host->class_dev.class = &mmc_host_class;
device_initialize(&host->class_dev);
+ device_enable_async_suspend(&host->class_dev);

if (mmc_gpio_alloc(host)) {
put_device(&host->class_dev);
-- 1.7.1


2015-08-17 03:36:24

by Fu, Zhonghui

[permalink] [raw]
Subject: Re: [PATCH] mmc: enable mmc host device to suspend/resume asynchronously


Hi,

Any comments are welcome.


Thanks,
Zhonghui

On 2015/8/3 20:39, Fu, Zhonghui wrote:
> Enable mmc host device to suspend/resume asynchronously.
> This can improve system suspend/resume speed.
>
> Signed-off-by: Zhonghui Fu <[email protected]>
> ---
> drivers/mmc/core/host.c | 1 +
> 1 files changed, 1 insertions(+), 0 deletions(-)
>
> diff --git a/drivers/mmc/core/host.c b/drivers/mmc/core/host.c
> index 99a9c90..85f2bbb 100644
> --- a/drivers/mmc/core/host.c
> +++ b/drivers/mmc/core/host.c
> @@ -577,6 +577,7 @@ struct mmc_host *mmc_alloc_host(int extra, struct device *dev)
> host->class_dev.parent = dev;
> host->class_dev.class = &mmc_host_class;
> device_initialize(&host->class_dev);
> + device_enable_async_suspend(&host->class_dev);
>
> if (mmc_gpio_alloc(host)) {
> put_device(&host->class_dev);
> -- 1.7.1
>

2015-08-17 06:55:14

by Adrian Hunter

[permalink] [raw]
Subject: Re: [PATCH] mmc: enable mmc host device to suspend/resume asynchronously

On 17/08/15 06:36, Fu, Zhonghui wrote:
>
> Hi,
>
> Any comments are welcome.

Same comments as here:

http://marc.info/?l=linux-kernel&m=143979428424353&w=2

>
>
> Thanks,
> Zhonghui
>
> On 2015/8/3 20:39, Fu, Zhonghui wrote:
>> Enable mmc host device to suspend/resume asynchronously.
>> This can improve system suspend/resume speed.
>>
>> Signed-off-by: Zhonghui Fu <[email protected]>
>> ---
>> drivers/mmc/core/host.c | 1 +
>> 1 files changed, 1 insertions(+), 0 deletions(-)
>>
>> diff --git a/drivers/mmc/core/host.c b/drivers/mmc/core/host.c
>> index 99a9c90..85f2bbb 100644
>> --- a/drivers/mmc/core/host.c
>> +++ b/drivers/mmc/core/host.c
>> @@ -577,6 +577,7 @@ struct mmc_host *mmc_alloc_host(int extra, struct device *dev)
>> host->class_dev.parent = dev;
>> host->class_dev.class = &mmc_host_class;
>> device_initialize(&host->class_dev);
>> + device_enable_async_suspend(&host->class_dev);
>>
>> if (mmc_gpio_alloc(host)) {
>> put_device(&host->class_dev);
>> -- 1.7.1
>>
>
>
>

2015-08-24 15:11:08

by Fu, Zhonghui

[permalink] [raw]
Subject: Re: [PATCH] mmc: enable mmc host device to suspend/resume asynchronously



On 2015/8/17 14:52, Adrian Hunter wrote:
> On 17/08/15 06:36, Fu, Zhonghui wrote:
>> Hi,
>>
>> Any comments are welcome.
> Same comments as here:
>
> http://marc.info/?l=linux-kernel&m=143979428424353&w=2

Now, PM core support asynchronous device suspend/resume mode. If one device has been set to support asynchronous PM mode, it's suspend/resume operation can be performed in a separate kernel thread and take advantage of multicore feature to improve overall system suspend/resume speed. The worst case is that all device suspend/resume threads will be scheduled to the same CPU, it hardly occur.

PM core ensure all the suspend/resume dependency related to one device. Actually, async suspend/resume mode is one feature of PM core, every device subsystem may use it or not use it. Once one device subsystem choose to use this feature, its safety is up to PM core as long as device subsystem has initialized fully this device.


Thanks,
Zhonghui


>
>>
>> Thanks,
>> Zhonghui
>>
>> On 2015/8/3 20:39, Fu, Zhonghui wrote:
>>> Enable mmc host device to suspend/resume asynchronously.
>>> This can improve system suspend/resume speed.
>>>
>>> Signed-off-by: Zhonghui Fu <[email protected]>
>>> ---
>>> drivers/mmc/core/host.c | 1 +
>>> 1 files changed, 1 insertions(+), 0 deletions(-)
>>>
>>> diff --git a/drivers/mmc/core/host.c b/drivers/mmc/core/host.c
>>> index 99a9c90..85f2bbb 100644
>>> --- a/drivers/mmc/core/host.c
>>> +++ b/drivers/mmc/core/host.c
>>> @@ -577,6 +577,7 @@ struct mmc_host *mmc_alloc_host(int extra, struct device *dev)
>>> host->class_dev.parent = dev;
>>> host->class_dev.class = &mmc_host_class;
>>> device_initialize(&host->class_dev);
>>> + device_enable_async_suspend(&host->class_dev);
>>>
>>> if (mmc_gpio_alloc(host)) {
>>> put_device(&host->class_dev);
>>> -- 1.7.1
>>>
>>
>>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to [email protected]
> More majordomo info at http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at http://www.tux.org/lkml/

2015-08-27 13:06:04

by Ulf Hansson

[permalink] [raw]
Subject: Re: [PATCH] mmc: enable mmc host device to suspend/resume asynchronously

On 3 August 2015 at 14:39, Fu, Zhonghui <[email protected]> wrote:
> Enable mmc host device to suspend/resume asynchronously.
> This can improve system suspend/resume speed.

Can or will?

It would be nice to see some statistics of this to justify the change.
Can you share that?

Moreover we already have the runtime PM support, which enables the
reinitialization sequence of the mmc/sd card to be postponed from the
system PM resume path. Instead that's done when the next
pm_runtime_get_sync() for the card's device gets called. You my tried
that feature by enabling MMC_CAP_RUNTIME_RESUME for the mmc hosts.

Kind regards
Uffe

>
> Signed-off-by: Zhonghui Fu <[email protected]>
> ---
> drivers/mmc/core/host.c | 1 +
> 1 files changed, 1 insertions(+), 0 deletions(-)
>
> diff --git a/drivers/mmc/core/host.c b/drivers/mmc/core/host.c
> index 99a9c90..85f2bbb 100644
> --- a/drivers/mmc/core/host.c
> +++ b/drivers/mmc/core/host.c
> @@ -577,6 +577,7 @@ struct mmc_host *mmc_alloc_host(int extra, struct device *dev)
> host->class_dev.parent = dev;
> host->class_dev.class = &mmc_host_class;
> device_initialize(&host->class_dev);
> + device_enable_async_suspend(&host->class_dev);
>
> if (mmc_gpio_alloc(host)) {
> put_device(&host->class_dev);
> -- 1.7.1
>