From: "Nysal Jan K.A" <nysal@linux.ibm.com>
topology_is_core_online() checks if the core a CPU belongs to
is online. The core is online if at least one of the sibling
CPUs is online. The first CPU of an online core is also online
in the common case, so this should be fairly quick.
Signed-off-by: Nysal Jan K.A <nysal@linux.ibm.com>
---
arch/powerpc/include/asm/topology.h | 13 +++++++++++++
1 file changed, 13 insertions(+)
diff --git a/arch/powerpc/include/asm/topology.h b/arch/powerpc/include/asm/topology.h
index f4e6f2dd04b7..16bacfe8c7a2 100644
--- a/arch/powerpc/include/asm/topology.h
+++ b/arch/powerpc/include/asm/topology.h
@@ -145,6 +145,7 @@ static inline int cpu_to_coregroup_id(int cpu)
#ifdef CONFIG_HOTPLUG_SMT
#include <linux/cpu_smt.h>
+#include <linux/cpumask.h>
#include <asm/cputhreads.h>
static inline bool topology_is_primary_thread(unsigned int cpu)
@@ -156,6 +157,18 @@ static inline bool topology_smt_thread_allowed(unsigned int cpu)
{
return cpu_thread_in_core(cpu) < cpu_smt_num_threads;
}
+
+#define topology_is_core_online topology_is_core_online
+static inline bool topology_is_core_online(unsigned int cpu)
+{
+ int i, first_cpu = cpu_first_thread_sibling(cpu);
+
+ for (i = first_cpu; i < first_cpu + threads_per_core; ++i) {
+ if (cpu_online(i))
+ return true;
+ }
+ return false;
+}
#endif
#endif /* __KERNEL__ */
--
2.35.3
On 6/13/24 12:20 AM, Nysal Jan K.A. wrote:
> From: "Nysal Jan K.A" <nysal@linux.ibm.com>
>
> topology_is_core_online() checks if the core a CPU belongs to
> is online. The core is online if at least one of the sibling
> CPUs is online. The first CPU of an online core is also online
> in the common case, so this should be fairly quick.
>
> Signed-off-by: Nysal Jan K.A <nysal@linux.ibm.com>
> ---
> arch/powerpc/include/asm/topology.h | 13 +++++++++++++
> 1 file changed, 13 insertions(+)
>
> diff --git a/arch/powerpc/include/asm/topology.h b/arch/powerpc/include/asm/topology.h
> index f4e6f2dd04b7..16bacfe8c7a2 100644
> --- a/arch/powerpc/include/asm/topology.h
> +++ b/arch/powerpc/include/asm/topology.h
> @@ -145,6 +145,7 @@ static inline int cpu_to_coregroup_id(int cpu)
>
> #ifdef CONFIG_HOTPLUG_SMT
> #include <linux/cpu_smt.h>
> +#include <linux/cpumask.h>
Is this header file needed?
I don't see any reference to cpumask related code.
> #include <asm/cputhreads.h>
>
> static inline bool topology_is_primary_thread(unsigned int cpu)
> @@ -156,6 +157,18 @@ static inline bool topology_smt_thread_allowed(unsigned int cpu)
> {
> return cpu_thread_in_core(cpu) < cpu_smt_num_threads;
> }
> +
This is defined only if CONFIG_HOTPLUG_SMT is true. But this could be
generic function which might be used to check if a core is offline in other cases.
Would that make sense to keep it out of CONFIG_HOTPLUG_SMT ?
> +#define topology_is_core_online topology_is_core_online
> +static inline bool topology_is_core_online(unsigned int cpu)
> +{
> + int i, first_cpu = cpu_first_thread_sibling(cpu);
> +
> + for (i = first_cpu; i < first_cpu + threads_per_core; ++i) {
> + if (cpu_online(i))
> + return true;
> + }
> + return false;
> +}
> #endif
>
> #endif /* __KERNEL__ */
On Tue, Jun 25, 2024 at 12:36:33AM GMT, Shrikanth Hegde wrote:
> > --- a/arch/powerpc/include/asm/topology.h
> > +++ b/arch/powerpc/include/asm/topology.h
> > @@ -145,6 +145,7 @@ static inline int cpu_to_coregroup_id(int cpu)
> >
> > #ifdef CONFIG_HOTPLUG_SMT
> > #include <linux/cpu_smt.h>
> > +#include <linux/cpumask.h>
>
> Is this header file needed?
> I don't see any reference to cpumask related code.
>
cpu_online() is defined in that header.
> > #include <asm/cputhreads.h>
> >
> > static inline bool topology_is_primary_thread(unsigned int cpu)
> > @@ -156,6 +157,18 @@ static inline bool topology_smt_thread_allowed(unsigned int cpu)
> > {
> > return cpu_thread_in_core(cpu) < cpu_smt_num_threads;
> > }
> > +
>
> This is defined only if CONFIG_HOTPLUG_SMT is true. But this could be
> generic function which might be used to check if a core is offline in other cases.
> Would that make sense to keep it out of CONFIG_HOTPLUG_SMT ?
>
I'm not opposed to the idea, it would also be easy to do that later if there is
another consumer of this function.
Regards
--Nysal
© 2016 - 2026 Red Hat, Inc.