All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Rafael J. Wysocki" <rafael@kernel.org>
To: Ulf Hansson <ulf.hansson@linaro.org>
Cc: "Rafael J. Wysocki" <rjw@rjwysocki.net>,
	Linux PM <linux-pm@vger.kernel.org>,
	"elaine.zhang" <zhangqing@rock-chips.com>,
	LKML <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH v1 2/2] PM: runtime: Defer suspending suppliers
Date: Fri, 19 Mar 2021 14:48:17 +0100	[thread overview]
Message-ID: <CAJZ5v0hVCiseoytOoNpt-9OWFt9xwHE_xfOHcWx3V_vYSrK8=A@mail.gmail.com> (raw)
In-Reply-To: <CAPDyKFpK46raH4DqmTjYm1a1sQtss3BEM3BfVGYsYvNThj1b-g@mail.gmail.com>

On Fri, Mar 19, 2021 at 2:30 PM Ulf Hansson <ulf.hansson@linaro.org> wrote:
>
> On Thu, 18 Mar 2021 at 19:15, Rafael J. Wysocki <rjw@rjwysocki.net> wrote:
> >
> > From: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
> >
> > Because the PM-runtime status of the device is not updated in
> > __rpm_callback(), attempts to suspend the suppliers of the given
> > device triggered by the rpm_put_suppliers() call in there may fail.
> >
> > To fix this (1) modify __rpm_callback() to avoid attempting to
> > actually suspend the suppliers, but only decrease their PM-runtime
> > usage counters and (2) make rpm_suspend() try to suspend the suppliers
> > after changing the device's PM-runtime status, in analogy with the
> > handling of the device's parent.
> >
> > Link: https://lore.kernel.org/linux-pm/CAPDyKFqm06KDw_p8WXsM4dijDbho4bb6T4k50UqqvR1_COsp8g@mail.gmail.com/
> > Fixes: 21d5c57b3726 ("PM / runtime: Use device links")
> > Reported-by: elaine.zhang <zhangqing@rock-chips.com>
> > Diagnosed-by: Ulf Hansson <ulf.hansson@linaro.org>
> > Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
>
> Just a minor nitpick, see below. In any case:
>
> Reviewed-by: Ulf Hansson <ulf.hansson@linaro.org>

Thanks!

>
> > ---
> >  drivers/base/power/runtime.c |   45 +++++++++++++++++++++++++++++++++++++------
> >  1 file changed, 39 insertions(+), 6 deletions(-)
> >
> > Index: linux-pm/drivers/base/power/runtime.c
> > ===================================================================
> > --- linux-pm.orig/drivers/base/power/runtime.c
> > +++ linux-pm/drivers/base/power/runtime.c
> > @@ -305,7 +305,7 @@ static int rpm_get_suppliers(struct devi
> >         return 0;
> >  }
> >
> > -static void rpm_put_suppliers(struct device *dev)
> > +static void __rpm_put_suppliers(struct device *dev, bool try_to_suspend)
> >  {
> >         struct device_link *link;
> >
> > @@ -313,10 +313,30 @@ static void rpm_put_suppliers(struct dev
> >                                 device_links_read_lock_held()) {
> >
> >                 while (refcount_dec_not_one(&link->rpm_active))
> > -                       pm_runtime_put(link->supplier);
> > +                       pm_runtime_put_noidle(link->supplier);
> > +
> > +               if (try_to_suspend)
> > +                       pm_request_idle(link->supplier);
> >         }
> >  }
> >
> > +static void rpm_put_suppliers(struct device *dev)
> > +{
> > +       __rpm_put_suppliers(dev, true);
> > +}
> > +
> > +static void rpm_try_to_suspend_suppliers(struct device *dev)
>
> Maybe "rpm_suspend_suppliers" is sufficient for the name of the
> function, but I have no strong opinion.

OK

In addition to this, spin_unlock_irq()/spin_lock_irq() need to be used
around the call to it in rpm_suspend(), so I'll send a v2.  I guess
that the R-by still applies, though. :-)

> > +{
> > +       struct device_link *link;
> > +       int idx = device_links_read_lock();
> > +
> > +       list_for_each_entry_rcu(link, &dev->links.suppliers, c_node,
> > +                               device_links_read_lock_held())
> > +               pm_request_idle(link->supplier);
> > +
> > +       device_links_read_unlock(idx);
> > +}
> > +

  reply	other threads:[~2021-03-19 13:49 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-03-18 18:06 [PATCH v1 0/2] PM: runtime: Update device status before letting suppliers suspend (another take) Rafael J. Wysocki
2021-03-18 18:09 ` [PATCH v1 1/2] Revert "PM: runtime: Update device status before letting suppliers suspend" Rafael J. Wysocki
2021-03-19 13:29   ` Ulf Hansson
2021-03-19 13:43     ` Rafael J. Wysocki
2021-03-18 18:15 ` [PATCH v1 2/2] PM: runtime: Defer suspending suppliers Rafael J. Wysocki
2021-03-19 13:29   ` Ulf Hansson
2021-03-19 13:48     ` Rafael J. Wysocki [this message]
2021-03-19 14:42 ` [PATCH v2 0/2] PM: runtime: Update device status before letting suppliers suspend (another take) Rafael J. Wysocki
2021-03-19 14:47   ` [PATCH v2 1/2] Revert "PM: runtime: Update device status before letting suppliers suspend" Rafael J. Wysocki
2021-03-19 14:47   ` [PATCH v2 2/2] PM: runtime: Defer suspending suppliers 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='CAJZ5v0hVCiseoytOoNpt-9OWFt9xwHE_xfOHcWx3V_vYSrK8=A@mail.gmail.com' \
    --to=rafael@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pm@vger.kernel.org \
    --cc=rjw@rjwysocki.net \
    --cc=ulf.hansson@linaro.org \
    --cc=zhangqing@rock-chips.com \
    /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.