All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] mmc: enable mmc host device to suspend/resume asynchronously
@ 2015-08-03 12:39 Fu, Zhonghui
  2015-08-17  3:36 ` Fu, Zhonghui
  2015-08-27 13:05 ` Ulf Hansson
  0 siblings, 2 replies; 6+ messages in thread
From: Fu, Zhonghui @ 2015-08-03 12:39 UTC (permalink / raw)
  To: Ulf Hansson, Adrian Hunter, linus.walleij, Markus.Niebel, lars,
	s.hauer, kristina.martsenko
  Cc: linux-mmc, linux-kernel

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

Signed-off-by: Zhonghui Fu <zhonghui.fu@linux.intel.com>
---
 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


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH] mmc: enable mmc host device to suspend/resume asynchronously
  2015-08-03 12:39 [PATCH] mmc: enable mmc host device to suspend/resume asynchronously Fu, Zhonghui
@ 2015-08-17  3:36 ` Fu, Zhonghui
  2015-08-17  6:52   ` Adrian Hunter
  2015-08-27 13:05 ` Ulf Hansson
  1 sibling, 1 reply; 6+ messages in thread
From: Fu, Zhonghui @ 2015-08-17  3:36 UTC (permalink / raw)
  To: Ulf Hansson, Adrian Hunter, linus.walleij, Markus.Niebel, lars,
	s.hauer, kristina.martsenko
  Cc: linux-mmc, linux-kernel


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 <zhonghui.fu@linux.intel.com>
> ---
>  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
>


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] mmc: enable mmc host device to suspend/resume asynchronously
  2015-08-17  3:36 ` Fu, Zhonghui
@ 2015-08-17  6:52   ` Adrian Hunter
  2015-08-24 15:11     ` Fu, Zhonghui
  0 siblings, 1 reply; 6+ messages in thread
From: Adrian Hunter @ 2015-08-17  6:52 UTC (permalink / raw)
  To: Fu, Zhonghui
  Cc: Ulf Hansson, linus.walleij, Markus.Niebel, lars, s.hauer,
	kristina.martsenko, linux-mmc, linux-kernel

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 <zhonghui.fu@linux.intel.com>
>> ---
>>  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
>>
> 
> 
> 


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] mmc: enable mmc host device to suspend/resume asynchronously
  2015-08-17  6:52   ` Adrian Hunter
@ 2015-08-24 15:11     ` Fu, Zhonghui
  0 siblings, 0 replies; 6+ messages in thread
From: Fu, Zhonghui @ 2015-08-24 15:11 UTC (permalink / raw)
  To: Adrian Hunter
  Cc: Ulf Hansson, linus.walleij, Markus.Niebel, lars, s.hauer,
	kristina.martsenko, linux-mmc, linux-kernel



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 <zhonghui.fu@linux.intel.com>
>>> ---
>>>  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 majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at  http://www.tux.org/lkml/


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] mmc: enable mmc host device to suspend/resume asynchronously
  2015-08-03 12:39 [PATCH] mmc: enable mmc host device to suspend/resume asynchronously Fu, Zhonghui
  2015-08-17  3:36 ` Fu, Zhonghui
@ 2015-08-27 13:05 ` Ulf Hansson
  2015-09-21  6:27   ` Fu, Zhonghui
  1 sibling, 1 reply; 6+ messages in thread
From: Ulf Hansson @ 2015-08-27 13:05 UTC (permalink / raw)
  To: Fu, Zhonghui
  Cc: Adrian Hunter, Linus Walleij, Markus Niebel, Lars-Peter Clausen,
	Sascha Hauer, Kristina Martšenko, linux-mmc, linux-kernel

On 3 August 2015 at 14:39, Fu, Zhonghui <zhonghui.fu@linux.intel.com> 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 <zhonghui.fu@linux.intel.com>
> ---
>  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
>

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] mmc: enable mmc host device to suspend/resume asynchronously
  2015-08-27 13:05 ` Ulf Hansson
@ 2015-09-21  6:27   ` Fu, Zhonghui
  0 siblings, 0 replies; 6+ messages in thread
From: Fu, Zhonghui @ 2015-09-21  6:27 UTC (permalink / raw)
  To: Ulf Hansson
  Cc: Adrian Hunter, Linus Walleij, Markus Niebel, Lars-Peter Clausen,
	Sascha Hauer, Kristina Martšenko, linux-mmc, linux-kernel



On 2015/8/27 21:05, Ulf Hansson wrote:
> On 3 August 2015 at 14:39, Fu, Zhonghui <zhonghui.fu@linux.intel.com> 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.
This "will" improve system suspend/resume speed. I have resent this patch with updated commit message - "[PATCH v2] mmc: enable mmc host device to suspend/resume asynchronously".

The original suspend time is 1645ms and resume time is 940ms on ASUS T100TA machine. After enabling "wiphy device", "SDIO device", "mmc host" and "sdhci-acpi device" to suspend/resume asynchronously, the suspend time is 1096ms and resume time is 908ms. The test environment is listed as follows:

OS: Ubuntu 14.04
Kernel: mainline v4.1
Machine: ASUS T100TA(Baytrail-T platform)
Tool: analyze_suspend
“analyze_suspend.py –f –m freeze” to suspend system
Press power button to resume system

System PM is independent from runtime PM. 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 mmc host device to suspend/resume asynchronously. This will take advantage of multicore and improve system suspend/resume speed.


Thanks,
Zhonghui
> Kind regards
> Uffe
>
>> Signed-off-by: Zhonghui Fu <zhonghui.fu@linux.intel.com>
>> ---
>>  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 majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at  http://www.tux.org/lkml/


^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2015-09-21  6:27 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-08-03 12:39 [PATCH] mmc: enable mmc host device to suspend/resume asynchronously Fu, Zhonghui
2015-08-17  3:36 ` Fu, Zhonghui
2015-08-17  6:52   ` Adrian Hunter
2015-08-24 15:11     ` Fu, Zhonghui
2015-08-27 13:05 ` Ulf Hansson
2015-09-21  6:27   ` Fu, Zhonghui

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.