Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 175822
b: refs/heads/master
c: 12633e8
h: refs/heads/master
v: v3
  • Loading branch information
Nathan Fontenot authored and Benjamin Herrenschmidt committed Dec 9, 2009
1 parent 16cc762 commit db6b12e
Show file tree
Hide file tree
Showing 7 changed files with 78 additions and 1 deletion.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: ab519a011caa5ec47d992cb8a4fc8e7af9b9e3f8
refs/heads/master: 12633e803a2a556f6469e0933d08233d0844a2d9
15 changes: 15 additions & 0 deletions trunk/Documentation/ABI/testing/sysfs-devices-system-cpu
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,21 @@ Description: CPU topology files that describe kernel limits related to
See Documentation/cputopology.txt for more information.


What: /sys/devices/system/cpu/probe
/sys/devices/system/cpu/release
Date: November 2009
Contact: Linux kernel mailing list <linux-kernel@vger.kernel.org>
Description: Dynamic addition and removal of CPU's. This is not hotplug
removal, this is meant complete removal/addition of the CPU
from the system.

probe: writes to this file will dynamically add a CPU to the
system. Information written to the file to add CPU's is
architecture specific.

release: writes to this file dynamically remove a CPU from
the system. Information writtento the file to remove CPU's
is architecture specific.

What: /sys/devices/system/cpu/cpu#/node
Date: October 2009
Expand Down
4 changes: 4 additions & 0 deletions trunk/arch/powerpc/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -320,6 +320,10 @@ config HOTPLUG_CPU

Say N if you are unsure.

config ARCH_CPU_PROBE_RELEASE
def_bool y
depends on HOTPLUG_CPU

config ARCH_ENABLE_MEMORY_HOTPLUG
def_bool y

Expand Down
5 changes: 5 additions & 0 deletions trunk/arch/powerpc/include/asm/machdep.h
Original file line number Diff line number Diff line change
Expand Up @@ -266,6 +266,11 @@ struct machdep_calls {
void (*suspend_disable_irqs)(void);
void (*suspend_enable_irqs)(void);
#endif

#ifdef CONFIG_ARCH_CPU_PROBE_RELEASE
ssize_t (*cpu_probe)(const char *, size_t);
ssize_t (*cpu_release)(const char *, size_t);
#endif
};

extern void e500_idle(void);
Expand Down
19 changes: 19 additions & 0 deletions trunk/arch/powerpc/kernel/sysfs.c
Original file line number Diff line number Diff line change
Expand Up @@ -461,6 +461,25 @@ static void unregister_cpu_online(unsigned int cpu)

cacheinfo_cpu_offline(cpu);
}

#ifdef CONFIG_ARCH_CPU_PROBE_RELEASE
ssize_t arch_cpu_probe(const char *buf, size_t count)
{
if (ppc_md.cpu_probe)
return ppc_md.cpu_probe(buf, count);

return -EINVAL;
}

ssize_t arch_cpu_release(const char *buf, size_t count)
{
if (ppc_md.cpu_release)
return ppc_md.cpu_release(buf, count);

return -EINVAL;
}
#endif /* CONFIG_ARCH_CPU_PROBE_RELEASE */

#endif /* CONFIG_HOTPLUG_CPU */

static int __cpuinit sysfs_cpu_notify(struct notifier_block *self,
Expand Down
32 changes: 32 additions & 0 deletions trunk/drivers/base/cpu.c
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,38 @@ void unregister_cpu(struct cpu *cpu)
per_cpu(cpu_sys_devices, logical_cpu) = NULL;
return;
}

#ifdef CONFIG_ARCH_CPU_PROBE_RELEASE
static ssize_t cpu_probe_store(struct class *class, const char *buf,
size_t count)
{
return arch_cpu_probe(buf, count);
}

static ssize_t cpu_release_store(struct class *class, const char *buf,
size_t count)
{
return arch_cpu_release(buf, count);
}

static CLASS_ATTR(probe, S_IWUSR, NULL, cpu_probe_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 */

#else /* ... !CONFIG_HOTPLUG_CPU */
static inline void register_cpu_control(struct cpu *cpu)
{
Expand Down
2 changes: 2 additions & 0 deletions trunk/include/linux/cpu.h
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,8 @@ extern int sched_create_sysfs_power_savings_entries(struct sysdev_class *cls);

#ifdef CONFIG_HOTPLUG_CPU
extern void unregister_cpu(struct cpu *cpu);
extern ssize_t arch_cpu_probe(const char *, size_t);
extern ssize_t arch_cpu_release(const char *, size_t);
#endif
struct notifier_block;

Expand Down

0 comments on commit db6b12e

Please sign in to comment.