From: "Rafael J. Wysocki" <rjw@rjwysocki.net>
To: Dmitry Torokhov <dtor@google.com>
Cc: Alan Stern <stern@rowland.harvard.edu>,
Bastien Nocera <hadess@hadess.net>,
Patrik Fimml <patrikf@chromium.org>,
linux-pm@vger.kernel.org, Benson Leung <bleung@google.com>,
linux-input@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: Power-managing devices that are not of interest at some point in time
Date: Fri, 18 Jul 2014 02:43:02 +0200 [thread overview]
Message-ID: <8587268.sIIBz6Y2QN@vostro.rjw.lan> (raw)
In-Reply-To: <3088260.XkiUM6Vtxh@dtor-glaptop>
On Thursday, July 17, 2014 09:59:19 AM Dmitry Torokhov wrote:
> On Thursday, July 17, 2014 10:39:16 AM Alan Stern wrote:
> > On Wed, 16 Jul 2014, Dmitry Torokhov wrote:
> > > We are not planning on implementing the policy in kernel, that's
> > > indeed task for userspace; but unless we bring in the heavy hammer of
> > > forcibly unbinding drivers, we do not currently have universal
> > > mechanism of quiescing devices.
> >
> > We sort of do: the ->freeze() callback. But it wasn't intended for
> > this kind of use; drivers may very well expect that userspace will
> > already be frozen when the callback runs. Besides, ->freeze() is
> > supposed to quiesce devices without powering them down, whereas you
> > want to do both.
>
> Right.
>
> >
> > What you're asking for is different from anything the PM subsystem has
> > done before.
>
> Right.
>
> > Given this fact, I don't see any alternatives to adding a
> > new API or repurposing an existing API. Either one would be somewhat
> > painful.
> >
> > For example, we could arrange to invoke ->suspend(). However, since
> > the circumstances would be unusual (userspace is still running,
> > ->prepare() was not called beforehand, ->suspend_irq() won't be called
> > afterward), subsystems and drivers may very well react inappropriately.
>
> I do not think anybody expects that drivers would not have to be modified to
> support this functionality; I expect drivers would have to declare themselves
> "queiscable" and therefore would assert that they will act according to
> whatever rules we set up. I only want to make sure that this new state is
> added to existing list of PM states rather than creating completely new
> facility, so that driver authors have a chance to understand PM state
> transitions that involve their driver.
If you're referring to runtime PM, it doesn't use "states". It uses status
values (you can think of them as metastates) which are "active", "suspended"
or in-transit from one to the other. There's no room for more of these in
the design, I'm afraid.
Moreover, .runtime_suspend() can only be called when the device is quiescent
already. [That also applies to .suspend_late() and .suspend_irq() for
system suspend and the freezing of tasks is requisite for the .prepare() and
.suspend() callbacks (and the corresponding hibernation-related ones).]
>From past discussions on similar topics it followed that there really was
no generic way for individual drivers to quiesce devices on demand as long as
user space was running. Everything we could come up with was racy, this way or
another. That is the reason for using the freezer during system suspend. In
other words, if you want drivers to quiesce devices by force, you need to quiesce
user space by force to start with - for example by freezing it.
For runtime PM, on the other hand, the underlying observation is that drivers
should be able to detect when devices are already quiescent and initialize power
transitions at those points. It's role is to help with that, but not with quiescing
things.
That said, in the "laptop lid closed" scenario (assuming that the system is not
supposed to suspend in response to that, which in my opinion is the best approach)
the problem really seems to be that drivers are not aggressive enough with starting
PM transitions (using runtime PM) when they see no activity. Thus it seems that
when the lid is closed, it'll be good to switch the drivers into a "more aggressive
runtime PM mode" in which they will use any opportunity to start a power transition
without worrying about extra latencies resulting from that. In that mode they
should also disable remote wakeup. I think this should be sufficient to address
the use case at hand.
Rafael
next prev parent reply other threads:[~2014-07-18 0:24 UTC|newest]
Thread overview: 41+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-07-16 1:32 Patrik Fimml
2014-07-16 10:00 ` Bastien Nocera
2014-07-16 14:17 ` Alan Stern
2014-07-16 16:14 ` Dmitry Torokhov
2014-07-16 18:08 ` Alan Stern
2014-07-16 18:55 ` Kevin Cernekee
2014-07-16 21:36 ` Oliver Neukum
2014-07-16 17:12 ` Benson Leung
2014-07-16 23:11 ` Rafael J. Wysocki
2014-07-16 23:13 ` Bastien Nocera
2014-07-16 23:33 ` Rafael J. Wysocki
2014-07-16 23:23 ` Bastien Nocera
2014-07-16 23:31 ` Dmitry Torokhov
2014-07-17 14:39 ` Alan Stern
2014-07-17 16:59 ` Dmitry Torokhov
2014-07-18 0:43 ` Rafael J. Wysocki [this message]
2014-07-18 0:43 ` Dmitry Torokhov
2014-07-18 1:30 ` Rafael J. Wysocki
2014-07-18 1:35 ` Rafael J. Wysocki
2014-07-18 15:19 ` Alan Stern
2014-07-18 17:47 ` Patrik Fimml
2014-07-18 19:00 ` Alan Stern
2014-07-18 19:23 ` Patrik Fimml
2014-07-18 20:09 ` Alan Stern
2014-07-18 21:26 ` Dmitry Torokhov
2014-07-18 21:59 ` Rafael J. Wysocki
2014-07-18 21:45 ` Dmitry Torokhov
2014-07-18 22:19 ` Rafael J. Wysocki
2014-07-18 22:55 ` Rafael J. Wysocki
2014-07-18 23:16 ` Dmitry Torokhov
2014-07-18 23:47 ` Rafael J. Wysocki
2014-07-19 14:51 ` Alan Stern
2014-07-19 15:23 ` Benson Leung
2014-07-19 17:59 ` Alan Stern
2014-07-19 18:21 ` Dmitry Torokhov
2014-07-19 20:19 ` Rafael J. Wysocki
2014-07-21 23:23 ` hadess
2014-07-28 19:58 ` Patrik Fimml
2014-07-28 20:01 ` Patrik Fimml
2014-07-17 6:01 ` Oliver Neukum
2014-07-16 23:17 ` Patrik Fimml
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=8587268.sIIBz6Y2QN@vostro.rjw.lan \
--to=rjw@rjwysocki.net \
--cc=bleung@google.com \
--cc=dtor@google.com \
--cc=hadess@hadess.net \
--cc=linux-input@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pm@vger.kernel.org \
--cc=patrikf@chromium.org \
--cc=stern@rowland.harvard.edu \
/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
all inboxes | Powered by JetHome®