aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/cpufreq
diff options
context:
space:
mode:
authorThomas Renninger <trenn@suse.de>2009-10-01 13:49:28 -0400
committerDave Jones <davej@redhat.com>2009-11-24 13:33:34 -0500
commit49b015ce38edeb484fb2efa09048c23e903f49d6 (patch)
treee8a208ef45962afb3d953cf2e809540db0e40371 /drivers/cpufreq
parent0cda8b91f2e096bbef1cb05f23c42e423eae7728 (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>
Diffstat (limited to 'drivers/cpufreq')
-rw-r--r--drivers/cpufreq/cpufreq_conservative.c129
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 ************************/
167static ssize_t show_sampling_rate_max(struct cpufreq_policy *policy, char *buf) 167static 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
174static ssize_t show_sampling_rate_min(struct cpufreq_policy *policy, char *buf) 175static 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) \
180static struct freq_attr _name = \ 182static struct global_attr _name = \
181__ATTR(_name, 0444, show_##_name, NULL) 183__ATTR(_name, 0444, show_##_name, NULL)
182 184
183define_one_ro(sampling_rate_max); 185define_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) \
188static ssize_t show_##file_name \ 190static 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);
197show_one(ignore_nice_load, ignore_nice); 199show_one(ignore_nice_load, ignore_nice);
198show_one(freq_step, freq_step); 200show_one(freq_step, freq_step);
199 201
200static 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) \
208static 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}
215show_one_old(sampling_rate);
216show_one_old(sampling_down_factor);
217show_one_old(up_threshold);
218show_one_old(down_threshold);
219show_one_old(ignore_nice_load);
220show_one_old(freq_step);
221show_one_old(sampling_rate_min);
222show_one_old(sampling_rate_max);
223
224#define define_one_ro_old(object, _name) \
225static struct freq_attr object = \
226__ATTR(_name, 0444, show_##_name##_old, NULL)
227
228define_one_ro_old(sampling_rate_min_old, sampling_rate_min);
229define_one_ro_old(sampling_rate_max_old, sampling_rate_max);
230
231/*** delete after deprecation time ***/
232
233static 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
217static ssize_t store_sampling_rate(struct cpufreq_policy *unused, 251static 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
234static ssize_t store_up_threshold(struct cpufreq_policy *unused, 268static 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
254static ssize_t store_down_threshold(struct cpufreq_policy *unused, 288static 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
275static ssize_t store_ignore_nice_load(struct cpufreq_policy *policy, 309static 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
311static ssize_t store_freq_step(struct cpufreq_policy *policy, 345static 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) \
334static struct freq_attr _name = \ 368static struct global_attr _name = \
335__ATTR(_name, 0644, show_##_name, store_##_name) 369__ATTR(_name, 0644, show_##_name, store_##_name)
336 370
337define_one_rw(sampling_rate); 371define_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) \
398static 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}
405write_one_old(sampling_rate);
406write_one_old(sampling_down_factor);
407write_one_old(up_threshold);
408write_one_old(down_threshold);
409write_one_old(ignore_nice_load);
410write_one_old(freq_step);
411
412#define define_one_rw_old(object, _name) \
413static struct freq_attr object = \
414__ATTR(_name, 0644, show_##_name##_old, store_##_name##_old)
415
416define_one_rw_old(sampling_rate_old, sampling_rate);
417define_one_rw_old(sampling_down_factor_old, sampling_down_factor);
418define_one_rw_old(up_threshold_old, up_threshold);
419define_one_rw_old(down_threshold_old, down_threshold);
420define_one_rw_old(ignore_nice_load_old, ignore_nice_load);
421define_one_rw_old(freq_step_old, freq_step);
422
423static 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
435static 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
363static void dbs_check_cpu(struct cpu_dbs_info_s *this_dbs_info) 444static 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