aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas Renninger <trenn@suse.de>2009-07-24 09:25:05 -0400
committerDave Jones <davej@redhat.com>2009-09-01 12:45:14 -0400
commit8aa84ad8d6c740a04386f599694609ee4998e82e (patch)
treeb5bedf4203f038c0f624d3240d9d23dbc9e20e63
parent4bfa042cd304aa48cf05cd0a13c2d0794a675c0e (diff)
[CPUFREQ] Introduce global, not per core: /sys/devices/system/cpu/cpufreq
Currently everything in the cpufreq layer is per core based. This does not reflect reality, for example ondemand on conservative governors have global sysfs variables. Introduce a global cpufreq directory and add the kobject to the governor struct, so that governors can easily access it. The directory is initialized in the cpufreq_core_init initcall and thus will always be created if cpufreq is compiled in, even if no cpufreq driver is active later. Signed-off-by: Thomas Renninger <trenn@suse.de> Signed-off-by: Dave Jones <davej@redhat.com>
-rw-r--r--drivers/cpufreq/cpufreq.c9
-rw-r--r--include/linux/cpufreq.h10
2 files changed, 18 insertions, 1 deletions
diff --git a/drivers/cpufreq/cpufreq.c b/drivers/cpufreq/cpufreq.c
index bbd5c2164ab6..4da28444b235 100644
--- a/drivers/cpufreq/cpufreq.c
+++ b/drivers/cpufreq/cpufreq.c
@@ -686,6 +686,9 @@ static struct attribute *default_attrs[] = {
686 NULL 686 NULL
687}; 687};
688 688
689struct kobject *cpufreq_global_kobject;
690EXPORT_SYMBOL(cpufreq_global_kobject);
691
689#define to_policy(k) container_of(k, struct cpufreq_policy, kobj) 692#define to_policy(k) container_of(k, struct cpufreq_policy, kobj)
690#define to_attr(a) container_of(a, struct freq_attr, attr) 693#define to_attr(a) container_of(a, struct freq_attr, attr)
691 694
@@ -1935,7 +1938,11 @@ static int __init cpufreq_core_init(void)
1935 per_cpu(policy_cpu, cpu) = -1; 1938 per_cpu(policy_cpu, cpu) = -1;
1936 init_rwsem(&per_cpu(cpu_policy_rwsem, cpu)); 1939 init_rwsem(&per_cpu(cpu_policy_rwsem, cpu));
1937 } 1940 }
1941
1942 cpufreq_global_kobject = kobject_create_and_add("cpufreq",
1943 &cpu_sysdev_class.kset.kobj);
1944 BUG_ON(!cpufreq_global_kobject);
1945
1938 return 0; 1946 return 0;
1939} 1947}
1940
1941core_initcall(cpufreq_core_init); 1948core_initcall(cpufreq_core_init);
diff --git a/include/linux/cpufreq.h b/include/linux/cpufreq.h
index 161042746afc..44717eb47639 100644
--- a/include/linux/cpufreq.h
+++ b/include/linux/cpufreq.h
@@ -65,6 +65,9 @@ static inline int cpufreq_unregister_notifier(struct notifier_block *nb,
65 65
66struct cpufreq_governor; 66struct cpufreq_governor;
67 67
68/* /sys/devices/system/cpu/cpufreq: entry point for global variables */
69extern struct kobject *cpufreq_global_kobject;
70
68#define CPUFREQ_ETERNAL (-1) 71#define CPUFREQ_ETERNAL (-1)
69struct cpufreq_cpuinfo { 72struct cpufreq_cpuinfo {
70 unsigned int max_freq; 73 unsigned int max_freq;
@@ -274,6 +277,13 @@ struct freq_attr {
274 ssize_t (*store)(struct cpufreq_policy *, const char *, size_t count); 277 ssize_t (*store)(struct cpufreq_policy *, const char *, size_t count);
275}; 278};
276 279
280struct global_attr {
281 struct attribute attr;
282 ssize_t (*show)(struct kobject *kobj,
283 struct attribute *attr, char *buf);
284 ssize_t (*store)(struct kobject *a, struct attribute *b,
285 const char *c, size_t count);
286};
277 287
278/********************************************************************* 288/*********************************************************************
279 * CPUFREQ 2.6. INTERFACE * 289 * CPUFREQ 2.6. INTERFACE *