|
@@ -13,8 +13,11 @@
|
|
|
|
|
|
#include "base.h"
|
|
#include "base.h"
|
|
|
|
|
|
|
|
+static struct sysdev_class_attribute *cpu_sysdev_class_attrs[];
|
|
|
|
+
|
|
struct sysdev_class cpu_sysdev_class = {
|
|
struct sysdev_class cpu_sysdev_class = {
|
|
.name = "cpu",
|
|
.name = "cpu",
|
|
|
|
+ .attrs = cpu_sysdev_class_attrs,
|
|
};
|
|
};
|
|
EXPORT_SYMBOL(cpu_sysdev_class);
|
|
EXPORT_SYMBOL(cpu_sysdev_class);
|
|
|
|
|
|
@@ -90,20 +93,6 @@ static ssize_t cpu_release_store(struct class *class, const char *buf,
|
|
|
|
|
|
static CLASS_ATTR(probe, S_IWUSR, NULL, cpu_probe_store);
|
|
static CLASS_ATTR(probe, S_IWUSR, NULL, cpu_probe_store);
|
|
static CLASS_ATTR(release, S_IWUSR, NULL, cpu_release_store);
|
|
static CLASS_ATTR(release, S_IWUSR, NULL, cpu_release_store);
|
|
-
|
|
|
|
-int __init cpu_probe_release_init(void)
|
|
|
|
-{
|
|
|
|
- int rc;
|
|
|
|
-
|
|
|
|
- rc = sysfs_create_file(&cpu_sysdev_class.kset.kobj,
|
|
|
|
- &class_attr_probe.attr);
|
|
|
|
- if (!rc)
|
|
|
|
- rc = sysfs_create_file(&cpu_sysdev_class.kset.kobj,
|
|
|
|
- &class_attr_release.attr);
|
|
|
|
-
|
|
|
|
- return rc;
|
|
|
|
-}
|
|
|
|
-device_initcall(cpu_probe_release_init);
|
|
|
|
#endif /* CONFIG_ARCH_CPU_PROBE_RELEASE */
|
|
#endif /* CONFIG_ARCH_CPU_PROBE_RELEASE */
|
|
|
|
|
|
#else /* ... !CONFIG_HOTPLUG_CPU */
|
|
#else /* ... !CONFIG_HOTPLUG_CPU */
|
|
@@ -162,6 +151,7 @@ static ssize_t show_cpus_attr(struct sysdev_class *class,
|
|
#define _CPU_ATTR(name, map) \
|
|
#define _CPU_ATTR(name, map) \
|
|
{ _SYSDEV_CLASS_ATTR(name, 0444, show_cpus_attr, NULL), map }
|
|
{ _SYSDEV_CLASS_ATTR(name, 0444, show_cpus_attr, NULL), map }
|
|
|
|
|
|
|
|
+/* Keep in sync with cpu_sysdev_class_attrs */
|
|
static struct cpu_attr cpu_attrs[] = {
|
|
static struct cpu_attr cpu_attrs[] = {
|
|
_CPU_ATTR(online, &cpu_online_mask),
|
|
_CPU_ATTR(online, &cpu_online_mask),
|
|
_CPU_ATTR(possible, &cpu_possible_mask),
|
|
_CPU_ATTR(possible, &cpu_possible_mask),
|
|
@@ -212,29 +202,6 @@ static ssize_t print_cpus_offline(struct sysdev_class *class,
|
|
}
|
|
}
|
|
static SYSDEV_CLASS_ATTR(offline, 0444, print_cpus_offline, NULL);
|
|
static SYSDEV_CLASS_ATTR(offline, 0444, print_cpus_offline, NULL);
|
|
|
|
|
|
-static struct sysdev_class_attribute *cpu_state_attr[] = {
|
|
|
|
- &cpu_attrs[0].attr,
|
|
|
|
- &cpu_attrs[1].attr,
|
|
|
|
- &cpu_attrs[2].attr,
|
|
|
|
- &attr_kernel_max,
|
|
|
|
- &attr_offline,
|
|
|
|
-};
|
|
|
|
-
|
|
|
|
-static int cpu_states_init(void)
|
|
|
|
-{
|
|
|
|
- int i;
|
|
|
|
- int err = 0;
|
|
|
|
-
|
|
|
|
- for (i = 0; i < ARRAY_SIZE(cpu_state_attr); i++) {
|
|
|
|
- int ret;
|
|
|
|
- ret = sysdev_class_create_file(&cpu_sysdev_class,
|
|
|
|
- cpu_state_attr[i]);
|
|
|
|
- if (!err)
|
|
|
|
- err = ret;
|
|
|
|
- }
|
|
|
|
- return err;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
/*
|
|
/*
|
|
* register_cpu - Setup a sysfs device for a CPU.
|
|
* register_cpu - Setup a sysfs device for a CPU.
|
|
* @cpu - cpu->hotpluggable field set to 1 will generate a control file in
|
|
* @cpu - cpu->hotpluggable field set to 1 will generate a control file in
|
|
@@ -280,9 +247,6 @@ int __init cpu_dev_init(void)
|
|
int err;
|
|
int err;
|
|
|
|
|
|
err = sysdev_class_register(&cpu_sysdev_class);
|
|
err = sysdev_class_register(&cpu_sysdev_class);
|
|
- if (!err)
|
|
|
|
- err = cpu_states_init();
|
|
|
|
-
|
|
|
|
#if defined(CONFIG_SCHED_MC) || defined(CONFIG_SCHED_SMT)
|
|
#if defined(CONFIG_SCHED_MC) || defined(CONFIG_SCHED_SMT)
|
|
if (!err)
|
|
if (!err)
|
|
err = sched_create_sysfs_power_savings_entries(&cpu_sysdev_class);
|
|
err = sched_create_sysfs_power_savings_entries(&cpu_sysdev_class);
|
|
@@ -290,3 +254,16 @@ int __init cpu_dev_init(void)
|
|
|
|
|
|
return err;
|
|
return err;
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+static struct sysdev_class_attribute *cpu_sysdev_class_attrs[] = {
|
|
|
|
+#ifdef CONFIG_ARCH_CPU_PROBE_RELEASE
|
|
|
|
+ &class_attr_probe.attr,
|
|
|
|
+ &class_attr_release.attr,
|
|
|
|
+#endif
|
|
|
|
+ &cpu_attrs[0].attr,
|
|
|
|
+ &cpu_attrs[1].attr,
|
|
|
|
+ &cpu_attrs[2].attr,
|
|
|
|
+ &attr_kernel_max,
|
|
|
|
+ &attr_offline,
|
|
|
|
+ NULL
|
|
|
|
+};
|