From: "Rafael J. Wysocki" <rjw@rjwysocki.net>
To: Alan Stern <stern@rowland.harvard.edu>
Cc: Linux PM list <linux-pm@vger.kernel.org>,
ACPI Devel Maling List <linux-acpi@vger.kernel.org>,
Aaron Lu <aaron.lu@intel.com>,
Mika Westerberg <mika.westerberg@linux.intel.com>,
Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
Kevin Hilman <khilman@linaro.org>,
Ulf Hansson <ulf.hansson@linaro.org>
Subject: Re: [RFC][PATCH 2/3] PM / sleep: Mechanism to avoid resuming runtime-suspended devices unnecessarily
Date: Tue, 13 May 2014 18:16:53 +0200 [thread overview]
Message-ID: <2673732.vGhgFDMBON@vostro.rjw.lan> (raw)
In-Reply-To: <Pine.LNX.4.44L0.1405131139510.1098-100000@iolanthe.rowland.org>
On Tuesday, May 13, 2014 11:46:55 AM Alan Stern wrote:
> On Tue, 13 May 2014, Rafael J. Wysocki wrote:
>
> > > A wakeup request from the hardware could cause a runtime resume to
> > > occur at this time. The barrier wouldn't prevent that.
> > >
> > > It's unlikely, I agree, but not impossible.
> >
> > Yeah, I didn't think about that.
>
> Come to think of it, if the hardware sends a wakeup request then it
> must have been enabled for remote wakeup. And if the hardware settings
> are appropriate for system suspend then it must be enabled for system
> wakeup. Consequently a wakeup from the hardware ought to abort the
> system suspend in any case. So maybe we don't care about this
> scenario.
>
> On the other hand, there may be other mechanisms that could cause a
> runtime resume at this inconvenient time. A timer routine, for
> instance.
>
> > But that also can occur in __device_suspend(), after we've checked the flag
> > and decided not to invoke the ->suspend() callback, right? So moving the
> > check in there doesn't help much I'd say. It closes the race window, but
> > that's it.
> >
> > That means that the whole approach based on ->prepare() is problematic
> > unless we somehow mix it with disabling runtime PM.
>
> Maybe the call to __pm_runtime_disable() should be moved from
> __device_suspend_late() to __device_suspend(), after the callback has
> been invoked (or skipped, as the case may be). Then after runtime PM
> has been disabled, you can check the device's status has changed and go
> back to invoke the callback if necessary.
We moved __pm_runtime_disable() to __device_suspend_late() to be able to
use pm_runtime_resume() in __device_suspend() (and we actually do that in
some places now).
But, in principle, we can do __pm_runtime_disable() temporarily in some place
between ->prepare() and ->suspend(), it doesn't matter if that's in
device_prepare() in __device_suspend() really. Then, we can check the device's
runtime PM status (that'd need to be done carefully to take the disabling into
account) and
(1) if the device is runtime-suspended, set direct_complete for it without
enabling runtime PM, or
(2) if the device is not runtime-suspended, clear direct_complete for it
and re-enable runtime PM.
and in case of (1) we would re-enable runtime PM in device_complete().
That should work I suppose?
Of course, question is what ->prepare() is supposed to do then if it needs
to check the state of the device before deciding whether or not to return 1.
I guess it would need to disable runtime PM around that check too.
Rafael
next prev parent reply other threads:[~2014-05-13 16:16 UTC|newest]
Thread overview: 46+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-05-13 1:02 [RFC][PATCH 0/3] PM / sleep: Avoid resuming runtime-suspended devices during system suspend Rafael J. Wysocki
2014-05-13 1:03 ` [RFC][PATCH 1/3] PM / sleep: Move runtime PM barrier invocation to device_prepare() Rafael J. Wysocki
2014-05-13 9:16 ` Ulf Hansson
2014-05-13 10:35 ` Rafael J. Wysocki
2014-05-13 10:59 ` Ulf Hansson
2014-05-13 15:07 ` Rafael J. Wysocki
2014-05-13 15:19 ` Rafael J. Wysocki
2014-05-13 1:10 ` [RFC][PATCH 2/3] PM / sleep: Mechanism to avoid resuming runtime-suspended devices unnecessarily Rafael J. Wysocki
2014-05-13 9:30 ` Ulf Hansson
2014-05-13 14:49 ` Alan Stern
2014-05-13 15:13 ` Rafael J. Wysocki
2014-05-13 15:12 ` Alan Stern
2014-05-13 15:43 ` Rafael J. Wysocki
2014-05-13 15:46 ` Alan Stern
2014-05-13 16:16 ` Rafael J. Wysocki [this message]
2014-05-13 16:19 ` Alan Stern
2014-05-13 21:29 ` Rafael J. Wysocki
2014-05-14 14:53 ` Alan Stern
2014-05-15 11:13 ` Rafael J. Wysocki
2014-05-16 0:45 ` [PATCH 0/3] (was: Re: PM / sleep: Mechanism to avoid resuming runtime-suspended devices unnecessarily) Rafael J. Wysocki
2014-05-16 0:46 ` [PATCH 1/3] PM / sleep: Mechanism to avoid resuming runtime-suspended devices unnecessarily Rafael J. Wysocki
2014-05-16 14:27 ` Alan Stern
2014-05-16 21:10 ` Rafael J. Wysocki
2014-05-16 0:47 ` [PATCH 2/3] PM / sleep: Update device PM documentation to cover direct_complete Rafael J. Wysocki
2014-05-16 0:48 ` [PATCH 3/3][Resend] ACPI / PM: Avoid resuming devices in ACPI PM domain during system suspend Rafael J. Wysocki
2014-05-16 22:18 ` [PATCH 3/3][update] " Rafael J. Wysocki
2014-05-15 12:06 ` [RFC][PATCH 2/3] PM / sleep: Mechanism to avoid resuming runtime-suspended devices unnecessarily Ulf Hansson
2014-05-15 12:55 ` Rafael J. Wysocki
2014-05-15 17:35 ` Kevin Hilman
2014-05-14 22:24 ` Jacob Pan
2014-05-15 11:11 ` Rafael J. Wysocki
2014-05-15 13:09 ` Jacob Pan
2014-05-15 14:29 ` Alan Stern
2014-05-15 7:03 ` Jacob Pan
2014-05-15 15:58 ` Alan Stern
2014-05-16 15:20 ` Jacob Pan
2014-05-16 21:08 ` Rafael J. Wysocki
2014-05-19 9:18 ` Jacob Pan
2014-05-19 19:53 ` Alan Stern
2014-05-19 20:13 ` Rafael J. Wysocki
2014-05-19 20:20 ` Rafael J. Wysocki
2014-05-13 1:10 ` [RFC][PATCH 3/3] ACPI / PM: Avoid resuming devices in ACPI PM domain during system suspend Rafael J. Wysocki
2014-05-13 14:45 ` [RFC][PATCH 0/3] PM / sleep: Avoid resuming runtime-suspended devices " Alan Stern
2014-05-13 15:25 ` Rafael J. Wysocki
2014-05-13 15:25 ` Alan Stern
2014-05-13 15:46 ` 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=2673732.vGhgFDMBON@vostro.rjw.lan \
--to=rjw@rjwysocki.net \
--cc=aaron.lu@intel.com \
--cc=khilman@linaro.org \
--cc=linux-acpi@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pm@vger.kernel.org \
--cc=mika.westerberg@linux.intel.com \
--cc=stern@rowland.harvard.edu \
--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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).