|
@@ -678,9 +678,6 @@ static struct attribute *default_attrs[] = {
|
|
|
NULL
|
|
|
};
|
|
|
|
|
|
-struct kobject *cpufreq_global_kobject;
|
|
|
-EXPORT_SYMBOL(cpufreq_global_kobject);
|
|
|
-
|
|
|
#define to_policy(k) container_of(k, struct cpufreq_policy, kobj)
|
|
|
#define to_attr(a) container_of(a, struct freq_attr, attr)
|
|
|
|
|
@@ -751,6 +748,49 @@ static struct kobj_type ktype_cpufreq = {
|
|
|
.release = cpufreq_sysfs_release,
|
|
|
};
|
|
|
|
|
|
+struct kobject *cpufreq_global_kobject;
|
|
|
+EXPORT_SYMBOL(cpufreq_global_kobject);
|
|
|
+
|
|
|
+static int cpufreq_global_kobject_usage;
|
|
|
+
|
|
|
+int cpufreq_get_global_kobject(void)
|
|
|
+{
|
|
|
+ if (!cpufreq_global_kobject_usage++)
|
|
|
+ return kobject_add(cpufreq_global_kobject,
|
|
|
+ &cpu_subsys.dev_root->kobj, "%s", "cpufreq");
|
|
|
+
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+EXPORT_SYMBOL(cpufreq_get_global_kobject);
|
|
|
+
|
|
|
+void cpufreq_put_global_kobject(void)
|
|
|
+{
|
|
|
+ if (!--cpufreq_global_kobject_usage)
|
|
|
+ kobject_del(cpufreq_global_kobject);
|
|
|
+}
|
|
|
+EXPORT_SYMBOL(cpufreq_put_global_kobject);
|
|
|
+
|
|
|
+int cpufreq_sysfs_create_file(const struct attribute *attr)
|
|
|
+{
|
|
|
+ int ret = cpufreq_get_global_kobject();
|
|
|
+
|
|
|
+ if (!ret) {
|
|
|
+ ret = sysfs_create_file(cpufreq_global_kobject, attr);
|
|
|
+ if (ret)
|
|
|
+ cpufreq_put_global_kobject();
|
|
|
+ }
|
|
|
+
|
|
|
+ return ret;
|
|
|
+}
|
|
|
+EXPORT_SYMBOL(cpufreq_sysfs_create_file);
|
|
|
+
|
|
|
+void cpufreq_sysfs_remove_file(const struct attribute *attr)
|
|
|
+{
|
|
|
+ sysfs_remove_file(cpufreq_global_kobject, attr);
|
|
|
+ cpufreq_put_global_kobject();
|
|
|
+}
|
|
|
+EXPORT_SYMBOL(cpufreq_sysfs_remove_file);
|
|
|
+
|
|
|
/* symlink affected CPUs */
|
|
|
static int cpufreq_add_dev_symlink(unsigned int cpu,
|
|
|
struct cpufreq_policy *policy)
|
|
@@ -2020,7 +2060,7 @@ static int __init cpufreq_core_init(void)
|
|
|
init_rwsem(&per_cpu(cpu_policy_rwsem, cpu));
|
|
|
}
|
|
|
|
|
|
- cpufreq_global_kobject = kobject_create_and_add("cpufreq", &cpu_subsys.dev_root->kobj);
|
|
|
+ cpufreq_global_kobject = kobject_create();
|
|
|
BUG_ON(!cpufreq_global_kobject);
|
|
|
register_syscore_ops(&cpufreq_syscore_ops);
|
|
|
|