linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Benjamin Herrenschmidt <benh@kernel.crashing.org>
To: David Brownell <david-b@pacbell.net>
Cc: Linus Torvalds <torvalds@osdl.org>,
	Linux Kernel list <linux-kernel@vger.kernel.org>,
	Andrew Morton <akpm@osdl.org>, Pavel Machek <pavel@ucw.cz>,
	Paul Mackerras <paulus@samba.org>
Subject: Re: Totally broken PCI PM calls
Date: Tue, 12 Oct 2004 08:22:44 +1000	[thread overview]
Message-ID: <1097533363.13795.22.camel@gaston> (raw)
In-Reply-To: <200410110915.33331.david-b@pacbell.net>

On Tue, 2004-10-12 at 02:15, David Brownell wrote:

> In USB-land, we've been discussing "idle" as something orthogonal
> to the PM states.  Not clear on all the details yet, but I'd vote against
> anything that tries to make "driver doing nothing" a power state,
> or doesn't have a way to idle drivers.

Well, having an "idle" system state that asks all drivers to go to
"idle" state doesn't prevent local bus/driver management from having
it's own dynamic idle state ...

"idle" as a system state is a kind of "light sleep" state where you come
back up very quickly and makes a lot of sense for handheld devices.

"idle" as a device-state is what suspend-to-disk really wants :)

So you don't wnat the system state passed down to drivers but a policy
instead ... We probably need more than that, like some additional flags
along with a platform filter. For example, during a system suspend, a
given piece of HW may end up beeing unclocked or powered off by the
system, the driver will want to know that. The firmware may reboot the
device on wakeup or not. The driver need to know that too.

But I agree that we can avoid passing down a system state if we define
a "policy" state along with a few flags.

There is something else that we need to take into account. For system
state, we want the driver to stay idle until woken up explicitely. But
there are also more "dynamic" PM states that we may want to be triggered
by the user via sysfs for which the driver will come back automatically
when a request comes in from upstream (equivalent to disk idle sleep).

> Drivers can be "idle" without entering low power states, and can
> use wakeup events to enter/exit low power states without being
> fully idle. (Hardware allowing.)  That's an example of a policy that
> drivers should be able to choose without affecting PMcore.

But that doesn't prevent the system from enforcing all drivers into an
idle state, that is no request processing, consistent state image in
memory and no DMA, but no need to actually power down the device. That
is suitable for quick-wakeup idle or for suspend-to-disk.

> I've sent separate posts about how to add wakeup support to the
> PM framework ... that omission should have been a great big
> red (or is it chartreuse?) warning flag that the PM framework was
> lacking some very basic functionality.

Right.

> 
> > "suspend to ram" and  "suspend to disk".
> 
> Those aren't device power states at all!!  They're system sleep
> states (or transitions).   And by the way, "suspend to disk" is
> an odd model for systems without disks, or swap ... which oddly
> enough tend to be ones that really need good PM, and which
> (like HH.org) need the "partially suspended" system model
> to work well.

They are, but the choice of a device power state from a system power
state can most of the time only be done ... by the device-driver itself,
eventually with support from the platform. Only the device-driver knows
what it's device really supports as far as states as concerned, what the
driver supports waking the device from, etc... Though it needs
informations and help from the platform as well, like knowing if the
firmware will bring the device back up from power-on-reset (this is very
important for video cards).
> 
> > But what about user /sysfs originated requests ? (that is random numbers
> > the user whacks in /sys/devices/...../power) what are their semantics ?
> 
> Sysfs should only read/write the names of the states that particular
> device can support.  Plus probably some generic requests for policies
> that the sleep framework would hand to individual drivers.
>
> > Also, do we carry around a "suggested" D state for what it means ? it's
> > really an obscure PCI concept. However, as you can see with the hacks
> > in drivers like radeonfb, ....
> 
> I can't think of PCI D-states as obscure, they're the core of its PM support.
> PCI drivers need to use them to implement power policies.

No, they are obscure. The signification of a given D state at the HW
level and the way a given state is actually supported by a given device
is really totally device-specific. The PCI spec is nice but HW rarely
follow it in my experience.

> Without looking at that code, I'll just say that while many PCI drivers
> can probably offload the decision making to some PCI core code
> ("use D1 or D2 when idle if available; D3hot otherwise"), not all
> can do that. 

