diff options
| -rw-r--r-- | Documentation/cpu-freq/governors.txt | 11 | ||||
| -rw-r--r-- | arch/arm/mach-s5pv210/cpufreq.c | 3 | ||||
| -rw-r--r-- | arch/arm/mach-s5pv310/cpufreq.c | 3 | ||||
| -rw-r--r-- | arch/arm/plat-s3c24xx/cpu-freq.c | 2 | ||||
| -rw-r--r-- | arch/powerpc/platforms/powermac/cpufreq_32.c | 2 | ||||
| -rw-r--r-- | arch/x86/kernel/cpu/cpufreq/pcc-cpufreq.c | 2 | ||||
| -rw-r--r-- | arch/x86/kernel/cpu/cpufreq/powernow-k8.c | 3 | ||||
| -rw-r--r-- | drivers/cpufreq/cpufreq.c | 2 | ||||
| -rw-r--r-- | drivers/cpufreq/cpufreq_conservative.c | 123 | ||||
| -rw-r--r-- | drivers/cpufreq/cpufreq_ondemand.c | 122 | ||||
| -rw-r--r-- | include/linux/cpufreq.h | 11 |
11 files changed, 36 insertions, 248 deletions
diff --git a/Documentation/cpu-freq/governors.txt b/Documentation/cpu-freq/governors.txt index 737988fca64d..e74d0a2eb1cf 100644 --- a/Documentation/cpu-freq/governors.txt +++ b/Documentation/cpu-freq/governors.txt | |||
| @@ -158,6 +158,17 @@ intensive calculation on your laptop that you do not care how long it | |||
| 158 | takes to complete as you can 'nice' it and prevent it from taking part | 158 | takes to complete as you can 'nice' it and prevent it from taking part |
| 159 | in the deciding process of whether to increase your CPU frequency. | 159 | in the deciding process of whether to increase your CPU frequency. |
| 160 | 160 | ||
| 161 | sampling_down_factor: this parameter controls the rate at which the | ||
| 162 | kernel makes a decision on when to decrease the frequency while running | ||
| 163 | at top speed. When set to 1 (the default) decisions to reevaluate load | ||
| 164 | are made at the same interval regardless of current clock speed. But | ||
| 165 | when set to greater than 1 (e.g. 100) it acts as a multiplier for the | ||
| 166 | scheduling interval for reevaluating load when the CPU is at its top | ||
| 167 | speed due to high load. This improves performance by reducing the overhead | ||
| 168 | of load evaluation and helping the CPU stay at its top speed when truly | ||
| 169 | busy, rather than shifting back and forth in speed. This tunable has no | ||
| 170 | effect on behavior at lower speeds/lower CPU loads. | ||
| 171 | |||
| 161 | 172 | ||
| 162 | 2.5 Conservative | 173 | 2.5 Conservative |
| 163 | ---------------- | 174 | ---------------- |
diff --git a/arch/arm/mach-s5pv210/cpufreq.c b/arch/arm/mach-s5pv210/cpufreq.c index a6f22920a2c2..22046e2f53c2 100644 --- a/arch/arm/mach-s5pv210/cpufreq.c +++ b/arch/arm/mach-s5pv210/cpufreq.c | |||
| @@ -390,8 +390,7 @@ static int s5pv210_target(struct cpufreq_policy *policy, | |||
| 390 | } | 390 | } |
| 391 | 391 | ||
| 392 | #ifdef CONFIG_PM | 392 | #ifdef CONFIG_PM |
| 393 | static int s5pv210_cpufreq_suspend(struct cpufreq_policy *policy, | 393 | static int s5pv210_cpufreq_suspend(struct cpufreq_policy *policy) |
| 394 | pm_message_t pmsg) | ||
| 395 | { | 394 | { |
| 396 | return 0; | 395 | return 0; |
| 397 | } | 396 | } |
diff --git a/arch/arm/mach-s5pv310/cpufreq.c b/arch/arm/mach-s5pv310/cpufreq.c index b04cbc731128..7c08ad7d8887 100644 --- a/arch/arm/mach-s5pv310/cpufreq.c +++ b/arch/arm/mach-s5pv310/cpufreq.c | |||
| @@ -458,8 +458,7 @@ static int s5pv310_target(struct cpufreq_policy *policy, | |||
| 458 | } | 458 | } |
| 459 | 459 | ||
| 460 | #ifdef CONFIG_PM | 460 | #ifdef CONFIG_PM |
| 461 | static int s5pv310_cpufreq_suspend(struct cpufreq_policy *policy, | 461 | static int s5pv310_cpufreq_suspend(struct cpufreq_policy *policy) |
| 462 | pm_message_t pmsg) | ||
| 463 | { | 462 | { |
| 464 | return 0; | 463 | return 0; |
| 465 | } | 464 | } |
diff --git a/arch/arm/plat-s3c24xx/cpu-freq.c b/arch/arm/plat-s3c24xx/cpu-freq.c index 25a8fc7f512e..eea75ff81d15 100644 --- a/arch/arm/plat-s3c24xx/cpu-freq.c +++ b/arch/arm/plat-s3c24xx/cpu-freq.c | |||
| @@ -433,7 +433,7 @@ static int s3c_cpufreq_verify(struct cpufreq_policy *policy) | |||
| 433 | static struct cpufreq_frequency_table suspend_pll; | 433 | static struct cpufreq_frequency_table suspend_pll; |
| 434 | static unsigned int suspend_freq; | 434 | static unsigned int suspend_freq; |
| 435 | 435 | ||
| 436 | static int s3c_cpufreq_suspend(struct cpufreq_policy *policy, pm_message_t pmsg) | 436 | static int s3c_cpufreq_suspend(struct cpufreq_policy *policy) |
| 437 | { | 437 | { |
| 438 | suspend_pll.frequency = clk_get_rate(_clk_mpll); | 438 | suspend_pll.frequency = clk_get_rate(_clk_mpll); |
| 439 | suspend_pll.index = __raw_readl(S3C2410_MPLLCON); | 439 | suspend_pll.index = __raw_readl(S3C2410_MPLLCON); |
diff --git a/arch/powerpc/platforms/powermac/cpufreq_32.c b/arch/powerpc/platforms/powermac/cpufreq_32.c index 415ca6d6b273..04af5f48b4eb 100644 --- a/arch/powerpc/platforms/powermac/cpufreq_32.c +++ b/arch/powerpc/platforms/powermac/cpufreq_32.c | |||
| @@ -429,7 +429,7 @@ static u32 read_gpio(struct device_node *np) | |||
| 429 | return offset; | 429 | return offset; |
| 430 | } | 430 | } |
| 431 | 431 | ||
| 432 | static int pmac_cpufreq_suspend(struct cpufreq_policy *policy, pm_message_t pmsg) | 432 | static int pmac_cpufreq_suspend(struct cpufreq_policy *policy) |
| 433 | { | 433 | { |
| 434 | /* Ok, this could be made a bit smarter, but let's be robust for now. We | 434 | /* Ok, this could be made a bit smarter, but let's be robust for now. We |
| 435 | * always force a speed change to high speed before sleep, to make sure | 435 | * always force a speed change to high speed before sleep, to make sure |
diff --git a/arch/x86/kernel/cpu/cpufreq/pcc-cpufreq.c b/arch/x86/kernel/cpu/cpufreq/pcc-cpufreq.c index 4a5a42b842ad..755a31e0f5b0 100644 --- a/arch/x86/kernel/cpu/cpufreq/pcc-cpufreq.c +++ b/arch/x86/kernel/cpu/cpufreq/pcc-cpufreq.c | |||
| @@ -315,8 +315,6 @@ static int __init pcc_cpufreq_do_osc(acpi_handle *handle) | |||
| 315 | 315 | ||
| 316 | input.count = 4; | 316 | input.count = 4; |
| 317 | input.pointer = in_params; | 317 | input.pointer = in_params; |
| 318 | input.count = 4; | ||
| 319 | input.pointer = in_params; | ||
| 320 | in_params[0].type = ACPI_TYPE_BUFFER; | 318 | in_params[0].type = ACPI_TYPE_BUFFER; |
| 321 | in_params[0].buffer.length = 16; | 319 | in_params[0].buffer.length = 16; |
| 322 | in_params[0].buffer.pointer = OSC_UUID; | 320 | in_params[0].buffer.pointer = OSC_UUID; |
diff --git a/arch/x86/kernel/cpu/cpufreq/powernow-k8.c b/arch/x86/kernel/cpu/cpufreq/powernow-k8.c index c567dec854f6..1ae4133e6bd6 100644 --- a/arch/x86/kernel/cpu/cpufreq/powernow-k8.c +++ b/arch/x86/kernel/cpu/cpufreq/powernow-k8.c | |||
| @@ -630,8 +630,7 @@ static void print_basics(struct powernow_k8_data *data) | |||
| 630 | data->powernow_table[j].frequency/1000); | 630 | data->powernow_table[j].frequency/1000); |
| 631 | } else { | 631 | } else { |
| 632 | printk(KERN_INFO PFX | 632 | printk(KERN_INFO PFX |
| 633 | " %d : fid 0x%x (%d MHz), vid 0x%x\n", | 633 | "fid 0x%x (%d MHz), vid 0x%x\n", |
| 634 | j, | ||
| 635 | data->powernow_table[j].index & 0xff, | 634 | data->powernow_table[j].index & 0xff, |
| 636 | data->powernow_table[j].frequency/1000, | 635 | data->powernow_table[j].frequency/1000, |
| 637 | data->powernow_table[j].index >> 8); | 636 | data->powernow_table[j].index >> 8); |
diff --git a/drivers/cpufreq/cpufreq.c b/drivers/cpufreq/cpufreq.c index 5cb4d09919d6..0f17ad8585d7 100644 --- a/drivers/cpufreq/cpufreq.c +++ b/drivers/cpufreq/cpufreq.c | |||
| @@ -1371,7 +1371,7 @@ static int cpufreq_suspend(struct sys_device *sysdev, pm_message_t pmsg) | |||
| 1371 | goto out; | 1371 | goto out; |
| 1372 | 1372 | ||
| 1373 | if (cpufreq_driver->suspend) { | 1373 | if (cpufreq_driver->suspend) { |
| 1374 | ret = cpufreq_driver->suspend(cpu_policy, pmsg); | 1374 | ret = cpufreq_driver->suspend(cpu_policy); |
| 1375 | if (ret) | 1375 | if (ret) |
| 1376 | printk(KERN_ERR "cpufreq: suspend failed in ->suspend " | 1376 | printk(KERN_ERR "cpufreq: suspend failed in ->suspend " |
| 1377 | "step on CPU %u\n", cpu_policy->cpu); | 1377 | "step on CPU %u\n", cpu_policy->cpu); |
diff --git a/drivers/cpufreq/cpufreq_conservative.c b/drivers/cpufreq/cpufreq_conservative.c index 94284c8473b1..33b56e5c5c14 100644 --- a/drivers/cpufreq/cpufreq_conservative.c +++ b/drivers/cpufreq/cpufreq_conservative.c | |||
| @@ -76,8 +76,7 @@ static DEFINE_PER_CPU(struct cpu_dbs_info_s, cs_cpu_dbs_info); | |||
| 76 | static unsigned int dbs_enable; /* number of CPUs using this policy */ | 76 | static unsigned int dbs_enable; /* number of CPUs using this policy */ |
| 77 | 77 | ||
| 78 | /* | 78 | /* |
| 79 | * dbs_mutex protects data in dbs_tuners_ins from concurrent changes on | 79 | * dbs_mutex protects dbs_enable in governor start/stop. |
| 80 | * different CPUs. It protects dbs_enable in governor start/stop. | ||
| 81 | */ | 80 | */ |
| 82 | static DEFINE_MUTEX(dbs_mutex); | 81 | static DEFINE_MUTEX(dbs_mutex); |
| 83 | 82 | ||
| @@ -116,7 +115,7 @@ static inline cputime64_t get_cpu_idle_time_jiffy(unsigned int cpu, | |||
| 116 | if (wall) | 115 | if (wall) |
| 117 | *wall = (cputime64_t)jiffies_to_usecs(cur_wall_time); | 116 | *wall = (cputime64_t)jiffies_to_usecs(cur_wall_time); |
| 118 | 117 | ||
| 119 | return (cputime64_t)jiffies_to_usecs(idle_time);; | 118 | return (cputime64_t)jiffies_to_usecs(idle_time); |
| 120 | } | 119 | } |
| 121 | 120 | ||
| 122 | static inline cputime64_t get_cpu_idle_time(unsigned int cpu, cputime64_t *wall) | 121 | static inline cputime64_t get_cpu_idle_time(unsigned int cpu, cputime64_t *wall) |
| @@ -162,21 +161,12 @@ static struct notifier_block dbs_cpufreq_notifier_block = { | |||
| 162 | }; | 161 | }; |
| 163 | 162 | ||
| 164 | /************************** sysfs interface ************************/ | 163 | /************************** sysfs interface ************************/ |
| 165 | static ssize_t show_sampling_rate_max(struct kobject *kobj, | ||
| 166 | struct attribute *attr, char *buf) | ||
| 167 | { | ||
| 168 | printk_once(KERN_INFO "CPUFREQ: conservative sampling_rate_max " | ||
| 169 | "sysfs file is deprecated - used by: %s\n", current->comm); | ||
| 170 | return sprintf(buf, "%u\n", -1U); | ||
| 171 | } | ||
| 172 | |||
| 173 | static ssize_t show_sampling_rate_min(struct kobject *kobj, | 164 | static ssize_t show_sampling_rate_min(struct kobject *kobj, |
| 174 | struct attribute *attr, char *buf) | 165 | struct attribute *attr, char *buf) |
| 175 | { | 166 | { |
| 176 | return sprintf(buf, "%u\n", min_sampling_rate); | 167 | return sprintf(buf, "%u\n", min_sampling_rate); |
| 177 | } | 168 | } |
| 178 | 169 | ||
| 179 | define_one_global_ro(sampling_rate_max); | ||
| 180 | define_one_global_ro(sampling_rate_min); | 170 | define_one_global_ro(sampling_rate_min); |
| 181 | 171 | ||
| 182 | /* cpufreq_conservative Governor Tunables */ | 172 | /* cpufreq_conservative Governor Tunables */ |
| @@ -193,33 +183,6 @@ show_one(down_threshold, down_threshold); | |||
| 193 | show_one(ignore_nice_load, ignore_nice); | 183 | show_one(ignore_nice_load, ignore_nice); |
| 194 | show_one(freq_step, freq_step); | 184 | show_one(freq_step, freq_step); |
| 195 | 185 | ||
| 196 | /*** delete after deprecation time ***/ | ||
| 197 | #define DEPRECATION_MSG(file_name) \ | ||
| 198 | printk_once(KERN_INFO "CPUFREQ: Per core conservative sysfs " \ | ||
| 199 | "interface is deprecated - " #file_name "\n"); | ||
| 200 | |||
| 201 | #define show_one_old(file_name) \ | ||
| 202 | static ssize_t show_##file_name##_old \ | ||
| 203 | (struct cpufreq_policy *unused, char *buf) \ | ||
| 204 | { \ | ||
| 205 | printk_once(KERN_INFO "CPUFREQ: Per core conservative sysfs " \ | ||
| 206 | "interface is deprecated - " #file_name "\n"); \ | ||
| 207 | return show_##file_name(NULL, NULL, buf); \ | ||
| 208 | } | ||
| 209 | show_one_old(sampling_rate); | ||
| 210 | show_one_old(sampling_down_factor); | ||
| 211 | show_one_old(up_threshold); | ||
| 212 | show_one_old(down_threshold); | ||
| 213 | show_one_old(ignore_nice_load); | ||
| 214 | show_one_old(freq_step); | ||
| 215 | show_one_old(sampling_rate_min); | ||
| 216 | show_one_old(sampling_rate_max); | ||
| 217 | |||
| 218 | cpufreq_freq_attr_ro_old(sampling_rate_min); | ||
| 219 | cpufreq_freq_attr_ro_old(sampling_rate_max); | ||
| 220 | |||
| 221 | /*** delete after deprecation time ***/ | ||
| 222 | |||
| 223 | static ssize_t store_sampling_down_factor(struct kobject *a, | 186 | static ssize_t store_sampling_down_factor(struct kobject *a, |
| 224 | struct attribute *b, | 187 | struct attribute *b, |
| 225 | const char *buf, size_t count) | 188 | const char *buf, size_t count) |
| @@ -231,10 +194,7 @@ static ssize_t store_sampling_down_factor(struct kobject *a, | |||
| 231 | if (ret != 1 || input > MAX_SAMPLING_DOWN_FACTOR || input < 1) | 194 | if (ret != 1 || input > MAX_SAMPLING_DOWN_FACTOR || input < 1) |
| 232 | return -EINVAL; | 195 | return -EINVAL; |
| 233 | 196 | ||
| 234 | mutex_lock(&dbs_mutex); | ||
| 235 | dbs_tuners_ins.sampling_down_factor = input; | 197 | dbs_tuners_ins.sampling_down_factor = input; |
| 236 | mutex_unlock(&dbs_mutex); | ||
| 237 | |||
| 238 | return count; | 198 | return count; |
| 239 | } | 199 | } |
| 240 | 200 | ||
| @@ -248,10 +208,7 @@ static ssize_t store_sampling_rate(struct kobject *a, struct attribute *b, | |||
| 248 | if (ret != 1) | 208 | if (ret != 1) |
| 249 | return -EINVAL; | 209 | return -EINVAL; |
| 250 | 210 | ||
| 251 | mutex_lock(&dbs_mutex); | ||
| 252 | dbs_tuners_ins.sampling_rate = max(input, min_sampling_rate); | 211 | dbs_tuners_ins.sampling_rate = max(input, min_sampling_rate); |
| 253 | mutex_unlock(&dbs_mutex); | ||
| 254 | |||
| 255 | return count; | 212 | return count; |
| 256 | } | 213 | } |
| 257 | 214 | ||
| @@ -262,16 +219,11 @@ static ssize_t store_up_threshold(struct kobject *a, struct attribute *b, | |||
| 262 | int ret; | 219 | int ret; |
| 263 | ret = sscanf(buf, "%u", &input); | 220 | ret = sscanf(buf, "%u", &input); |
| 264 | 221 | ||
| 265 | mutex_lock(&dbs_mutex); | ||
| 266 | if (ret != 1 || input > 100 || | 222 | if (ret != 1 || input > 100 || |
| 267 | input <= dbs_tuners_ins.down_threshold) { | 223 | input <= dbs_tuners_ins.down_threshold) |
| 268 | mutex_unlock(&dbs_mutex); | ||
| 269 | return -EINVAL; | 224 | return -EINVAL; |
| 270 | } | ||
| 271 | 225 | ||
| 272 | dbs_tuners_ins.up_threshold = input; | 226 | dbs_tuners_ins.up_threshold = input; |
| 273 | mutex_unlock(&dbs_mutex); | ||
| 274 | |||
| 275 | return count; | 227 | return count; |
| 276 | } | 228 | } |
| 277 | 229 | ||
| @@ -282,17 +234,12 @@ static ssize_t store_down_threshold(struct kobject *a, struct attribute *b, | |||
| 282 | int ret; | 234 | int ret; |
| 283 | ret = sscanf(buf, "%u", &input); | 235 | ret = sscanf(buf, "%u", &input); |
| 284 | 236 | ||
| 285 | mutex_lock(&dbs_mutex); | ||
| 286 | /* cannot be lower than 11 otherwise freq will not fall */ | 237 | /* cannot be lower than 11 otherwise freq will not fall */ |
| 287 | if (ret != 1 || input < 11 || input > 100 || | 238 | if (ret != 1 || input < 11 || input > 100 || |
| 288 | input >= dbs_tuners_ins.up_threshold) { | 239 | input >= dbs_tuners_ins.up_threshold) |
| 289 | mutex_unlock(&dbs_mutex); | ||
| 290 | return -EINVAL; | 240 | return -EINVAL; |
| 291 | } | ||
| 292 | 241 | ||
| 293 | dbs_tuners_ins.down_threshold = input; | 242 | dbs_tuners_ins.down_threshold = input; |
| 294 | mutex_unlock(&dbs_mutex); | ||
| 295 | |||
| 296 | return count; | 243 | return count; |
| 297 | } | 244 | } |
| 298 | 245 | ||
| @@ -311,11 +258,9 @@ static ssize_t store_ignore_nice_load(struct kobject *a, struct attribute *b, | |||
| 311 | if (input > 1) | 258 | if (input > 1) |
| 312 | input = 1; | 259 | input = 1; |
| 313 | 260 | ||
| 314 | mutex_lock(&dbs_mutex); | 261 | if (input == dbs_tuners_ins.ignore_nice) /* nothing to do */ |
| 315 | if (input == dbs_tuners_ins.ignore_nice) { /* nothing to do */ | ||
| 316 | mutex_unlock(&dbs_mutex); | ||
| 317 | return count; | 262 | return count; |
| 318 | } | 263 | |
| 319 | dbs_tuners_ins.ignore_nice = input; | 264 | dbs_tuners_ins.ignore_nice = input; |
| 320 | 265 | ||
| 321 | /* we need to re-evaluate prev_cpu_idle */ | 266 | /* we need to re-evaluate prev_cpu_idle */ |
| @@ -327,8 +272,6 @@ static ssize_t store_ignore_nice_load(struct kobject *a, struct attribute *b, | |||
| 327 | if (dbs_tuners_ins.ignore_nice) | 272 | if (dbs_tuners_ins.ignore_nice) |
| 328 | dbs_info->prev_cpu_nice = kstat_cpu(j).cpustat.nice; | 273 | dbs_info->prev_cpu_nice = kstat_cpu(j).cpustat.nice; |
| 329 | } | 274 | } |
| 330 | mutex_unlock(&dbs_mutex); | ||
| 331 | |||
| 332 | return count; | 275 | return count; |
| 333 | } | 276 | } |
| 334 | 277 | ||
| @@ -347,10 +290,7 @@ static ssize_t store_freq_step(struct kobject *a, struct attribute *b, | |||
| 347 | 290 | ||
| 348 | /* no need to test here if freq_step is zero as the user might actually | 291 | /* no need to test here if freq_step is zero as the user might actually |
| 349 | * want this, they would be crazy though :) */ | 292 | * want this, they would be crazy though :) */ |
| 350 | mutex_lock(&dbs_mutex); | ||
| 351 | dbs_tuners_ins.freq_step = input; | 293 | dbs_tuners_ins.freq_step = input; |
| 352 | mutex_unlock(&dbs_mutex); | ||
| 353 | |||
| 354 | return count; | 294 | return count; |
| 355 | } | 295 | } |
| 356 | 296 | ||
| @@ -362,7 +302,6 @@ define_one_global_rw(ignore_nice_load); | |||
| 362 | define_one_global_rw(freq_step); | 302 | define_one_global_rw(freq_step); |
| 363 | 303 | ||
| 364 | static struct attribute *dbs_attributes[] = { | 304 | static struct attribute *dbs_attributes[] = { |
| 365 | &sampling_rate_max.attr, | ||
| 366 | &sampling_rate_min.attr, | 305 | &sampling_rate_min.attr, |
| 367 | &sampling_rate.attr, | 306 | &sampling_rate.attr, |
| 368 | &sampling_down_factor.attr, | 307 | &sampling_down_factor.attr, |
| @@ -378,49 +317,6 @@ static struct attribute_group dbs_attr_group = { | |||
| 378 | .name = "conservative", | 317 | .name = "conservative", |
| 379 | }; | 318 | }; |
| 380 | 319 | ||
| 381 | /*** delete after deprecation time ***/ | ||
| 382 | |||
| 383 | #define write_one_old(file_name) \ | ||
| 384 | static ssize_t store_##file_name##_old \ | ||
| 385 | (struct cpufreq_policy *unused, const char *buf, size_t count) \ | ||
| 386 | { \ | ||
| 387 | printk_once(KERN_INFO "CPUFREQ: Per core conservative sysfs " \ | ||
| 388 | "interface is deprecated - " #file_name "\n"); \ | ||
| 389 | return store_##file_name(NULL, NULL, buf, count); \ | ||
| 390 | } | ||
| 391 | write_one_old(sampling_rate); | ||
| 392 | write_one_old(sampling_down_factor); | ||
| 393 | write_one_old(up_threshold); | ||
| 394 | write_one_old(down_threshold); | ||
| 395 | write_one_old(ignore_nice_load); | ||
| 396 | write_one_old(freq_step); | ||
| 397 | |||
| 398 | cpufreq_freq_attr_rw_old(sampling_rate); | ||
| 399 | cpufreq_freq_attr_rw_old(sampling_down_factor); | ||
| 400 | cpufreq_freq_attr_rw_old(up_threshold); | ||
| 401 | cpufreq_freq_attr_rw_old(down_threshold); | ||
| 402 | cpufreq_freq_attr_rw_old(ignore_nice_load); | ||
| 403 | cpufreq_freq_attr_rw_old(freq_step); | ||
| 404 | |||
| 405 | static struct attribute *dbs_attributes_old[] = { | ||
| 406 | &sampling_rate_max_old.attr, | ||
| 407 | &sampling_rate_min_old.attr, | ||
| 408 | &sampling_rate_old.attr, | ||
| 409 | &sampling_down_factor_old.attr, | ||
| 410 | &up_threshold_old.attr, | ||
| 411 | &down_threshold_old.attr, | ||
| 412 | &ignore_nice_load_old.attr, | ||
| 413 | &freq_step_old.attr, | ||
| 414 | NULL | ||
| 415 | }; | ||
| 416 | |||
| 417 | static struct attribute_group dbs_attr_group_old = { | ||
| 418 | .attrs = dbs_attributes_old, | ||
| 419 | .name = "conservative", | ||
| 420 | }; | ||
| 421 | |||
| 422 | /*** delete after deprecation time ***/ | ||
| 423 | |||
| 424 | /************************** sysfs end ************************/ | 320 | /************************** sysfs end ************************/ |
| 425 | 321 | ||
| 426 | static void dbs_check_cpu(struct cpu_dbs_info_s *this_dbs_info) | 322 | static void dbs_check_cpu(struct cpu_dbs_info_s *this_dbs_info) |
| @@ -596,12 +492,6 @@ static int cpufreq_governor_dbs(struct cpufreq_policy *policy, | |||
| 596 | 492 | ||
| 597 | mutex_lock(&dbs_mutex); | 493 | mutex_lock(&dbs_mutex); |
| 598 | 494 | ||
| 599 | rc = sysfs_create_group(&policy->kobj, &dbs_attr_group_old); | ||
| 600 | if (rc) { | ||
| 601 | mutex_unlock(&dbs_mutex); | ||
| 602 | return rc; | ||
| 603 | } | ||
| 604 | |||
| 605 | for_each_cpu(j, policy->cpus) { | 495 | for_each_cpu(j, policy->cpus) { |
| 606 | struct cpu_dbs_info_s *j_dbs_info; | 496 | struct cpu_dbs_info_s *j_dbs_info; |
| 607 | j_dbs_info = &per_cpu(cs_cpu_dbs_info, j); | 497 | j_dbs_info = &per_cpu(cs_cpu_dbs_info, j); |
| @@ -664,7 +554,6 @@ static int cpufreq_governor_dbs(struct cpufreq_policy *policy, | |||
| 664 | dbs_timer_exit(this_dbs_info); | 554 | dbs_timer_exit(this_dbs_info); |
| 665 | 555 | ||
| 666 | mutex_lock(&dbs_mutex); | 556 | mutex_lock(&dbs_mutex); |
| 667 | sysfs_remove_group(&policy->kobj, &dbs_attr_group_old); | ||
| 668 | dbs_enable--; | 557 | dbs_enable--; |
| 669 | mutex_destroy(&this_dbs_info->timer_mutex); | 558 | mutex_destroy(&this_dbs_info->timer_mutex); |
| 670 | 559 | ||
diff --git a/drivers/cpufreq/cpufreq_ondemand.c b/drivers/cpufreq/cpufreq_ondemand.c index 58aa85ea5ec6..891360edecdd 100644 --- a/drivers/cpufreq/cpufreq_ondemand.c +++ b/drivers/cpufreq/cpufreq_ondemand.c | |||
| @@ -99,8 +99,7 @@ static DEFINE_PER_CPU(struct cpu_dbs_info_s, od_cpu_dbs_info); | |||
| 99 | static unsigned int dbs_enable; /* number of CPUs using this policy */ | 99 | static unsigned int dbs_enable; /* number of CPUs using this policy */ |
| 100 | 100 | ||
| 101 | /* | 101 | /* |
| 102 | * dbs_mutex protects data in dbs_tuners_ins from concurrent changes on | 102 | * dbs_mutex protects dbs_enable in governor start/stop. |
| 103 | * different CPUs. It protects dbs_enable in governor start/stop. | ||
| 104 | */ | 103 | */ |
| 105 | static DEFINE_MUTEX(dbs_mutex); | 104 | static DEFINE_MUTEX(dbs_mutex); |
| 106 | 105 | ||
| @@ -235,21 +234,12 @@ static void ondemand_powersave_bias_init(void) | |||
| 235 | 234 | ||
| 236 | /************************** sysfs interface ************************/ | 235 | /************************** sysfs interface ************************/ |
| 237 | 236 | ||
| 238 | static ssize_t show_sampling_rate_max(struct kobject *kobj, | ||
| 239 | struct attribute *attr, char *buf) | ||
| 240 | { | ||
| 241 | printk_once(KERN_INFO "CPUFREQ: ondemand sampling_rate_max " | ||
| 242 | "sysfs file is deprecated - used by: %s\n", current->comm); | ||
| 243 | return sprintf(buf, "%u\n", -1U); | ||
| 244 | } | ||
| 245 | |||
| 246 | static ssize_t show_sampling_rate_min(struct kobject *kobj, | 237 | static ssize_t show_sampling_rate_min(struct kobject *kobj, |
| 247 | struct attribute *attr, char *buf) | 238 | struct attribute *attr, char *buf) |
| 248 | { | 239 | { |
| 249 | return sprintf(buf, "%u\n", min_sampling_rate); | 240 | return sprintf(buf, "%u\n", min_sampling_rate); |
| 250 | } | 241 | } |
| 251 | 242 | ||
| 252 | define_one_global_ro(sampling_rate_max); | ||
| 253 | define_one_global_ro(sampling_rate_min); | 243 | define_one_global_ro(sampling_rate_min); |
| 254 | 244 | ||
| 255 | /* cpufreq_ondemand Governor Tunables */ | 245 | /* cpufreq_ondemand Governor Tunables */ |
| @@ -266,32 +256,6 @@ show_one(sampling_down_factor, sampling_down_factor); | |||
| 266 | show_one(ignore_nice_load, ignore_nice); | 256 | show_one(ignore_nice_load, ignore_nice); |
| 267 | show_one(powersave_bias, powersave_bias); | 257 | show_one(powersave_bias, powersave_bias); |
| 268 | 258 | ||
| 269 | /*** delete after deprecation time ***/ | ||
| 270 | |||
| 271 | #define DEPRECATION_MSG(file_name) \ | ||
| 272 | printk_once(KERN_INFO "CPUFREQ: Per core ondemand sysfs " \ | ||
| 273 | "interface is deprecated - " #file_name "\n"); | ||
| 274 | |||
| 275 | #define show_one_old(file_name) \ | ||
| 276 | static ssize_t show_##file_name##_old \ | ||
| 277 | (struct cpufreq_policy *unused, char *buf) \ | ||
| 278 | { \ | ||
| 279 | printk_once(KERN_INFO "CPUFREQ: Per core ondemand sysfs " \ | ||
| 280 | "interface is deprecated - " #file_name "\n"); \ | ||
| 281 | return show_##file_name(NULL, NULL, buf); \ | ||
| 282 | } | ||
| 283 | show_one_old(sampling_rate); | ||
| 284 | show_one_old(up_threshold); | ||
| 285 | show_one_old(ignore_nice_load); | ||
| 286 | show_one_old(powersave_bias); | ||
| 287 | show_one_old(sampling_rate_min); | ||
| 288 | show_one_old(sampling_rate_max); | ||
| 289 | |||
| 290 | cpufreq_freq_attr_ro_old(sampling_rate_min); | ||
| 291 | cpufreq_freq_attr_ro_old(sampling_rate_max); | ||
| 292 | |||
| 293 | /*** delete after deprecation time ***/ | ||
| 294 | |||
| 295 | static ssize_t store_sampling_rate(struct kobject *a, struct attribute *b, | 259 | static ssize_t store_sampling_rate(struct kobject *a, struct attribute *b, |
| 296 | const char *buf, size_t count) | 260 | const char *buf, size_t count) |
| 297 | { | 261 | { |
| @@ -300,11 +264,7 @@ static ssize_t store_sampling_rate(struct kobject *a, struct attribute *b, | |||
| 300 | ret = sscanf(buf, "%u", &input); | 264 | ret = sscanf(buf, "%u", &input); |
| 301 | if (ret != 1) | 265 | if (ret != 1) |
| 302 | return -EINVAL; | 266 | return -EINVAL; |
| 303 | |||
| 304 | mutex_lock(&dbs_mutex); | ||
| 305 | dbs_tuners_ins.sampling_rate = max(input, min_sampling_rate); | 267 | dbs_tuners_ins.sampling_rate = max(input, min_sampling_rate); |
| 306 | mutex_unlock(&dbs_mutex); | ||
| 307 | |||
| 308 | return count; | 268 | return count; |
| 309 | } | 269 | } |
| 310 | 270 | ||
| @@ -317,11 +277,7 @@ static ssize_t store_io_is_busy(struct kobject *a, struct attribute *b, | |||
| 317 | ret = sscanf(buf, "%u", &input); | 277 | ret = sscanf(buf, "%u", &input); |
| 318 | if (ret != 1) | 278 | if (ret != 1) |
| 319 | return -EINVAL; | 279 | return -EINVAL; |
| 320 | |||
| 321 | mutex_lock(&dbs_mutex); | ||
| 322 | dbs_tuners_ins.io_is_busy = !!input; | 280 | dbs_tuners_ins.io_is_busy = !!input; |
| 323 | mutex_unlock(&dbs_mutex); | ||
| 324 | |||
| 325 | return count; | 281 | return count; |
| 326 | } | 282 | } |
| 327 | 283 | ||
| @@ -336,11 +292,7 @@ static ssize_t store_up_threshold(struct kobject *a, struct attribute *b, | |||
| 336 | input < MIN_FREQUENCY_UP_THRESHOLD) { | 292 | input < MIN_FREQUENCY_UP_THRESHOLD) { |
| 337 | return -EINVAL; | 293 | return -EINVAL; |
| 338 | } | 294 | } |
| 339 | |||
| 340 | mutex_lock(&dbs_mutex); | ||
| 341 | dbs_tuners_ins.up_threshold = input; | 295 | dbs_tuners_ins.up_threshold = input; |
| 342 | mutex_unlock(&dbs_mutex); | ||
| 343 | |||
| 344 | return count; | 296 | return count; |
| 345 | } | 297 | } |
| 346 | 298 | ||
| @@ -353,7 +305,6 @@ static ssize_t store_sampling_down_factor(struct kobject *a, | |||
| 353 | 305 | ||
| 354 | if (ret != 1 || input > MAX_SAMPLING_DOWN_FACTOR || input < 1) | 306 | if (ret != 1 || input > MAX_SAMPLING_DOWN_FACTOR || input < 1) |
| 355 | return -EINVAL; | 307 | return -EINVAL; |
| 356 | mutex_lock(&dbs_mutex); | ||
| 357 | dbs_tuners_ins.sampling_down_factor = input; | 308 | dbs_tuners_ins.sampling_down_factor = input; |
| 358 | 309 | ||
| 359 | /* Reset down sampling multiplier in case it was active */ | 310 | /* Reset down sampling multiplier in case it was active */ |
| @@ -362,8 +313,6 @@ static ssize_t store_sampling_down_factor(struct kobject *a, | |||
| 362 | dbs_info = &per_cpu(od_cpu_dbs_info, j); | 313 | dbs_info = &per_cpu(od_cpu_dbs_info, j); |
| 363 | dbs_info->rate_mult = 1; | 314 | dbs_info->rate_mult = 1; |
| 364 | } | 315 | } |
| 365 | mutex_unlock(&dbs_mutex); | ||
| 366 | |||
| 367 | return count; | 316 | return count; |
| 368 | } | 317 | } |
| 369 | 318 | ||
| @@ -382,9 +331,7 @@ static ssize_t store_ignore_nice_load(struct kobject *a, struct attribute *b, | |||
| 382 | if (input > 1) | 331 | if (input > 1) |
| 383 | input = 1; | 332 | input = 1; |
| 384 | 333 | ||
| 385 | mutex_lock(&dbs_mutex); | ||
| 386 | if (input == dbs_tuners_ins.ignore_nice) { /* nothing to do */ | 334 | if (input == dbs_tuners_ins.ignore_nice) { /* nothing to do */ |
| 387 | mutex_unlock(&dbs_mutex); | ||
| 388 | return count; | 335 | return count; |
| 389 | } | 336 | } |
| 390 | dbs_tuners_ins.ignore_nice = input; | 337 | dbs_tuners_ins.ignore_nice = input; |
| @@ -399,8 +346,6 @@ static ssize_t store_ignore_nice_load(struct kobject *a, struct attribute *b, | |||
| 399 | dbs_info->prev_cpu_nice = kstat_cpu(j).cpustat.nice; | 346 | dbs_info->prev_cpu_nice = kstat_cpu(j).cpustat.nice; |
| 400 | 347 | ||
| 401 | } | 348 | } |
| 402 | mutex_unlock(&dbs_mutex); | ||
| 403 | |||
| 404 | return count; | 349 | return count; |
| 405 | } | 350 | } |
| 406 | 351 | ||
| @@ -417,11 +362,8 @@ static ssize_t store_powersave_bias(struct kobject *a, struct attribute *b, | |||
| 417 | if (input > 1000) | 362 | if (input > 1000) |
| 418 | input = 1000; | 363 | input = 1000; |
| 419 | 364 | ||
| 420 | mutex_lock(&dbs_mutex); | ||
| 421 | dbs_tuners_ins.powersave_bias = input; | 365 | dbs_tuners_ins.powersave_bias = input; |
| 422 | ondemand_powersave_bias_init(); | 366 | ondemand_powersave_bias_init(); |
| 423 | mutex_unlock(&dbs_mutex); | ||
| 424 | |||
| 425 | return count; | 367 | return count; |
| 426 | } | 368 | } |
| 427 | 369 | ||
| @@ -433,7 +375,6 @@ define_one_global_rw(ignore_nice_load); | |||
| 433 | define_one_global_rw(powersave_bias); | 375 | define_one_global_rw(powersave_bias); |
| 434 | 376 | ||
| 435 | static struct attribute *dbs_attributes[] = { | 377 | static struct attribute *dbs_attributes[] = { |
| 436 | &sampling_rate_max.attr, | ||
| 437 | &sampling_rate_min.attr, | 378 | &sampling_rate_min.attr, |
| 438 | &sampling_rate.attr, | 379 | &sampling_rate.attr, |
| 439 | &up_threshold.attr, | 380 | &up_threshold.attr, |
| @@ -449,43 +390,6 @@ static struct attribute_group dbs_attr_group = { | |||
| 449 | .name = "ondemand", | 390 | .name = "ondemand", |
| 450 | }; | 391 | }; |
| 451 | 392 | ||
| 452 | /*** delete after deprecation time ***/ | ||
| 453 | |||
| 454 | #define write_one_old(file_name) \ | ||
| 455 | static ssize_t store_##file_name##_old \ | ||
| 456 | (struct cpufreq_policy *unused, const char *buf, size_t count) \ | ||
| 457 | { \ | ||
| 458 | printk_once(KERN_INFO "CPUFREQ: Per core ondemand sysfs " \ | ||
| 459 | "interface is deprecated - " #file_name "\n"); \ | ||
| 460 | return store_##file_name(NULL, NULL, buf, count); \ | ||
| 461 | } | ||
| 462 | write_one_old(sampling_rate); | ||
| 463 | write_one_old(up_threshold); | ||
| 464 | write_one_old(ignore_nice_load); | ||
| 465 | write_one_old(powersave_bias); | ||
| 466 | |||
| 467 | cpufreq_freq_attr_rw_old(sampling_rate); | ||
| 468 | cpufreq_freq_attr_rw_old(up_threshold); | ||
| 469 | cpufreq_freq_attr_rw_old(ignore_nice_load); | ||
| 470 | cpufreq_freq_attr_rw_old(powersave_bias); | ||
| 471 | |||
| 472 | static struct attribute *dbs_attributes_old[] = { | ||
| 473 | &sampling_rate_max_old.attr, | ||
| 474 | &sampling_rate_min_old.attr, | ||
| 475 | &sampling_rate_old.attr, | ||
| 476 | &up_threshold_old.attr, | ||
| 477 | &ignore_nice_load_old.attr, | ||
| 478 | &powersave_bias_old.attr, | ||
| 479 | NULL | ||
| 480 | }; | ||
| 481 | |||
| 482 | static struct attribute_group dbs_attr_group_old = { | ||
| 483 | .attrs = dbs_attributes_old, | ||
| 484 | .name = "ondemand", | ||
| 485 | }; | ||
| 486 | |||
| 487 | /*** delete after deprecation time ***/ | ||
| 488 | |||
| 489 | /************************** sysfs end ************************/ | 393 | /************************** sysfs end ************************/ |
| 490 | 394 | ||
| 491 | static void dbs_freq_increase(struct cpufreq_policy *p, unsigned int freq) | 395 | static void dbs_freq_increase(struct cpufreq_policy *p, unsigned int freq) |
| @@ -642,12 +546,7 @@ static void do_dbs_timer(struct work_struct *work) | |||
| 642 | unsigned int cpu = dbs_info->cpu; | 546 | unsigned int cpu = dbs_info->cpu; |
| 643 | int sample_type = dbs_info->sample_type; | 547 | int sample_type = dbs_info->sample_type; |
| 644 | 548 | ||
| 645 | /* We want all CPUs to do sampling nearly on same jiffy */ | 549 | int delay; |
| 646 | int delay = usecs_to_jiffies(dbs_tuners_ins.sampling_rate | ||
| 647 | * dbs_info->rate_mult); | ||
| 648 | |||
| 649 | if (num_online_cpus() > 1) | ||
| 650 | delay -= jiffies % delay; | ||
| 651 | 550 | ||
| 652 | mutex_lock(&dbs_info->timer_mutex); | 551 | mutex_lock(&dbs_info->timer_mutex); |
| 653 | 552 | ||
| @@ -660,10 +559,20 @@ static void do_dbs_timer(struct work_struct *work) | |||
| 660 | /* Setup timer for SUB_SAMPLE */ | 559 | /* Setup timer for SUB_SAMPLE */ |
| 661 | dbs_info->sample_type = DBS_SUB_SAMPLE; | 560 | dbs_info->sample_type = DBS_SUB_SAMPLE; |
| 662 | delay = dbs_info->freq_hi_jiffies; | 561 | delay = dbs_info->freq_hi_jiffies; |
| 562 | } else { | ||
| 563 | /* We want all CPUs to do sampling nearly on | ||
| 564 | * same jiffy | ||
| 565 | */ | ||
| 566 | delay = usecs_to_jiffies(dbs_tuners_ins.sampling_rate | ||
| 567 | * dbs_info->rate_mult); | ||
| 568 | |||
| 569 | if (num_online_cpus() > 1) | ||
| 570 | delay -= jiffies % delay; | ||
| 663 | } | 571 | } |
| 664 | } else { | 572 | } else { |
| 665 | __cpufreq_driver_target(dbs_info->cur_policy, | 573 | __cpufreq_driver_target(dbs_info->cur_policy, |
| 666 | dbs_info->freq_lo, CPUFREQ_RELATION_H); | 574 | dbs_info->freq_lo, CPUFREQ_RELATION_H); |
| 575 | delay = dbs_info->freq_lo_jiffies; | ||
| 667 | } | 576 | } |
| 668 | schedule_delayed_work_on(cpu, &dbs_info->work, delay); | 577 | schedule_delayed_work_on(cpu, &dbs_info->work, delay); |
| 669 | mutex_unlock(&dbs_info->timer_mutex); | 578 | mutex_unlock(&dbs_info->timer_mutex); |
| @@ -727,12 +636,6 @@ static int cpufreq_governor_dbs(struct cpufreq_policy *policy, | |||
| 727 | 636 | ||
| 728 | mutex_lock(&dbs_mutex); | 637 | mutex_lock(&dbs_mutex); |
| 729 | 638 | ||
| 730 | rc = sysfs_create_group(&policy->kobj, &dbs_attr_group_old); | ||
| 731 | if (rc) { | ||
| 732 | mutex_unlock(&dbs_mutex); | ||
| 733 | return rc; | ||
| 734 | } | ||
| 735 | |||
| 736 | dbs_enable++; | 639 | dbs_enable++; |
| 737 | for_each_cpu(j, policy->cpus) { | 640 | for_each_cpu(j, policy->cpus) { |
| 738 | struct cpu_dbs_info_s *j_dbs_info; | 641 | struct cpu_dbs_info_s *j_dbs_info; |
| @@ -785,7 +688,6 @@ static int cpufreq_governor_dbs(struct cpufreq_policy *policy, | |||
| 785 | dbs_timer_exit(this_dbs_info); | 688 | dbs_timer_exit(this_dbs_info); |
| 786 | 689 | ||
| 787 | mutex_lock(&dbs_mutex); | 690 | mutex_lock(&dbs_mutex); |
| 788 | sysfs_remove_group(&policy->kobj, &dbs_attr_group_old); | ||
| 789 | mutex_destroy(&this_dbs_info->timer_mutex); | 691 | mutex_destroy(&this_dbs_info->timer_mutex); |
| 790 | dbs_enable--; | 692 | dbs_enable--; |
| 791 | mutex_unlock(&dbs_mutex); | 693 | mutex_unlock(&dbs_mutex); |
diff --git a/include/linux/cpufreq.h b/include/linux/cpufreq.h index c3e9de8321c6..9343dd3de858 100644 --- a/include/linux/cpufreq.h +++ b/include/linux/cpufreq.h | |||
| @@ -230,7 +230,7 @@ struct cpufreq_driver { | |||
| 230 | int (*bios_limit) (int cpu, unsigned int *limit); | 230 | int (*bios_limit) (int cpu, unsigned int *limit); |
| 231 | 231 | ||
| 232 | int (*exit) (struct cpufreq_policy *policy); | 232 | int (*exit) (struct cpufreq_policy *policy); |
| 233 | int (*suspend) (struct cpufreq_policy *policy, pm_message_t pmsg); | 233 | int (*suspend) (struct cpufreq_policy *policy); |
| 234 | int (*resume) (struct cpufreq_policy *policy); | 234 | int (*resume) (struct cpufreq_policy *policy); |
| 235 | struct freq_attr **attr; | 235 | struct freq_attr **attr; |
| 236 | }; | 236 | }; |
| @@ -281,19 +281,10 @@ __ATTR(_name, 0444, show_##_name, NULL) | |||
| 281 | static struct freq_attr _name = \ | 281 | static struct freq_attr _name = \ |
| 282 | __ATTR(_name, _perm, show_##_name, NULL) | 282 | __ATTR(_name, _perm, show_##_name, NULL) |
| 283 | 283 | ||
| 284 | #define cpufreq_freq_attr_ro_old(_name) \ | ||
| 285 | static struct freq_attr _name##_old = \ | ||
| 286 | __ATTR(_name, 0444, show_##_name##_old, NULL) | ||
| 287 | |||
| 288 | #define cpufreq_freq_attr_rw(_name) \ | 284 | #define cpufreq_freq_attr_rw(_name) \ |
| 289 | static struct freq_attr _name = \ | 285 | static struct freq_attr _name = \ |
| 290 | __ATTR(_name, 0644, show_##_name, store_##_name) | 286 | __ATTR(_name, 0644, show_##_name, store_##_name) |
| 291 | 287 | ||
| 292 | #define cpufreq_freq_attr_rw_old(_name) \ | ||
| 293 | static struct freq_attr _name##_old = \ | ||
| 294 | __ATTR(_name, 0644, show_##_name##_old, store_##_name##_old) | ||
| 295 | |||
| 296 | |||
| 297 | struct global_attr { | 288 | struct global_attr { |
| 298 | struct attribute attr; | 289 | struct attribute attr; |
| 299 | ssize_t (*show)(struct kobject *kobj, | 290 | ssize_t (*show)(struct kobject *kobj, |
