Re: [PATCH V4 2/3] tick/cpuidle: Initialize hrtimer mode of broadcast

From: Daniel Lezcano
Date: Tue Feb 11 2014 - 17:01:32 EST


On 02/11/2014 04:58 PM, Thomas Gleixner wrote:
On Tue, 11 Feb 2014, Daniel Lezcano wrote:
On 02/07/2014 09:06 AM, Preeti U Murthy wrote:
Setting the smp affinity on the earliest timer should be handled automatically
with the CLOCK_EVT_FEAT_DYNIRQ flag. Did you look at using this flag ?

How should this flag help? Not at all, because the hrtimer based
broadcast device cannot assign affinities.

Another comment is the overall approach. We enter the cpuidle idle framework
with a specific state to go to and it is the tick framework telling us we
mustn't go to this state. IMO the logic is wrong, the decision to not enter
this state should be moved somewhere else.

Why don't you create a cpuidle driver with the shallow idle states assigned to
a cpu (let's say cpu0) and another one with all the deeper idle states for the
rest of the cpus ? Using the multiple cpuidle driver support makes it
possible. The timer won't be moving around and a cpu will be dedicated to act
as the broadcast timer.

Wouldn't make sense and be less intrusive than the patchset you proposed ?

How do you arm the broadcast timer on CPU0 from CPU1? You can't!

You cannot access the cpu local timer on a different cpu. So you would
have to send an IPI over to CPU0 so that it can reevaluate and
schedule the broadcast. That's even more backwards than telling the
cpuidle code that the CPU is not in a state to go deep.

Indeed :)

Thanks for the clarification.

-- Daniel

--
<http://www.linaro.org/> Linaro.org â Open source software for ARM SoCs

Follow Linaro: <http://www.facebook.com/pages/Linaro> Facebook |
<http://twitter.com/#!/linaroorg> Twitter |
<http://www.linaro.org/linaro-blog/> Blog

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