The problem, again, is that chosing the right state is a decision that
can only be done by the driver, provided it knows information about the
system state (or policy if you prefer, your policy thing is just a way
to pass system states without calling them this way), and informations
from the platform about what will actually happen on this specific slot
after the state is entered (and a lot of systems don't give a shit about
PCI D states at this point, some machines will just power down all
slots, or a random set of them, some will cut clocks off, some will do
nothing, etc...) 

Ben.



  reply	other threads:[~2004-10-11 22:25 UTC|newest]

Thread overview: 65+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-10-11  0:45 Totally broken PCI PM calls Benjamin Herrenschmidt
2004-10-11  2:41 ` Linus Torvalds
2004-10-11  3:42   ` Paul Mackerras
2004-10-11  4:04     ` Linus Torvalds
2004-10-11  4:24       ` Paul Mackerras
2004-10-11  9:57         ` Pavel Machek
2004-10-11 14:42         ` Linus Torvalds
2004-10-11 14:56           ` suspend-to-RAM [was Re: Totally broken PCI PM calls] Pavel Machek
2004-10-11 15:30             ` Linus Torvalds
2004-10-11 17:39               ` Olivier Galibert
2004-10-11 18:21                 ` Pavel Machek
2004-10-11 15:53             ` Brice Goglin
2004-10-11 16:17               ` Pavel Machek
2004-10-11 17:09                 ` Brice Goglin
2004-10-11 18:23                   ` Pavel Machek
2004-10-11 18:40                     ` Brice Goglin
2004-10-11 16:47         ` Totally broken PCI PM calls David Brownell
2004-10-11 22:28           ` Benjamin Herrenschmidt
2004-10-11 22:58             ` Dmitry Torokhov
2004-10-11 23:08               ` Benjamin Herrenschmidt
2004-10-12  3:00                 ` David Brownell
2004-10-12  4:09                   ` Dmitry Torokhov
2004-10-12 16:56                     ` David Brownell
2004-10-12  9:27             ` Russell King
2004-10-12 11:24               ` Benjamin Herrenschmidt
2004-10-11  4:25     ` Linus Torvalds
2004-10-11 10:18       ` Pavel Machek
2004-10-11 10:54         ` Benjamin Herrenschmidt
2004-10-11 16:01         ` Linus Torvalds
2004-10-15 13:59           ` Pavel Machek
2004-10-15 15:56             ` Linus Torvalds
2004-10-24 20:58               ` Pavel Machek
2004-10-24 21:18                 ` Linus Torvalds
2004-10-11 16:36     ` David Brownell
2004-10-11 21:17       ` Nigel Cunningham
2004-10-11 21:37         ` David Brownell
2004-10-11 22:12           ` Stefan Seyfried
2004-10-12  2:59             ` David Brownell
2004-10-12  8:54               ` Pavel Machek
2004-10-12 10:32                 ` Stefan Seyfried
2004-10-12 18:28                 ` David Brownell
2004-10-12 20:28                   ` Stefan Seyfried
2004-10-13 13:34                     ` David Brownell
2004-10-12  1:24           ` Nigel Cunningham
2004-10-12  8:53           ` Pavel Machek
2004-10-12 18:52             ` David Brownell
2004-10-12 19:50               ` Pavel Machek
2004-10-12 22:13               ` Benjamin Herrenschmidt
2004-10-12 22:35                 ` David Brownell
2004-10-11 22:26       ` Benjamin Herrenschmidt
2004-10-11  3:45   ` Benjamin Herrenschmidt
2004-10-11  4:08     ` Linus Torvalds
2004-10-11  4:23       ` Benjamin Herrenschmidt
2004-10-11  4:32         ` Linus Torvalds
2004-10-11  4:55           ` Benjamin Herrenschmidt
2004-10-11 16:15             ` David Brownell
2004-10-11 22:22               ` Benjamin Herrenschmidt [this message]
2004-10-12  2:46                 ` David Brownell
2004-10-12  4:02                   ` Benjamin Herrenschmidt
2004-10-12 10:49                     ` Nigel Cunningham
2004-10-12 11:27                       ` Benjamin Herrenschmidt
2004-10-12 11:38                         ` Nigel Cunningham
2004-10-12 11:51               ` Pavel Machek
2004-10-11 10:08     ` Pavel Machek
2004-10-11  9:51 ` Pavel Machek

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=1097533363.13795.22.camel@gaston \
    --to=benh@kernel.crashing.org \
    --cc=akpm@osdl.org \
    --cc=david-b@pacbell.net \
    --cc=linux-kernel@vger.kernel.org \
    --cc=paulus@samba.org \
    --cc=pavel@ucw.cz \
    --cc=torvalds@osdl.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).