Commit edf19689 authored by Rusty Russell's avatar Rusty Russell Committed by Linus Torvalds

[PATCH] Hotplug CPUs: Sysfs Online Attribute

Add "online" sysfs attribute to cpus to bring them up and down.

Again, only under CONFIG_HOTPLUG_CPU.
parent 036f2137
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
#include <linux/init.h> #include <linux/init.h>
#include <linux/cpu.h> #include <linux/cpu.h>
#include <linux/topology.h> #include <linux/topology.h>
#include <linux/device.h>
struct sysdev_class cpu_sysdev_class = { struct sysdev_class cpu_sysdev_class = {
...@@ -14,6 +15,46 @@ struct sysdev_class cpu_sysdev_class = { ...@@ -14,6 +15,46 @@ struct sysdev_class cpu_sysdev_class = {
}; };
EXPORT_SYMBOL(cpu_sysdev_class); EXPORT_SYMBOL(cpu_sysdev_class);
#ifdef CONFIG_HOTPLUG_CPU
static ssize_t show_online(struct sys_device *dev, char *buf)
{
struct cpu *cpu = container_of(dev, struct cpu, sysdev);
return sprintf(buf, "%u\n", !!cpu_online(cpu->sysdev.id));
}
static ssize_t store_online(struct sys_device *dev, const char *buf,
size_t count)
{
struct cpu *cpu = container_of(dev, struct cpu, sysdev);
ssize_t ret;
switch (buf[0]) {
case '0':
ret = cpu_down(cpu->sysdev.id);
break;
case '1':
ret = cpu_up(cpu->sysdev.id);
break;
default:
ret = -EINVAL;
}
if (ret >= 0)
ret = count;
return ret;
}
static SYSDEV_ATTR(online, 0600, show_online, store_online);
static void __init register_cpu_control(struct cpu *cpu)
{
sysdev_create_file(&cpu->sysdev, &attr_online);
}
#else /* ... !CONFIG_HOTPLUG_CPU */
static inline void register_cpu_control(struct cpu *cpu)
{
}
#endif /* CONFIG_HOTPLUG_CPU */
/* /*
* register_cpu - Setup a driverfs device for a CPU. * register_cpu - Setup a driverfs device for a CPU.
...@@ -34,6 +75,8 @@ int __init register_cpu(struct cpu *cpu, int num, struct node *root) ...@@ -34,6 +75,8 @@ int __init register_cpu(struct cpu *cpu, int num, struct node *root)
error = sysfs_create_link(&root->sysdev.kobj, error = sysfs_create_link(&root->sysdev.kobj,
&cpu->sysdev.kobj, &cpu->sysdev.kobj,
kobject_name(&cpu->sysdev.kobj)); kobject_name(&cpu->sysdev.kobj));
if (!error)
register_cpu_control(cpu);
return error; return error;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment