Re: [PATCH] cpufreq: optimize policy_is_shared()

From: Zhongqiu Han

Date: Mon Mar 16 2026 - 04:38:21 EST


On 3/15/2026 3:25 AM, Yury Norov wrote:
The switch to cpumask_nth() over cpumask_weight(), as it may return
earlier - as soon as the function counts the required number of CPUs.

Signed-off-by: Yury Norov <ynorov@xxxxxxxxxx>
---
include/linux/cpufreq.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/include/linux/cpufreq.h b/include/linux/cpufreq.h
index cc894fc38971..8ca2bcb3d7ae 100644
--- a/include/linux/cpufreq.h
+++ b/include/linux/cpufreq.h
@@ -232,7 +232,7 @@ static inline bool policy_is_inactive(struct cpufreq_policy *policy)
static inline bool policy_is_shared(struct cpufreq_policy *policy)
{
- return cpumask_weight(policy->cpus) > 1;
+ return cpumask_nth(1, policy->cpus) < nr_cpumask_bits;
}
#ifdef CONFIG_CPU_FREQ


Hi Yury,

Thanks for the patch.

I see the intent of switching from cpumask_weight() to cpumask_nth() to
allow an early exit once we know there are at least two CPUs in the
mask. Functionally this looks equivalent.

That said, policy_is_shared() appears to be used mostly during governor
/driver bring-up paths (e.g. sugov_start(),cpufreq_dbs_governor_start(),
acpi_cpufreq_cpu_init(), etc.), rather than a hot runtime path. Given
that, I'm not sure the micro-optimization is worth the readability cost.

Also, cpumask_nth()'s documented return value is ">= nr_cpu_ids if such
cpu doesn't exist", so comparing against nr_cpu_ids would match the API
contract more directly than nr_cpumask_bits (even if they are currently
equivalent). [1][2]


[1] https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/include/linux/cpumask.h#n540
[2] https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/include/linux/cpumask.h#n78




--
Thx and BRs,
Zhongqiu Han