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

Commit 4eebb54d authored by Todd Poynor's avatar Todd Poynor Committed by Amit Pundir
Browse files

cpufreq: interactive: reduce chance of zero time delta on load eval



Reschedule load sampling timer after timestamp of sample start taken,
hold spinlock across entire sequence to avoid preemption.  Avoid the
WARN for zero time delta in the load sampling timer function.

Change-Id: Idc10a756f09141decb6df92669521a1ebf0dbc10
Signed-off-by: default avatarTodd Poynor <toddpoynor@google.com>
parent 30857f28
Loading
Loading
Loading
Loading
+9 −7
Original line number Diff line number Diff line
@@ -169,21 +169,23 @@ static inline cputime64_t get_cpu_idle_time(unsigned int cpu,
static void cpufreq_interactive_timer_resched(
	struct cpufreq_interactive_cpuinfo *pcpu)
{
	unsigned long expires = jiffies + usecs_to_jiffies(timer_rate);
	unsigned long expires;
	unsigned long flags;

	mod_timer_pinned(&pcpu->cpu_timer, expires);
	if (timer_slack_val >= 0 && pcpu->target_freq > pcpu->policy->min) {
		expires += usecs_to_jiffies(timer_slack_val);
		mod_timer_pinned(&pcpu->cpu_slack_timer, expires);
	}

	spin_lock_irqsave(&pcpu->load_lock, flags);
	pcpu->time_in_idle =
		get_cpu_idle_time(smp_processor_id(),
				     &pcpu->time_in_idle_timestamp);
	pcpu->cputime_speedadj = 0;
	pcpu->cputime_speedadj_timestamp = pcpu->time_in_idle_timestamp;
	expires = jiffies + usecs_to_jiffies(timer_rate);
	mod_timer_pinned(&pcpu->cpu_timer, expires);

	if (timer_slack_val >= 0 && pcpu->target_freq > pcpu->policy->min) {
		expires += usecs_to_jiffies(timer_slack_val);
		mod_timer_pinned(&pcpu->cpu_slack_timer, expires);
	}

	spin_unlock_irqrestore(&pcpu->load_lock, flags);
}