diff options
| author | Thomas Renninger <trenn@suse.de> | 2009-10-01 13:49:28 -0400 |
|---|---|---|
| committer | Dave Jones <davej@redhat.com> | 2009-11-24 13:33:34 -0500 |
| commit | 49b015ce38edeb484fb2efa09048c23e903f49d6 (patch) | |
| tree | e8a208ef45962afb3d953cf2e809540db0e40371 | |
| parent | 0cda8b91f2e096bbef1cb05f23c42e423eae7728 (diff) | |
[CPUFREQ] Use global sysfs cpufreq structure for conservative governor tunings
Same adustments that have been added to the ondemand recently.
Signed-off-by: Thomas Renninger <trenn@suse.de>
Signed-off-by: Dave Jones <davej@redhat.com>
| -rw-r--r-- | drivers/cpufreq/cpufreq_conservative.c | 129 |
1 files changed, 110 insertions, 19 deletions
diff --git a/drivers/cpufreq/cpufreq_conservative.c b/drivers/cpufreq/cpufreq_conservative.c index c7b081b839ff..599a40b25cb0 100644 --- a/drivers/cpufreq/cpufreq_conservative.c +++ b/drivers/cpufreq/cpufreq_conservative.c | |||
| @@ -164,20 +164,22 @@ static struct notifier_block dbs_cpufreq_notifier_block = { | |||
| 164 | }; | 164 | }; |
| 165 | 165 | ||
| 166 | /************************** sysfs interface ************************/ | 166 | /************************** sysfs interface ************************/ |
| 167 | static ssize_t show_sampling_rate_max(struct cpufreq_policy *policy, char *buf) | 167 | static ssize_t show_sampling_rate_max(struct kobject *kobj, |
| 168 | struct attribute *attr, char *buf) | ||
| 168 | { | 169 | { |
| 169 | printk_once(KERN_INFO "CPUFREQ: conservative sampling_rate_max " | 170 | printk_once(KERN_INFO "CPUFREQ: conservative sampling_rate_max " |
| 170 | "sysfs file is deprecated - used by: %s\n", current->comm); | 171 | "sysfs file is deprecated - used by: %s\n", current->comm); |
| 171 | return sprintf(buf, "%u\n", -1U); | 172 | return sprintf(buf, "%u\n", -1U); |
| 172 | } | 173 | } |
| 173 | 174 | ||
| 174 | static ssize_t show_sampling_rate_min(struct cpufreq_policy *policy, char *buf) | 175 | static ssize_t show_sampling_rate_min(struct kobject *kobj, |
| 176 | struct attribute *attr, char *buf) | ||
| 175 | { | 177 | { |
| 176 | return sprintf(buf, "%u\n", min_sampling_rate); | 178 | return sprintf(buf, "%u\n", min_sampling_rate); |
| 177 | } | 179 | } |
| 178 | 180 | ||
| 179 | #define define_one_ro(_name) \ | 181 | #define define_one_ro(_name) \ |
| 180 | static struct freq_attr _name = \ | 182 | static struct global_attr _name = \ |
| 181 | __ATTR(_name, 0444, show_##_name, NULL) | 183 | __ATTR(_name, 0444, show_##_name, NULL) |
| 182 | 184 | ||
| 183 | define_one_ro(sampling_rate_max); | 185 | define_one_ro(sampling_rate_max); |
| @@ -186,7 +188,7 @@ define_one_ro(sampling_rate_min); | |||
| 186 | /* cpufreq_conservative Governor Tunables */ | 188 | /* cpufreq_conservative Governor Tunables */ |
| 187 | #define show_one(file_name, object) \ | 189 | #define show_one(file_name, object) \ |
| 188 | static ssize_t show_##file_name \ | 190 | static ssize_t show_##file_name \ |
| 189 | (struct cpufreq_policy *unused, char *buf) \ | 191 | (struct kobject *kobj, struct attribute *attr, char *buf) \ |
| 190 | { \ | 192 | { \ |
| 191 | return sprintf(buf, "%u\n", dbs_tuners_ins.object); \ | 193 | return sprintf(buf, "%u\n", dbs_tuners_ins.object); \ |
| 192 | } | 194 | } |
| @@ -197,8 +199,40 @@ show_one(down_threshold, down_threshold); | |||
| 197 | show_one(ignore_nice_load, ignore_nice); | 199 | show_one(ignore_nice_load, ignore_nice); |
| 198 | show_one(freq_step, freq_step); | 200 | show_one(freq_step, freq_step); |
| 199 | 201 | ||
| 200 | static ssize_t store_sampling_down_factor(struct cpufreq_policy *unused, | 202 | /*** delete after deprecation time ***/ |
| 201 | const char *buf, size_t count) | 203 | #define DEPRECATION_MSG(file_name) \ |
| 204 | printk_once(KERN_INFO "CPUFREQ: Per core conservative sysfs " \ | ||
| 205 | "interface is deprecated - " #file_name "\n"); | ||
| 206 | |||
| 207 | #define show_one_old(file_name) \ | ||
| 208 | static ssize_t show_##file_name##_old \ | ||
| 209 | (struct cpufreq_policy *unused, char *buf) \ | ||
| 210 | { \ | ||
| 211 | printk_once(KERN_INFO "CPUFREQ: Per core conservative sysfs " \ | ||
| 212 | "interface is deprecated - " #file_name "\n"); \ | ||
| 213 | return show_##file_name(NULL, NULL, buf); \ | ||
| 214 | } | ||
| 215 | show_one_old(sampling_rate); | ||
| 216 | show_one_old(sampling_down_factor); | ||
| 217 | show_one_old(up_threshold); | ||
| 218 | show_one_old(down_threshold); | ||
| 219 | show_one_old(ignore_nice_load); | ||
| 220 | show_one_old(freq_step); | ||
| 221 | show_one_old(sampling_rate_min); | ||
| 222 | show_one_old(sampling_rate_max); | ||
| 223 | |||
| 224 | #define define_one_ro_old(object, _name) \ | ||
| 225 | static struct freq_attr object = \ | ||
| 226 | __ATTR(_name, 0444, show_##_name##_old, NULL) | ||
| 227 | |||
| 228 | define_one_ro_old(sampling_rate_min_old, sampling_rate_min); | ||
| 229 | define_one_ro_old(sampling_rate_max_old, sampling_rate_max); | ||
| 230 | |||
| 231 | /*** delete after deprecation time ***/ | ||
| 232 | |||
| 233 | static ssize_t store_sampling_down_factor(struct kobject *a, | ||
| 234 | struct attribute *b, | ||
| 235 | const char *buf, size_t count) | ||
| 202 | { | 236 | { |
| 203 | unsigned int input; | 237 | unsigned int input; |
| 204 | int ret; | 238 | int ret; |
| @@ -214,8 +248,8 @@ static ssize_t store_sampling_down_factor(struct cpufreq_policy *unused, | |||
| 214 | return count; | 248 | return count; |
| 215 | } | 249 | } |
| 216 | 250 | ||
| 217 | static ssize_t store_sampling_rate(struct cpufreq_policy *unused, | 251 | static ssize_t store_sampling_rate(struct kobject *a, struct attribute *b, |
| 218 | const char *buf, size_t count) | 252 | const char *buf, size_t count) |
| 219 | { | 253 | { |
| 220 | unsigned int input; | 254 | unsigned int input; |
| 221 | int ret; | 255 | int ret; |
| @@ -231,8 +265,8 @@ static ssize_t store_sampling_rate(struct cpufreq_policy *unused, | |||
| 231 | return count; | 265 | return count; |
| 232 | } | 266 | } |
| 233 | 267 | ||
| 234 | static ssize_t store_up_threshold(struct cpufreq_policy *unused, | 268 | static ssize_t store_up_threshold(struct kobject *a, struct attribute *b, |
| 235 | const char *buf, size_t count) | 269 | const char *buf, size_t count) |
| 236 | { | 270 | { |
| 237 | unsigned int input; | 271 | unsigned int input; |
| 238 | int ret; | 272 | int ret; |
| @@ -251,8 +285,8 @@ static ssize_t store_up_threshold(struct cpufreq_policy *unused, | |||
| 251 | return count; | 285 | return count; |
| 252 | } | 286 | } |
| 253 | 287 | ||
| 254 | static ssize_t store_down_threshold(struct cpufreq_policy *unused, | 288 | static ssize_t store_down_threshold(struct kobject *a, struct attribute *b, |
| 255 | const char *buf, size_t count) | 289 | const char *buf, size_t count) |
| 256 | { | 290 | { |
| 257 | unsigned int input; | 291 | unsigned int input; |
| 258 | int ret; | 292 | int ret; |
| @@ -272,8 +306,8 @@ static ssize_t store_down_threshold(struct cpufreq_policy *unused, | |||
| 272 | return count; | 306 | return count; |
| 273 | } | 307 | } |
| 274 | 308 | ||
| 275 | static ssize_t store_ignore_nice_load(struct cpufreq_policy *policy, | 309 | static ssize_t store_ignore_nice_load(struct kobject *a, struct attribute *b, |
| 276 | const char *buf, size_t count) | 310 | const char *buf, size_t count) |
| 277 | { | 311 | { |
| 278 | unsigned int input; | 312 | unsigned int input; |
| 279 | int ret; | 313 | int ret; |
| @@ -308,8 +342,8 @@ static ssize_t store_ignore_nice_load(struct cpufreq_policy *policy, | |||
| 308 | return count; | 342 | return count; |
| 309 | } | 343 | } |
| 310 | 344 | ||
| 311 | static ssize_t store_freq_step(struct cpufreq_policy *policy, | 345 | static ssize_t store_freq_step(struct kobject *a, struct attribute *b, |
| 312 | const char *buf, size_t count) | 346 | const char *buf, size_t count) |
| 313 | { | 347 | { |
| 314 | unsigned int input; | 348 | unsigned int input; |
| 315 | int ret; | 349 | int ret; |
| @@ -331,7 +365,7 @@ static ssize_t store_freq_step(struct cpufreq_policy *policy, | |||
| 331 | } | 365 | } |
| 332 | 366 | ||
| 333 | #define define_one_rw(_name) \ | 367 | #define define_one_rw(_name) \ |
| 334 | static struct freq_attr _name = \ | 368 | static struct global_attr _name = \ |
| 335 | __ATTR(_name, 0644, show_##_name, store_##_name) | 369 | __ATTR(_name, 0644, show_##_name, store_##_name) |
| 336 | 370 | ||
| 337 | define_one_rw(sampling_rate); | 371 | define_one_rw(sampling_rate); |
| @@ -358,6 +392,53 @@ static struct attribute_group dbs_attr_group = { | |||
| 358 | .name = "conservative", | 392 | .name = "conservative", |
| 359 | }; | 393 | }; |
| 360 | 394 | ||
| 395 | /*** delete after deprecation time ***/ | ||
| 396 | |||
| 397 | #define write_one_old(file_name) \ | ||
| 398 | static ssize_t store_##file_name##_old \ | ||
| 399 | (struct cpufreq_policy *unused, const char *buf, size_t count) \ | ||
| 400 | { \ | ||
| 401 | printk_once(KERN_INFO "CPUFREQ: Per core conservative sysfs " \ | ||
| 402 | "interface is deprecated - " #file_name "\n"); \ | ||
| 403 | return store_##file_name(NULL, NULL, buf, count); \ | ||
| 404 | } | ||
| 405 | write_one_old(sampling_rate); | ||
| 406 | write_one_old(sampling_down_factor); | ||
| 407 | write_one_old(up_threshold); | ||
| 408 | write_one_old(down_threshold); | ||
| 409 | write_one_old(ignore_nice_load); | ||
| 410 | write_one_old(freq_step); | ||
| 411 | |||
| 412 | #define define_one_rw_old(object, _name) \ | ||
| 413 | static struct freq_attr object = \ | ||
| 414 | __ATTR(_name, 0644, show_##_name##_old, store_##_name##_old) | ||
| 415 | |||
| 416 | define_one_rw_old(sampling_rate_old, sampling_rate); | ||
| 417 | define_one_rw_old(sampling_down_factor_old, sampling_down_factor); | ||
| 418 | define_one_rw_old(up_threshold_old, up_threshold); | ||
| 419 | define_one_rw_old(down_threshold_old, down_threshold); | ||
| 420 | define_one_rw_old(ignore_nice_load_old, ignore_nice_load); | ||
| 421 | define_one_rw_old(freq_step_old, freq_step); | ||
| 422 | |||
| 423 | static struct attribute *dbs_attributes_old[] = { | ||
| 424 | &sampling_rate_max_old.attr, | ||
| 425 | &sampling_rate_min_old.attr, | ||
| 426 | &sampling_rate_old.attr, | ||
| 427 | &sampling_down_factor_old.attr, | ||
| 428 | &up_threshold_old.attr, | ||
| 429 | &down_threshold_old.attr, | ||
| 430 | &ignore_nice_load_old.attr, | ||
| 431 | &freq_step_old.attr, | ||
| 432 | NULL | ||
| 433 | }; | ||
| 434 | |||
| 435 | static struct attribute_group dbs_attr_group_old = { | ||
| 436 | .attrs = dbs_attributes_old, | ||
| 437 | .name = "conservative", | ||
| 438 | }; | ||
| 439 | |||
| 440 | /*** delete after deprecation time ***/ | ||
| 441 | |||
| 361 | /************************** sysfs end ************************/ | 442 | /************************** sysfs end ************************/ |
| 362 | 443 | ||
| 363 | static void dbs_check_cpu(struct cpu_dbs_info_s *this_dbs_info) | 444 | static void dbs_check_cpu(struct cpu_dbs_info_s *this_dbs_info) |
| @@ -530,7 +611,7 @@ static int cpufreq_governor_dbs(struct cpufreq_policy *policy, | |||
| 530 | 611 | ||
| 531 | mutex_lock(&dbs_mutex); | 612 | mutex_lock(&dbs_mutex); |
| 532 | 613 | ||
| 533 | rc = sysfs_create_group(&policy->kobj, &dbs_attr_group); | 614 | rc = sysfs_create_group(&policy->kobj, &dbs_attr_group_old); |
| 534 | if (rc) { | 615 | if (rc) { |
| 535 | mutex_unlock(&dbs_mutex); | 616 | mutex_unlock(&dbs_mutex); |
| 536 | return rc; | 617 | return rc; |
| @@ -564,6 +645,13 @@ static int cpufreq_governor_dbs(struct cpufreq_policy *policy, | |||
| 564 | if (latency == 0) | 645 | if (latency == 0) |
| 565 | latency = 1; | 646 | latency = 1; |
| 566 | 647 | ||
| 648 | rc = sysfs_create_group(cpufreq_global_kobject, | ||
| 649 | &dbs_attr_group); | ||
| 650 | if (rc) { | ||
| 651 | mutex_unlock(&dbs_mutex); | ||
| 652 | return rc; | ||
| 653 | } | ||
| 654 | |||
| 567 | /* | 655 | /* |
| 568 | * conservative does not implement micro like ondemand | 656 | * conservative does not implement micro like ondemand |
| 569 | * governor, thus we are bound to jiffes/HZ | 657 | * governor, thus we are bound to jiffes/HZ |
| @@ -591,7 +679,7 @@ static int cpufreq_governor_dbs(struct cpufreq_policy *policy, | |||
| 591 | dbs_timer_exit(this_dbs_info); | 679 | dbs_timer_exit(this_dbs_info); |
| 592 | 680 | ||
| 593 | mutex_lock(&dbs_mutex); | 681 | mutex_lock(&dbs_mutex); |
| 594 | sysfs_remove_group(&policy->kobj, &dbs_attr_group); | 682 | sysfs_remove_group(&policy->kobj, &dbs_attr_group_old); |
| 595 | dbs_enable--; | 683 | dbs_enable--; |
| 596 | mutex_destroy(&this_dbs_info->timer_mutex); | 684 | mutex_destroy(&this_dbs_info->timer_mutex); |
| 597 | 685 | ||
| @@ -605,6 +693,9 @@ static int cpufreq_governor_dbs(struct cpufreq_policy *policy, | |||
| 605 | CPUFREQ_TRANSITION_NOTIFIER); | 693 | CPUFREQ_TRANSITION_NOTIFIER); |
| 606 | 694 | ||
| 607 | mutex_unlock(&dbs_mutex); | 695 | mutex_unlock(&dbs_mutex); |
| 696 | if (!dbs_enable) | ||
| 697 | sysfs_remove_group(cpufreq_global_kobject, | ||
| 698 | &dbs_attr_group); | ||
| 608 | 699 | ||
| 609 | break; | 700 | break; |
| 610 | 701 | ||
