Message ID | 20240731030126.956210-3-nysal@linux.ibm.com (mailing list archive) |
---|---|
State | Accepted |
Commit | 227bbaabe64b6f9cd98aa051454c1d4a194a8c6a |
Headers | show |
Series | Skip offline cores when enabling SMT on PowerPC | expand |
Context | Check | Description |
---|---|---|
snowpatch_ozlabs/github-powerpc_selftests | success | Successfully ran 8 jobs. |
snowpatch_ozlabs/github-powerpc_ppctests | success | Successfully ran 8 jobs. |
snowpatch_ozlabs/github-powerpc_sparse | success | Successfully ran 4 jobs. |
snowpatch_ozlabs/github-powerpc_clang | success | Successfully ran 5 jobs. |
snowpatch_ozlabs/github-powerpc_kernel_qemu | success | Successfully ran 21 jobs. |
On 7/31/24 8:31 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> > #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__ */ Reviewed-by: Shrikanth Hegde <sshegde@linux.ibm.com>
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__ */