mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
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 03:35:58 +0200	[thread overview]
Message-ID: <15990629.Z6g24UroS8@vostro.rjw.lan> (raw)
In-Reply-To: <2674541.jV2qHCZlHf@vostro.rjw.lan>

On Friday, July 18, 2014 03:30:31 AM Rafael J. Wysocki wrote:
> On Thursday, July 17, 2014 05:43:42 PM Dmitry Torokhov wrote:
> > On Friday, July 18, 2014 02:43:02 AM Rafael J. Wysocki wrote:
> > > 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)
> > 
> > This is default approach that works for many, but not necessarily all  use 
> > cases. I believe docked with lid closed scenario was mentioned already.
> > 
> > > 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.
> > 
> > OK, so how do we let the drivers know that they should start being aggressive 
> > with PM and that they should disable remote wakeup? I'd rather not add 
> > subsystem-specific interface for this, that is why we are reaching out in the 
> > first place.
> 
> For disabling remote wakeup we have a PM QoS flag that I'm not entirely happy
> with, so I guess we can replace it with something saner (I talked about that
> with Alan during the last year's LinuxCon, but then didn't have the time to
> get to that).
> 
> For the whole thing I guess we can add a sysfs attribute under devices/.../power
> that will need to be exposed by drivers supporting that feature.  I'm not sure
> how to call it, though.

Or we could add an "aggressive" value to the devices/.../power/control attribute,
but then it will be difficult for user space to verify whether or not it is
supported for the given device.

Rafael


  reply	other threads:[~2014-07-18  1:17 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
2014-07-18  0:43                 ` Dmitry Torokhov
2014-07-18  1:30                   ` Rafael J. Wysocki
2014-07-18  1:35                     ` Rafael J. Wysocki [this message]
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=15990629.Z6g24UroS8@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®