Merge branch 'smp-hotplug-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull CPU hotplug updates from Ingo Molnar: "Two changes in this cycle: - 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. - Sparse annotation fix" * 'smp-hotplug-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: smpboot: Place the __percpu annotation correctly cpu/hotplug: Create SMT sysfs interface for all arches
This commit is contained in:
64
kernel/cpu.c
64
kernel/cpu.c
@@ -2041,19 +2041,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);
|
||||
@@ -2124,9 +2111,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;
|
||||
|
||||
@@ -2164,14 +2152,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);
|
||||
|
||||
@@ -2187,21 +2205,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;
|
||||
|
||||
@@ -2222,7 +2236,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
|
||||
|
Reference in New Issue
Block a user