sched/walt: Fix invalid access of CPU cycle counter callback
There is a potential reordering issue with CPU cycle counter
callback update and access.
The update path is invoked from the low level clock driver by
calling register_cpu_cycle_counter_cb().
register_cpu_cycle_counter_cb()
{
cpu_cycle_counter_cb = *cb
use_cycle_counter = true
}
The access/reader path is invoked from update_task_ravg()->
update_task_cpu_cycles().
update_task_cpu_cycles()
{
if (use_cycle_counter)
*cpu_cycle_counter_cb()
}
If the stores of cpu_cycle_counter_cb and use_cycle_counter are
re-ordered (either at compile time or execution time), there is
a possibility of accessing the callback function pointer before
the update.
This can be fixed by adding a write memory barrier at the update
side and a read memory barrier at the access side. However this
re-ordering issue happens only once during boot up time. So adding
a read memory barrier at the access side which is in scheduler
hotpaths is not efficient. Since the access path always takes a
rq lock, acquire all CPUs rq locks at the update side.
Change-Id: I81715ab0255ff9f52410dcf707a04ea7c6ccf165
Signed-off-by: Pavankumar Kondeti <pkondeti@codeaurora.org>
1 file changed