On 03/02/2015 08:23 PM, Peter Zijlstra wrote:
> On Thu, Feb 26, 2015 at 08:52:02AM +0530, Preeti U Murthy wrote:
>> The hrtimer mode of broadcast queues hrtimers in the idle entry
>> path so as to wakeup cpus in deep idle states. 
> 
> Callgraph please...

cpuidle_idle_call()
|____ clockevents_notify(CLOCK_EVT_NOTIFY_BROADCAST_ENTER, ....))
     |_____tick_broadcast_set_event()
           |____clockevents_program_event()
                |____bc_set_next()
> 
>> hrtimer_{start/cancel}
>> functions call into tracing which uses RCU. But it is not legal to call
>> into RCU in cpuidle because it is one of the quiescent states. Hence
>> protect this region with RCU_NONIDLE which informs RCU that the cpu
>> is momentarily non-idle.
> 
> It it not clear to me that every user of bc_set_next() is from IDLE.
> From what I can tell it ends up being clockevents_program_event() and
> that is called quite a lot.

bc_set_next() is called from at places:
1. Idle entry : It is called when a cpu in its idle entry path finds the
need to reset the broadcast hrtimer.
2. CPU offline operations : When the cpu on which the broadcast hrtimer
is being queued goes offline.

So you see that almost all the time, it is called in idle entry path.

Regards
Preeti U Murthy

> 
> Why is bc_set_next() a good function to annotate?
> 

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to