Re: Run-time PM idea (was: Re: [linux-pm] [RFC][PATCH 0/2] PM:Rearrange core suspend code)
From: Ingo Molnar
Date: Mon Jun 08 2009 - 11:06:38 EST
* Matthew Garrett <mjg59@xxxxxxxxxxxxx> wrote:
> On Mon, Jun 08, 2009 at 04:21:54PM +0200, Ingo Molnar wrote:
>
> > The kernel _needs_ to have precise information about whether a piece
> > of hardware is in use or not.
>
> The kernel can only have that information if userspace tells it.
> What we're quibbling over is whether the kernel should be
> explicitly told about the requirement (ie, every time an app makes
> a key grab in X the kernel gets told about it) or whether it
> should be implicit (userspace knows that a key grab has been made
> and so requests that the keyboard not be suspended).
>
> We *can* put all of that complexity in the kernel. The question is
> whether it buys us anything. We'd have to modify huge chunks of
> userspace and in the process we'd end up limited to whatever
> policy happens to exist in the version of the kernel the user is
> running.
>
> I'd like the kernel to expose this functionality but leave the
> policy decisions to userland.
The thing is, suspending something that is being used and relied on
by an app is a _bug_. This is rather fundamental: hardware state and
usage tracking is _NOT POLICY_.
Having a global override of "dont ever suspend anything here,
because i say so" _is_ policy.
Providing _essential_ functionality to not suspend a keyboard while
an app relies on it is _NOT_ policy.
I will even buy the argument that most current hardware cannot be
auto-suspended safely.
But if you think that tracking the usage state of the hardware is
'complexity', then you very much dont know what you are talking
about. The main task of the kernel is to track hardware usage and to
abstract away the fact that the same hardware is used by multiple
tasks, and to do it safely. It's what the kernel does all day.
Ingo
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/