aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/cpufreq
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/cpufreq')
-rw-r--r--drivers/cpufreq/cpufreq_conservative.c44
-rw-r--r--drivers/cpufreq/cpufreq_ondemand.c50
2 files changed, 41 insertions, 53 deletions
diff --git a/drivers/cpufreq/cpufreq_conservative.c b/drivers/cpufreq/cpufreq_conservative.c
index 7a74d175287b..06bfe1c572cd 100644
--- a/drivers/cpufreq/cpufreq_conservative.c
+++ b/drivers/cpufreq/cpufreq_conservative.c
@@ -42,27 +42,12 @@
42 * this governor will not work. 42 * this governor will not work.
43 * All times here are in uS. 43 * All times here are in uS.
44 */ 44 */
45static unsigned int def_sampling_rate;
46#define MIN_SAMPLING_RATE_RATIO (2) 45#define MIN_SAMPLING_RATE_RATIO (2)
47/* for correct statistics, we need at least 10 ticks between each measure */
48#define MIN_STAT_SAMPLING_RATE \
49 (MIN_SAMPLING_RATE_RATIO * jiffies_to_usecs(10))
50#define MIN_SAMPLING_RATE \
51 (def_sampling_rate / MIN_SAMPLING_RATE_RATIO)
52/* Above MIN_SAMPLING_RATE will vanish with its sysfs file soon
53 * Define the minimal settable sampling rate to the greater of:
54 * - "HW transition latency" * 100 (same as default sampling / 10)
55 * - MIN_STAT_SAMPLING_RATE
56 * To avoid that userspace shoots itself.
57*/
58static unsigned int minimum_sampling_rate(void)
59{
60 return max(def_sampling_rate / 10, MIN_STAT_SAMPLING_RATE);
61}
62 46
63/* This will also vanish soon with removing sampling_rate_max */ 47static unsigned int min_sampling_rate;
64#define MAX_SAMPLING_RATE (500 * def_sampling_rate) 48
65#define LATENCY_MULTIPLIER (1000) 49#define LATENCY_MULTIPLIER (1000)
50#define MIN_LATENCY_MULTIPLIER (100)
66#define DEF_SAMPLING_DOWN_FACTOR (1) 51#define DEF_SAMPLING_DOWN_FACTOR (1)
67#define MAX_SAMPLING_DOWN_FACTOR (10) 52#define MAX_SAMPLING_DOWN_FACTOR (10)
68#define TRANSITION_LATENCY_LIMIT (10 * 1000 * 1000) 53#define TRANSITION_LATENCY_LIMIT (10 * 1000 * 1000)
@@ -190,7 +175,7 @@ static ssize_t show_sampling_rate_max(struct cpufreq_policy *policy, char *buf)
190 current->comm); 175 current->comm);
191 print_once = 1; 176 print_once = 1;
192 } 177 }
193 return sprintf(buf, "%u\n", MAX_SAMPLING_RATE); 178 return sprintf(buf, "%u\n", -1U);
194} 179}
195 180
196static ssize_t show_sampling_rate_min(struct cpufreq_policy *policy, char *buf) 181static ssize_t show_sampling_rate_min(struct cpufreq_policy *policy, char *buf)
@@ -202,7 +187,7 @@ static ssize_t show_sampling_rate_min(struct cpufreq_policy *policy, char *buf)
202 "sysfs file is deprecated - used by: %s\n", current->comm); 187 "sysfs file is deprecated - used by: %s\n", current->comm);
203 print_once = 1; 188 print_once = 1;
204 } 189 }
205 return sprintf(buf, "%u\n", MIN_SAMPLING_RATE); 190 return sprintf(buf, "%u\n", min_sampling_rate);
206} 191}
207 192
208#define define_one_ro(_name) \ 193#define define_one_ro(_name) \
@@ -254,7 +239,7 @@ static ssize_t store_sampling_rate(struct cpufreq_policy *unused,
254 return -EINVAL; 239 return -EINVAL;
255 240
256 mutex_lock(&dbs_mutex); 241 mutex_lock(&dbs_mutex);
257 dbs_tuners_ins.sampling_rate = max(input, minimum_sampling_rate()); 242 dbs_tuners_ins.sampling_rate = max(input, min_sampling_rate);
258 mutex_unlock(&dbs_mutex); 243 mutex_unlock(&dbs_mutex);
259 244
260 return count; 245 return count;
@@ -601,11 +586,18 @@ static int cpufreq_governor_dbs(struct cpufreq_policy *policy,
601 if (latency == 0) 586 if (latency == 0)
602 latency = 1; 587 latency = 1;
603 588
604 def_sampling_rate = 589 /*
605 max(latency * LATENCY_MULTIPLIER, 590 * conservative does not implement micro like ondemand
606 MIN_STAT_SAMPLING_RATE); 591 * governor, thus we are bound to jiffes/HZ
607 592 */
608 dbs_tuners_ins.sampling_rate = def_sampling_rate; 593 min_sampling_rate =
594 MIN_SAMPLING_RATE_RATIO * jiffies_to_usecs(10);
595 /* Bring kernel and HW constraints together */
596 min_sampling_rate = max(min_sampling_rate,
597 MIN_LATENCY_MULTIPLIER * latency);
598 dbs_tuners_ins.sampling_rate =
599 max(min_sampling_rate,
600 latency * LATENCY_MULTIPLIER);
609 601
610 cpufreq_register_notifier( 602 cpufreq_register_notifier(
611 &dbs_cpufreq_notifier_block, 603 &dbs_cpufreq_notifier_block,
diff --git a/drivers/cpufreq/cpufreq_ondemand.c b/drivers/cpufreq/cpufreq_ondemand.c
index e741c339df76..a235114c3d85 100644
--- a/drivers/cpufreq/cpufreq_ondemand.c
+++ b/drivers/cpufreq/cpufreq_ondemand.c
@@ -32,6 +32,7 @@
32#define DEF_FREQUENCY_UP_THRESHOLD (80) 32#define DEF_FREQUENCY_UP_THRESHOLD (80)
33#define MICRO_FREQUENCY_DOWN_DIFFERENTIAL (3) 33#define MICRO_FREQUENCY_DOWN_DIFFERENTIAL (3)
34#define MICRO_FREQUENCY_UP_THRESHOLD (95) 34#define MICRO_FREQUENCY_UP_THRESHOLD (95)
35#define MICRO_FREQUENCY_MIN_SAMPLE_RATE (10000)
35#define MIN_FREQUENCY_UP_THRESHOLD (11) 36#define MIN_FREQUENCY_UP_THRESHOLD (11)
36#define MAX_FREQUENCY_UP_THRESHOLD (100) 37#define MAX_FREQUENCY_UP_THRESHOLD (100)
37 38
@@ -45,27 +46,12 @@
45 * this governor will not work. 46 * this governor will not work.
46 * All times here are in uS. 47 * All times here are in uS.
47 */ 48 */
48static unsigned int def_sampling_rate;
49#define MIN_SAMPLING_RATE_RATIO (2) 49#define MIN_SAMPLING_RATE_RATIO (2)
50/* for correct statistics, we need at least 10 ticks between each measure */
51#define MIN_STAT_SAMPLING_RATE \
52 (MIN_SAMPLING_RATE_RATIO * jiffies_to_usecs(10))
53#define MIN_SAMPLING_RATE \
54 (def_sampling_rate / MIN_SAMPLING_RATE_RATIO)
55/* Above MIN_SAMPLING_RATE will vanish with its sysfs file soon
56 * Define the minimal settable sampling rate to the greater of:
57 * - "HW transition latency" * 100 (same as default sampling / 10)
58 * - MIN_STAT_SAMPLING_RATE
59 * To avoid that userspace shoots itself.
60*/
61static unsigned int minimum_sampling_rate(void)
62{
63 return max(def_sampling_rate / 10, MIN_STAT_SAMPLING_RATE);
64}
65 50
66/* This will also vanish soon with removing sampling_rate_max */ 51static unsigned int min_sampling_rate;
67#define MAX_SAMPLING_RATE (500 * def_sampling_rate) 52
68#define LATENCY_MULTIPLIER (1000) 53#define LATENCY_MULTIPLIER (1000)
54#define MIN_LATENCY_MULTIPLIER (100)
69#define TRANSITION_LATENCY_LIMIT (10 * 1000 * 1000) 55#define TRANSITION_LATENCY_LIMIT (10 * 1000 * 1000)
70 56
71static void do_dbs_timer(struct work_struct *work); 57static void do_dbs_timer(struct work_struct *work);
@@ -227,7 +213,7 @@ static ssize_t show_sampling_rate_max(struct cpufreq_policy *policy, char *buf)
227 current->comm); 213 current->comm);
228 print_once = 1; 214 print_once = 1;
229 } 215 }
230 return sprintf(buf, "%u\n", MAX_SAMPLING_RATE); 216 return sprintf(buf, "%u\n", -1U);
231} 217}
232 218
233static ssize_t show_sampling_rate_min(struct cpufreq_policy *policy, char *buf) 219static ssize_t show_sampling_rate_min(struct cpufreq_policy *policy, char *buf)
@@ -240,7 +226,7 @@ static ssize_t show_sampling_rate_min(struct cpufreq_policy *policy, char *buf)
240 current->comm); 226 current->comm);
241 print_once = 1; 227 print_once = 1;
242 } 228 }
243 return sprintf(buf, "%u\n", MIN_SAMPLING_RATE); 229 return sprintf(buf, "%u\n", min_sampling_rate);
244} 230}
245 231
246#define define_one_ro(_name) \ 232#define define_one_ro(_name) \
@@ -274,7 +260,7 @@ static ssize_t store_sampling_rate(struct cpufreq_policy *unused,
274 mutex_unlock(&dbs_mutex); 260 mutex_unlock(&dbs_mutex);
275 return -EINVAL; 261 return -EINVAL;
276 } 262 }
277 dbs_tuners_ins.sampling_rate = max(input, minimum_sampling_rate()); 263 dbs_tuners_ins.sampling_rate = max(input, min_sampling_rate);
278 mutex_unlock(&dbs_mutex); 264 mutex_unlock(&dbs_mutex);
279 265
280 return count; 266 return count;
@@ -619,12 +605,12 @@ static int cpufreq_governor_dbs(struct cpufreq_policy *policy,
619 latency = policy->cpuinfo.transition_latency / 1000; 605 latency = policy->cpuinfo.transition_latency / 1000;
620 if (latency == 0) 606 if (latency == 0)
621 latency = 1; 607 latency = 1;
622 608 /* Bring kernel and HW constraints together */
623 def_sampling_rate = 609 min_sampling_rate = max(min_sampling_rate,
624 max(latency * LATENCY_MULTIPLIER, 610 MIN_LATENCY_MULTIPLIER * latency);
625 MIN_STAT_SAMPLING_RATE); 611 dbs_tuners_ins.sampling_rate =
626 612 max(min_sampling_rate,
627 dbs_tuners_ins.sampling_rate = def_sampling_rate; 613 latency * LATENCY_MULTIPLIER);
628 } 614 }
629 dbs_timer_init(this_dbs_info); 615 dbs_timer_init(this_dbs_info);
630 616
@@ -678,6 +664,16 @@ static int __init cpufreq_gov_dbs_init(void)
678 dbs_tuners_ins.up_threshold = MICRO_FREQUENCY_UP_THRESHOLD; 664 dbs_tuners_ins.up_threshold = MICRO_FREQUENCY_UP_THRESHOLD;
679 dbs_tuners_ins.down_differential = 665 dbs_tuners_ins.down_differential =
680 MICRO_FREQUENCY_DOWN_DIFFERENTIAL; 666 MICRO_FREQUENCY_DOWN_DIFFERENTIAL;
667 /*
668 * In no_hz/micro accounting case we set the minimum frequency
669 * not depending on HZ, but fixed (very low). The deferred
670 * timer might skip some samples if idle/sleeping as needed.
671 */
672 min_sampling_rate = MICRO_FREQUENCY_MIN_SAMPLE_RATE;
673 } else {
674 /* For correct statistics, we need 10 ticks for each measure */
675 min_sampling_rate =
676 MIN_SAMPLING_RATE_RATIO * jiffies_to_usecs(10);
681 } 677 }
682 678
683 kondemand_wq = create_workqueue("kondemand"); 679 kondemand_wq = create_workqueue("kondemand");