Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Skip to content
Commit 67132e14 authored by Hanumath Prasad's avatar Hanumath Prasad Committed by alexax66
Browse files

cpufreq: interactive:call __cpufreq_driver_target() for cur frequency


There is a race window as explained below when governor tries to change
the cpu frequency and some other thread (say thermal mitigation) try to
change the policy limits simultaneously.

speedchange task (ThreadA)			Thread B(say Thermal)

cpufreq_interactive_speedchange_task()
	|
__cpufreq_driver_target()
	|
set_cpu_freq()
	|
						cpufreq_update_policy()
							|
						modified policy_max
							|
						check policy->curr against
						new policy limits,return
						without calling
						__cpufreq_driver_target as
						policy->curr(which is not
						updated by ThreadA) is still
						within the new policy limits.

	|
sent CPUFREQ_POSTCHANGE notification
	|
updated policy->cur which happens to be higher than policy->max

This results the current frequency being higher than the policy->max and
violating the policy limits. This causes thermal impact and in turn high
power consumption. So Fix this by calling __cpufreq_driver_target() always
with current frequency and leave it to __cpufreq_driver_target() to
guarantee there is no race condition when multiple threads are changing
frequencies.

Change-Id: I9136e9245677e8fc90a628d3099aca8d63d3677c
Signed-off-by: default avatarHanumath Prasad <hpprasad@codeaurora.org>

Used commit: https://github.com/flar2/kernel-msm/commit/352989e25aba22221d098ef612759dfb637dcf4e
parent 76ea8810
Loading
Loading
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment