From: Josh Poimboeuf <jpoimboe@redhat.com>
To: tip-bot for Josh Poimboeuf <tipbot@zytor.com>
Cc: linux-tip-commits@vger.kernel.org, aarcange@redhat.com,
hpa@zytor.com, tglx@linutronix.de, mingo@kernel.org,
jikos@kernel.org, peterz@infradead.org,
linux-kernel@vger.kernel.org, longman@redhat.com
Subject: Re: [tip:smp/hotplug] cpu/hotplug: Create SMT sysfs interface for all arches
Date: Tue, 2 Apr 2019 08:31:21 -0500 [thread overview]
Message-ID: <20190402133121.kvf55gv6rz4ssf5o@treble> (raw)
In-Reply-To: <tip-de7b77e5bb9451417ca57f1b6501da654587c048@git.kernel.org>
On Tue, Apr 02, 2019 at 03:40:06AM -0700, tip-bot for Josh Poimboeuf wrote:
> Commit-ID: de7b77e5bb9451417ca57f1b6501da654587c048
> Gitweb: https://git.kernel.org/tip/de7b77e5bb9451417ca57f1b6501da654587c048
> Author: Josh Poimboeuf <jpoimboe@redhat.com>
> AuthorDate: Wed, 27 Mar 2019 07:00:29 -0500
> Committer: Thomas Gleixner <tglx@linutronix.de>
> CommitDate: Tue, 2 Apr 2019 12:36:56 +0200
>
> cpu/hotplug: Create SMT sysfs interface for all arches
>
> Make the /sys/devices/system/cpu/smt/* files available on all arches, so
> user space has a consistent way to detect whether SMT is enabled.
>
> The 'control' file now shows 'notimplemented' for architectures which
> don't yet have CONFIG_HOTPLUG_SMT.
>
> [ tglx: Make notimplemented a real state ]
Yes, that's better. Thanks!
>
> Signed-off-by: Josh Poimboeuf <jpoimboe@redhat.com>
> Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
> Cc: Andrea Arcangeli <aarcange@redhat.com>
> Cc: Waiman Long <longman@redhat.com>
> Cc: Peter Zijlstra <peterz@infradead.org>
> Cc: Jiri Kosina <jikos@kernel.org>
> Link: https://lkml.kernel.org/r/469c2b98055f2c41e75748e06447d592a64080c9.1553635520.git.jpoimboe@redhat.com
>
> ---
> Documentation/ABI/testing/sysfs-devices-system-cpu | 10 ++--
> include/linux/cpu.h | 3 +-
> kernel/cpu.c | 64 +++++++++++++---------
> 3 files changed, 47 insertions(+), 30 deletions(-)
>
> diff --git a/Documentation/ABI/testing/sysfs-devices-system-cpu b/Documentation/ABI/testing/sysfs-devices-system-cpu
> index 9605dbd4b5b5..5eea46fefcb2 100644
> --- a/Documentation/ABI/testing/sysfs-devices-system-cpu
> +++ b/Documentation/ABI/testing/sysfs-devices-system-cpu
> @@ -511,10 +511,12 @@ Description: Control Symetric Multi Threading (SMT)
> control: Read/write interface to control SMT. Possible
> values:
>
> - "on" SMT is enabled
> - "off" SMT is disabled
> - "forceoff" SMT is force disabled. Cannot be changed.
> - "notsupported" SMT is not supported by the CPU
> + "on" SMT is enabled
> + "off" SMT is disabled
> + "forceoff" SMT is force disabled. Cannot be changed.
> + "notsupported" SMT is not supported by the CPU
> + "notimplemented" SMT runtime toggling is not
> + implemented for the architecture
>
> If control status is "forceoff" or "notsupported" writes
> are rejected.
> diff --git a/include/linux/cpu.h b/include/linux/cpu.h
> index 5041357d0297..ae99dde02320 100644
> --- a/include/linux/cpu.h
> +++ b/include/linux/cpu.h
> @@ -175,6 +175,7 @@ enum cpuhp_smt_control {
> CPU_SMT_DISABLED,
> CPU_SMT_FORCE_DISABLED,
> CPU_SMT_NOT_SUPPORTED,
> + CPU_SMT_NOT_IMPLEMENTED,
> };
>
> #if defined(CONFIG_SMP) && defined(CONFIG_HOTPLUG_SMT)
> @@ -182,7 +183,7 @@ extern enum cpuhp_smt_control cpu_smt_control;
> extern void cpu_smt_disable(bool force);
> extern void cpu_smt_check_topology(void);
> #else
> -# define cpu_smt_control (CPU_SMT_ENABLED)
> +# define cpu_smt_control (CPU_SMT_NOT_IMPLEMENTED)
> static inline void cpu_smt_disable(bool force) { }
> static inline void cpu_smt_check_topology(void) { }
> #endif
> diff --git a/kernel/cpu.c b/kernel/cpu.c
> index 6754f3ecfd94..b8bf3f93e39b 100644
> --- a/kernel/cpu.c
> +++ b/kernel/cpu.c
> @@ -2033,19 +2033,6 @@ static const struct attribute_group cpuhp_cpu_root_attr_group = {
>
> #ifdef CONFIG_HOTPLUG_SMT
>
> -static const char *smt_states[] = {
> - [CPU_SMT_ENABLED] = "on",
> - [CPU_SMT_DISABLED] = "off",
> - [CPU_SMT_FORCE_DISABLED] = "forceoff",
> - [CPU_SMT_NOT_SUPPORTED] = "notsupported",
> -};
> -
> -static ssize_t
> -show_smt_control(struct device *dev, struct device_attribute *attr, char *buf)
> -{
> - return snprintf(buf, PAGE_SIZE - 2, "%s\n", smt_states[cpu_smt_control]);
> -}
> -
> static void cpuhp_offline_cpu_device(unsigned int cpu)
> {
> struct device *dev = get_cpu_device(cpu);
> @@ -2116,9 +2103,10 @@ static int cpuhp_smt_enable(void)
> return ret;
> }
>
> +
> static ssize_t
> -store_smt_control(struct device *dev, struct device_attribute *attr,
> - const char *buf, size_t count)
> +__store_smt_control(struct device *dev, struct device_attribute *attr,
> + const char *buf, size_t count)
> {
> int ctrlval, ret;
>
> @@ -2156,14 +2144,44 @@ store_smt_control(struct device *dev, struct device_attribute *attr,
> unlock_device_hotplug();
> return ret ? ret : count;
> }
> +
> +#else /* !CONFIG_HOTPLUG_SMT */
> +static ssize_t
> +__store_smt_control(struct device *dev, struct device_attribute *attr,
> + const char *buf, size_t count)
> +{
> + return -ENODEV;
> +}
> +#endif /* CONFIG_HOTPLUG_SMT */
> +
> +static const char *smt_states[] = {
> + [CPU_SMT_ENABLED] = "on",
> + [CPU_SMT_DISABLED] = "off",
> + [CPU_SMT_FORCE_DISABLED] = "forceoff",
> + [CPU_SMT_NOT_SUPPORTED] = "notsupported",
> + [CPU_SMT_NOT_IMPLEMENTED] = "notimplemented",
> +};
> +
> +static ssize_t
> +show_smt_control(struct device *dev, struct device_attribute *attr, char *buf)
> +{
> + const char *state = smt_states[cpu_smt_control];
> +
> + return snprintf(buf, PAGE_SIZE - 2, "%s\n", state);
> +}
> +
> +static ssize_t
> +store_smt_control(struct device *dev, struct device_attribute *attr,
> + const char *buf, size_t count)
> +{
> + return __store_smt_control(dev, attr, buf, count);
> +}
> static DEVICE_ATTR(control, 0644, show_smt_control, store_smt_control);
>
> static ssize_t
> show_smt_active(struct device *dev, struct device_attribute *attr, char *buf)
> {
> - bool active = topology_max_smt_threads() > 1;
> -
> - return snprintf(buf, PAGE_SIZE - 2, "%d\n", active);
> + return snprintf(buf, PAGE_SIZE - 2, "%d\n", sched_smt_active());
> }
> static DEVICE_ATTR(active, 0444, show_smt_active, NULL);
>
> @@ -2179,21 +2197,17 @@ static const struct attribute_group cpuhp_smt_attr_group = {
> NULL
> };
>
> -static int __init cpu_smt_state_init(void)
> +static int __init cpu_smt_sysfs_init(void)
> {
> return sysfs_create_group(&cpu_subsys.dev_root->kobj,
> &cpuhp_smt_attr_group);
> }
>
> -#else
> -static inline int cpu_smt_state_init(void) { return 0; }
> -#endif
> -
> static int __init cpuhp_sysfs_init(void)
> {
> int cpu, ret;
>
> - ret = cpu_smt_state_init();
> + ret = cpu_smt_sysfs_init();
> if (ret)
> return ret;
>
> @@ -2214,7 +2228,7 @@ static int __init cpuhp_sysfs_init(void)
> return 0;
> }
> device_initcall(cpuhp_sysfs_init);
> -#endif
> +#endif /* CONFIG_SYSFS && CONFIG_HOTPLUG_CPU */
>
> /*
> * cpu_bit_bitmap[] is a special, "compressed" data structure that
--
Josh
prev parent reply other threads:[~2019-04-02 13:31 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-03-27 12:00 [PATCH v2] cpu/hotplug: Create SMT sysfs interface for all arches Josh Poimboeuf
2019-04-02 10:40 ` [tip:smp/hotplug] " tip-bot for Josh Poimboeuf
2019-04-02 13:31 ` Josh Poimboeuf [this message]
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=20190402133121.kvf55gv6rz4ssf5o@treble \
--to=jpoimboe@redhat.com \
--cc=aarcange@redhat.com \
--cc=hpa@zytor.com \
--cc=jikos@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-tip-commits@vger.kernel.org \
--cc=longman@redhat.com \
--cc=mingo@kernel.org \
--cc=peterz@infradead.org \
--cc=tglx@linutronix.de \
--cc=tipbot@zytor.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).