diff --git a/Documentation/admin-guide/cputopology.rst b/Documentation/admin-guide/cputopology.rst index 496ec1e6fd4b..9e0c47da3ccb 100644 --- a/Documentation/admin-guide/cputopology.rst +++ b/Documentation/admin-guide/cputopology.rst @@ -102,6 +102,9 @@ Architecture-neutral, drivers/base/topology.c, exports these attributes. However, the book and drawer related sysfs files will only be created if CONFIG_SCHED_BOOK and CONFIG_SCHED_DRAWER are selected, respectively. +The cluster hierarchy related sysfs files will only be created if an +architecture provides the related macros as described below. + CONFIG_SCHED_BOOK and CONFIG_SCHED_DRAWER are currently only used on s390, where they reflect the cpu and cache hierarchy. diff --git a/drivers/base/topology.c b/drivers/base/topology.c index bf169975e4ef..ea863bcc7269 100644 --- a/drivers/base/topology.c +++ b/drivers/base/topology.c @@ -46,8 +46,10 @@ static DEVICE_ATTR_RO(physical_package_id); define_id_show_func(die_id); static DEVICE_ATTR_RO(die_id); +#ifdef TOPOLOGY_CLUSTER_SYSFS define_id_show_func(cluster_id); static DEVICE_ATTR_RO(cluster_id); +#endif define_id_show_func(core_id); static DEVICE_ATTR_RO(core_id); @@ -64,9 +66,11 @@ define_siblings_show_func(core_siblings, core_cpumask); static DEVICE_ATTR_RO(core_siblings); static DEVICE_ATTR_RO(core_siblings_list); +#ifdef TOPOLOGY_CLUSTER_SYSFS define_siblings_show_func(cluster_cpus, cluster_cpumask); static DEVICE_ATTR_RO(cluster_cpus); static DEVICE_ATTR_RO(cluster_cpus_list); +#endif define_siblings_show_func(die_cpus, die_cpumask); static DEVICE_ATTR_RO(die_cpus); @@ -95,7 +99,9 @@ static DEVICE_ATTR_RO(drawer_siblings_list); static struct attribute *default_attrs[] = { &dev_attr_physical_package_id.attr, &dev_attr_die_id.attr, +#ifdef TOPOLOGY_CLUSTER_SYSFS &dev_attr_cluster_id.attr, +#endif &dev_attr_core_id.attr, &dev_attr_thread_siblings.attr, &dev_attr_thread_siblings_list.attr, @@ -103,8 +109,10 @@ static struct attribute *default_attrs[] = { &dev_attr_core_cpus_list.attr, &dev_attr_core_siblings.attr, &dev_attr_core_siblings_list.attr, +#ifdef TOPOLOGY_CLUSTER_SYSFS &dev_attr_cluster_cpus.attr, &dev_attr_cluster_cpus_list.attr, +#endif &dev_attr_die_cpus.attr, &dev_attr_die_cpus_list.attr, &dev_attr_package_cpus.attr, diff --git a/include/linux/topology.h b/include/linux/topology.h index a85ad55ef8a2..6eb50cd0adac 100644 --- a/include/linux/topology.h +++ b/include/linux/topology.h @@ -197,6 +197,10 @@ static inline int cpu_to_mem(int cpu) #endif /* [!]CONFIG_HAVE_MEMORYLESS_NODES */ +#if defined(topology_cluster_id) && defined(topology_cluster_cpumask) +#define TOPOLOGY_CLUSTER_SYSFS +#endif + #ifndef topology_physical_package_id #define topology_physical_package_id(cpu) ((void)(cpu), -1) #endif