Re: [PATCH]PM QOS refresh against next-20100430

From: Kevin Hilman
Date: Mon May 03 2010 - 13:01:59 EST


Jonathan Corbet <corbet@xxxxxxx> writes:

> On Mon, 03 May 2010 09:40:11 -0700
> Kevin Hilman <khilman@xxxxxxxxxxxxxxxxxxx> wrote:
>
>> > One question, though... one clear use of this API is for drivers to
>> > say "don't go into C3 or deeper because things go wrong"; I'm about to
>> > add another one of those. It works, but the use of a
>> > PM_QOS_CPU_DMA_LATENCY requirement with a hard-coded number that one
>> > hopes is small enough seems a bit...indirect. I wonder if it would be
>> > clearer and more robust to add a new requirement^Wrequest type saying
>> > "the quality of service I need is shallow sleeps only"?
>>
>> The problem with that is portability.
>>
>> What does "shallow" mean?
>
> Well, shallow could mean that the state lacks the CPUIDLE_FLAG_DEEP
> flag; that should be relatively portable. In any case, it seems
> more so than "if I put in a 55us latency requirement, I'll stay out
> of C3".

I guess it depends on your goal. Do you just want to stay out of C3
on your current platform? or do you want to stay out of any low-power
state (on any platform) where you'll have a latency of > 55 usecs?

The former is not portable (as C-states don't have the same meanings
across arches/SoCs) where as using a real-world number in usecs will
have meaning on any platform.

> Just a thought, anyway; it's not like I've really worked through a
> plausible alternative API.

My main concern is that drivers not be written with latency
constraints that assume an Intel-centric set of power states. There
are other SoCs out there with different sets of states and
corresponding latencies, so keeping things in real-world numbers
(latency, throughput, etc.) seems to me to be the only portable way.

Kevin

--
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/