diff options
Diffstat (limited to 'drivers/cpufreq/cpufreq_conservative.c')
-rw-r--r-- | drivers/cpufreq/cpufreq_conservative.c | 61 |
1 files changed, 20 insertions, 41 deletions
diff --git a/drivers/cpufreq/cpufreq_conservative.c b/drivers/cpufreq/cpufreq_conservative.c index 7a74d175287b..7fc58af748b4 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 | */ |
45 | static 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 | */ | ||
58 | static 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 */ | 47 | static 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) |
@@ -182,27 +167,14 @@ static struct notifier_block dbs_cpufreq_notifier_block = { | |||
182 | /************************** sysfs interface ************************/ | 167 | /************************** sysfs interface ************************/ |
183 | static ssize_t show_sampling_rate_max(struct cpufreq_policy *policy, char *buf) | 168 | static ssize_t show_sampling_rate_max(struct cpufreq_policy *policy, char *buf) |
184 | { | 169 | { |
185 | static int print_once; | 170 | printk_once(KERN_INFO "CPUFREQ: conservative sampling_rate_max " |
186 | 171 | "sysfs file is deprecated - used by: %s\n", current->comm); | |
187 | if (!print_once) { | 172 | return sprintf(buf, "%u\n", -1U); |
188 | printk(KERN_INFO "CPUFREQ: conservative sampling_rate_max " | ||
189 | "sysfs file is deprecated - used by: %s\n", | ||
190 | current->comm); | ||
191 | print_once = 1; | ||
192 | } | ||
193 | return sprintf(buf, "%u\n", MAX_SAMPLING_RATE); | ||
194 | } | 173 | } |
195 | 174 | ||
196 | static ssize_t show_sampling_rate_min(struct cpufreq_policy *policy, char *buf) | 175 | static ssize_t show_sampling_rate_min(struct cpufreq_policy *policy, char *buf) |
197 | { | 176 | { |
198 | static int print_once; | 177 | return sprintf(buf, "%u\n", min_sampling_rate); |
199 | |||
200 | if (!print_once) { | ||
201 | printk(KERN_INFO "CPUFREQ: conservative sampling_rate_max " | ||
202 | "sysfs file is deprecated - used by: %s\n", current->comm); | ||
203 | print_once = 1; | ||
204 | } | ||
205 | return sprintf(buf, "%u\n", MIN_SAMPLING_RATE); | ||
206 | } | 178 | } |
207 | 179 | ||
208 | #define define_one_ro(_name) \ | 180 | #define define_one_ro(_name) \ |
@@ -254,7 +226,7 @@ static ssize_t store_sampling_rate(struct cpufreq_policy *unused, | |||
254 | return -EINVAL; | 226 | return -EINVAL; |
255 | 227 | ||
256 | mutex_lock(&dbs_mutex); | 228 | mutex_lock(&dbs_mutex); |
257 | dbs_tuners_ins.sampling_rate = max(input, minimum_sampling_rate()); | 229 | dbs_tuners_ins.sampling_rate = max(input, min_sampling_rate); |
258 | mutex_unlock(&dbs_mutex); | 230 | mutex_unlock(&dbs_mutex); |
259 | 231 | ||
260 | return count; | 232 | return count; |
@@ -601,11 +573,18 @@ static int cpufreq_governor_dbs(struct cpufreq_policy *policy, | |||
601 | if (latency == 0) | 573 | if (latency == 0) |
602 | latency = 1; | 574 | latency = 1; |
603 | 575 | ||
604 | def_sampling_rate = | 576 | /* |
605 | max(latency * LATENCY_MULTIPLIER, | 577 | * conservative does not implement micro like ondemand |
606 | MIN_STAT_SAMPLING_RATE); | 578 | * governor, thus we are bound to jiffes/HZ |
607 | 579 | */ | |
608 | dbs_tuners_ins.sampling_rate = def_sampling_rate; | 580 | min_sampling_rate = |
581 | MIN_SAMPLING_RATE_RATIO * jiffies_to_usecs(10); | ||
582 | /* Bring kernel and HW constraints together */ | ||
583 | min_sampling_rate = max(min_sampling_rate, | ||
584 | MIN_LATENCY_MULTIPLIER * latency); | ||
585 | dbs_tuners_ins.sampling_rate = | ||
586 | max(min_sampling_rate, | ||
587 | latency * LATENCY_MULTIPLIER); | ||
609 | 588 | ||
610 | cpufreq_register_notifier( | 589 | cpufreq_register_notifier( |
611 | &dbs_cpufreq_notifier_block, | 590 | &dbs_cpufreq_notifier_block, |