From: Benjamin Herrenschmidt <benh@kernel.crashing.org>
To: Nathan Fontenot <nfont@austin.ibm.com>
Cc: linuxppc-dev@ozlabs.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH 5/6 v5] CPU probe/release files
Date: Thu, 29 Oct 2009 14:25:06 +1100 [thread overview]
Message-ID: <1256786706.26770.45.camel@pasglop> (raw)
In-Reply-To: <4AE8B072.1070603@austin.ibm.com>
On Wed, 2009-10-28 at 15:58 -0500, Nathan Fontenot wrote:
> Create new probe and release sysfs files to facilitate adding and removing
> cpus from the system. This also creates the powerpc specific stubs to handle
> the arch callouts from writes to the sysfs files.
>
> The creation and use of these files is regulated by the
> CONFIG_ARCH_CPU_PROBE_RELEASE option so that only architectures that need the
> capability will have the files created.
>
> Signed-off-by: Nathan Fontenot <nfont at austin.ibm.com>
> ---
Same question as before here... need some external acks from others
doing cpu hotplug.
Cheers,
Ben.
> Index: powerpc/drivers/base/cpu.c
> ===================================================================
> --- powerpc.orig/drivers/base/cpu.c 2009-10-28 15:20:34.000000000 -0500
> +++ powerpc/drivers/base/cpu.c 2009-10-28 15:21:53.000000000 -0500
> @@ -54,6 +54,7 @@
> ret = count;
> return ret;
> }
> +
> static SYSDEV_ATTR(online, 0644, show_online, store_online);
>
> static void __cpuinit register_cpu_control(struct cpu *cpu)
> @@ -72,6 +73,38 @@
> 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)
> {
> Index: powerpc/arch/powerpc/include/asm/machdep.h
> ===================================================================
> --- powerpc.orig/arch/powerpc/include/asm/machdep.h 2009-10-28 15:21:47.000000000 -0500
> +++ powerpc/arch/powerpc/include/asm/machdep.h 2009-10-28 15:21:53.000000000 -0500
> @@ -274,6 +274,11 @@
> int (*memory_probe)(u64);
> #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);
> Index: powerpc/arch/powerpc/kernel/sysfs.c
> ===================================================================
> --- powerpc.orig/arch/powerpc/kernel/sysfs.c 2009-10-28 15:20:34.000000000 -0500
> +++ powerpc/arch/powerpc/kernel/sysfs.c 2009-10-28 15:21:53.000000000 -0500
> @@ -461,6 +461,25 @@
>
> cacheinfo_cpu_offline(cpu);
> }
> +
> +#ifdef CONFIG_ARCH_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_PROBE_RELEASE */
> +
> #endif /* CONFIG_HOTPLUG_CPU */
>
> static int __cpuinit sysfs_cpu_notify(struct notifier_block *self,
> Index: powerpc/arch/powerpc/Kconfig
> ===================================================================
> --- powerpc.orig/arch/powerpc/Kconfig 2009-10-28 15:21:47.000000000 -0500
> +++ powerpc/arch/powerpc/Kconfig 2009-10-28 15:21:53.000000000 -0500
> @@ -320,6 +320,10 @@
>
> 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
>
> Index: powerpc/include/linux/cpu.h
> ===================================================================
> --- powerpc.orig/include/linux/cpu.h 2009-10-28 15:20:34.000000000 -0500
> +++ powerpc/include/linux/cpu.h 2009-10-28 15:21:53.000000000 -0500
> @@ -43,6 +43,10 @@
>
> #ifdef CONFIG_HOTPLUG_CPU
> extern void unregister_cpu(struct cpu *cpu);
> +#ifdef CONFIG_ARCH_CPU_PROBE_RELEASE
> +extern ssize_t arch_cpu_probe(const char *, size_t);
> +extern ssize_t arch_cpu_release(const char *, size_t);
> +#endif
> #endif
>
> struct notifier_block;
> Index: powerpc/arch/powerpc/kernel/smp.c
> ===================================================================
> --- powerpc.orig/arch/powerpc/kernel/smp.c 2009-10-28 15:20:34.000000000 -0500
> +++ powerpc/arch/powerpc/kernel/smp.c 2009-10-28 15:21:53.000000000 -0500
> @@ -364,7 +364,24 @@
> set_cpu_online(cpu, true);
> local_irq_enable();
> }
> +
> +#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
> +#endif /* CONFIG_HOTPLUG_CPU */
>
> static int __devinit cpu_enable(unsigned int cpu)
> {
> _______________________________________________
> Linuxppc-dev mailing list
> Linuxppc-dev@lists.ozlabs.org
> https://lists.ozlabs.org/listinfo/linuxppc-dev
next prev parent reply other threads:[~2009-10-29 3:27 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-10-28 20:47 [PATCH 0/6 v5] Kernel handling of Dynamic Logical Partitioning Nathan Fontenot
2009-10-28 20:53 ` [PATCH 1/6 v5] Kernel DLPAR Infrastructure Nathan Fontenot
2009-10-29 3:08 ` Benjamin Herrenschmidt
2009-10-29 3:59 ` Nathan Lynch
2009-11-02 16:27 ` Nathan Fontenot
2009-11-02 16:40 ` Grant Likely
2009-11-02 16:47 ` Nathan Fontenot
2009-11-02 16:56 ` Grant Likely
2009-10-28 20:54 ` [PATCH 2/6 v5] Move of_drconf_cell to prom.h Nathan Fontenot
2009-10-28 20:55 ` [PATCH 3/6 v5] Memory probe/release files Nathan Fontenot
2009-10-29 3:13 ` Benjamin Herrenschmidt
2009-11-02 16:14 ` Nathan Fontenot
2009-10-28 20:57 ` [PATCH 4/6 v5] Memory DLPAR Handling Nathan Fontenot
2009-11-05 18:51 ` Roland Dreier
2009-10-28 20:58 ` [PATCH 5/6 v5] CPU probe/release files Nathan Fontenot
2009-10-29 3:25 ` Benjamin Herrenschmidt [this message]
2009-12-18 14:33 ` Andreas Schwab
2009-12-18 16:24 ` Nathan Fontenot
2009-12-18 17:29 ` Andreas Schwab
2009-12-19 8:46 ` Benjamin Herrenschmidt
2009-12-19 10:11 ` Andreas Schwab
2009-12-22 2:17 ` Nathan Fontenot
2009-10-28 20:59 ` [PATCH 6/6 v5] CPU DLPAR Handling Nathan Fontenot
2009-10-29 3:26 ` Benjamin Herrenschmidt
2009-11-02 16:15 ` Nathan Fontenot
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1256786706.26770.45.camel@pasglop \
--to=benh@kernel.crashing.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linuxppc-dev@ozlabs.org \
--cc=nfont@austin.ibm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).