All of lore.kernel.org
 help / color / mirror / Atom feed
From: Stanislaw Gruszka <stanislaw.gruszka@linux.intel.com>
To: "Rafael J. Wysocki" <rjw@rjwysocki.net>
Cc: Linux PM <linux-pm@vger.kernel.org>,
	LKML <linux-kernel@vger.kernel.org>,
	Ulf Hansson <ulf.hansson@linaro.org>
Subject: Re: [PATCH v1 01/12] PM: sleep: Simplify dpm_suspended_list walk in dpm_resume()
Date: Thu, 25 Jan 2024 08:40:33 +0100	[thread overview]
Message-ID: <ZbIQcQBpy3Y8lWdH@linux.intel.com> (raw)
In-Reply-To: <4553341.LvFx2qVVIh@kreacher>

On Mon, Jan 22, 2024 at 12:22:38PM +0100, Rafael J. Wysocki wrote:
> From: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
> 
> Notice that devices can be moved to dpm_prepared_list before running
> their resume callbacks, in analogy with dpm_noirq_resume_devices() and
> dpm_resume_early(), because doing so will not affect the final ordering
> of that list.
> 
> Namely, if a device is the first dpm_suspended_list entry while
> dpm_list_mtx is held, it has not been removed so far and it cannot be
> removed until dpm_list_mtx is released, so moving it to dpm_prepared_list
> at that point is valid.  If it is removed later, while its resume
> callback is running, it will be deleted from dpm_prepared_list without
> changing the ordering of the other devices in that list.
> 
> Accordingly, rearrange the while () loop in dpm_resume() to move
> devices to dpm_prepared_list before running their resume callbacks and
> implify the locking and device reference counting in it.
> 
> No intentional functional impact.
> 
> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Reviewed-by: Stanislaw Gruszka <stanislaw.gruszka@linux.intel.com>

> ---
>  drivers/base/power/main.c |   16 +++++-----------
>  1 file changed, 5 insertions(+), 11 deletions(-)
> 
> Index: linux-pm/drivers/base/power/main.c
> ===================================================================
> --- linux-pm.orig/drivers/base/power/main.c
> +++ linux-pm/drivers/base/power/main.c
> @@ -1017,25 +1017,19 @@ void dpm_resume(pm_message_t state)
>  
>  	while (!list_empty(&dpm_suspended_list)) {
>  		dev = to_device(dpm_suspended_list.next);
> -
> -		get_device(dev);
> +		list_move_tail(&dev->power.entry, &dpm_prepared_list);
>  
>  		if (!dev->power.async_in_progress) {
> +			get_device(dev);
> +
>  			mutex_unlock(&dpm_list_mtx);
>  
>  			device_resume(dev, state, false);
>  
> +			put_device(dev);
> +
>  			mutex_lock(&dpm_list_mtx);
>  		}
> -
> -		if (!list_empty(&dev->power.entry))
> -			list_move_tail(&dev->power.entry, &dpm_prepared_list);
> -
> -		mutex_unlock(&dpm_list_mtx);
> -
> -		put_device(dev);
> -
> -		mutex_lock(&dpm_list_mtx);
>  	}
>  	mutex_unlock(&dpm_list_mtx);
>  	async_synchronize_full();
> 
> 
> 

  reply	other threads:[~2024-01-25  7:40 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-01-22 11:13 [PATCH v1 00/12] PM: sleep: Fix up suspend stats handling and clean up core code Rafael J. Wysocki
2024-01-22 11:22 ` [PATCH v1 01/12] PM: sleep: Simplify dpm_suspended_list walk in dpm_resume() Rafael J. Wysocki
2024-01-25  7:40   ` Stanislaw Gruszka [this message]
2024-01-22 11:24 ` [PATCH v1 02/12] PM: sleep: Relocate two device PM core functions Rafael J. Wysocki
2024-01-25  7:40   ` Stanislaw Gruszka
2024-01-22 11:25 ` [PATCH v1 03/12] PM: sleep: stats: Use array of suspend step names Rafael J. Wysocki
2024-01-25  7:41   ` Stanislaw Gruszka
2024-01-22 11:27 ` [PATCH v1 04/12] PM: sleep: stats: Use an array of step failure counters Rafael J. Wysocki
2024-01-25  7:42   ` Stanislaw Gruszka
2024-01-22 11:29 ` [PATCH v1 05/12] PM: sleep: stats: Use step_failures[0] as a counter of successful cycles Rafael J. Wysocki
2024-01-25  7:52   ` Stanislaw Gruszka
2024-01-25 15:11     ` Rafael J. Wysocki
2024-01-25 17:28       ` Stanislaw Gruszka
2024-01-22 11:31 ` [PATCH v1 06/12] PM: sleep: stats: Define suspend_stats next to the code using it Rafael J. Wysocki
2024-01-25  7:53   ` Stanislaw Gruszka
2024-01-22 11:32 ` [PATCH v1 07/12] PM: sleep: stats: Call dpm_save_failed_step() at most once per phase Rafael J. Wysocki
2024-01-22 11:33 ` [PATCH v1 08/12] PM: sleep: stats: Use locking in dpm_save_failed_dev() Rafael J. Wysocki
2024-01-25  7:59   ` Stanislaw Gruszka
2024-01-22 11:35 ` [PATCH v1 09/12] PM: sleep: stats: Log errors right after running suspend callbacks Rafael J. Wysocki
2024-01-22 11:39 ` [PATCH v1 10/12] PM: sleep: Move some assignments from under a lock Rafael J. Wysocki
2024-01-22 11:42 ` [PATCH v1 11/12] PM: sleep: Move devices to new lists earlier in each suspend phase Rafael J. Wysocki
2024-01-25  8:00   ` Stanislaw Gruszka
2024-01-22 11:44 ` [PATCH v1 12/12] PM: sleep: Call dpm_async_fn() directly " Rafael J. Wysocki

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=ZbIQcQBpy3Y8lWdH@linux.intel.com \
    --to=stanislaw.gruszka@linux.intel.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pm@vger.kernel.org \
    --cc=rjw@rjwysocki.net \
    --cc=ulf.hansson@linaro.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.