Patch "cpufreq: governor: Ensure sufficiently large sampling intervals" has been added to the 4.14-stable tree
Subsystems (2)
This is a note to let you know that I've just added the patch titled
cpufreq: governor: Ensure sufficiently large sampling intervals
to the 4.14-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
cpufreq-governor-ensure-sufficiently-large-sampling-intervals.patch
and it can be found in the queue-4.14 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
56026645e2b6f11ede34a5e6ab69d3eb56f9c8fcMon Sep 17 00:00:00 2001
From: "Rafael J. Wysocki" <[email protected]>
Date: Mon, 18 Dec 2017 02:15:32 +0100
Subject: cpufreq: governor: Ensure sufficiently large sampling intervals
From: Rafael J. Wysocki <[email protected]>
commit 56026645e2b6f11ede34a5e6ab69d3eb56f9c8fc upstream.
After commit aa7519af450d (cpufreq: Use transition_delay_us for legacy governors as well) the sampling_rate field of struct dbs_data may be less than the tick period which causes dbs_update() to produce incorrect results, so make the code ensure that the value of that field will always be sufficiently large.
--- drivers/cpufreq/cpufreq_governor.c | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-)
drivers/cpufreq/cpufreq_governor.c +16 -3
@@ -22,6 +22,8 @@#include "cpufreq_governor.h" +#define CPUFREQ_DBS_MIN_SAMPLING_INTERVAL (2 * TICK_NSEC / NSEC_PER_USEC) + static DEFINE_PER_CPU(struct cpu_dbs_info, cpu_dbs);static DEFINE_MUTEX (gov_dbs_data_mutex);
@@ -47,11 +49,15 @@ ssize_t store_sampling_rate(struct gov_a {struct dbs_data *dbs_data =to_dbs_data (attr_set);struct policy_dbs_info *policy_dbs; +unsigned int sampling_interval;int ret; - ret =sscanf (buf,"%u" , &dbs_data->sampling_rate); -if (ret !=1 ) + + ret =sscanf (buf,"%u" , &sampling_interval); +if (ret !=1 || sampling_interval <CPUFREQ_DBS_MIN_SAMPLING_INTERVAL )return -EINVAL ; + dbs_data->sampling_rate = sampling_interval; +/* * We are operating under dbs_data->mutex and so the list and its * entries can't be freed concurrently.
@@ -430,7 +436,14 @@ int cpufreq_dbs_governor_init(struct cpuif (ret) goto free_policy_dbs_info; - dbs_data->sampling_rate =cpufreq_policy_transition_delay_us (policy); +/* +* The sampling interval should not be less than the transition latency +* of the CPU and it also cannot be too small for dbs_update() to work +* correctly. +*/ + dbs_data->sampling_rate = max_t(unsigned int, +CPUFREQ_DBS_MIN_SAMPLING_INTERVAL , +cpufreq_policy_transition_delay_us (policy));if (!have_governor_per_policy ()) gov->gdbs_data = dbs_data;
Patches currently in stable-queue which might be from [email protected] are
queue-4.14/cpufreq-governor-ensure-sufficiently-large-sampling-intervals.patch