Skip to content

Commit 6da1cab

Browse files
makelinuxmpe
authored andcommitted
powerpc/xive: Use cpumask_intersects()
Replace `cpumask_any_and(a, b) >= nr_cpu_ids` with the more readable `!cpumask_intersects(a, b)`. Comparison between cpumask_any_and() and cpumask_intersects() The cpumask_any_and() function expands using FIND_FIRST_BIT(), resulting in a loop that iterates through each bit of the bitmask: for (idx = 0; idx * BITS_PER_LONG < sz; idx++) { val = (FETCH); if (val) { sz = min(idx * BITS_PER_LONG + __ffs(MUNGE(val)), sz); break; } } The cpumask_intersects() function expands using __bitmap_intersects(), resulting in that the first loop iterates through each long word of the bitmask, and the second through each bit within a long word: unsigned int k, lim = bits/BITS_PER_LONG; for (k = 0; k < lim; ++k) if (bitmap1[k] & bitmap2[k]) return true; if (bits % BITS_PER_LONG) if ((bitmap1[k] & bitmap2[k]) & BITMAP_LAST_WORD_MASK(bits)) return true; Conclusion: cpumask_intersects() is at least as efficient as cpumask_any_and(), if not more so, as it typically performs fewer loops and comparisons. Signed-off-by: Costa Shulyupin <costa.shul@redhat.com> Reviewed-by: Ming Lei <ming.lei@redhat.com> Reviewed-by: Ritesh Harjani (IBM) <ritesh.list@gmail.com> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> Link: https://patch.msgid.link/20240926092623.399577-2-costa.shul@redhat.com
1 parent 7ca93aa commit 6da1cab

1 file changed

Lines changed: 1 addition & 1 deletion

File tree

arch/powerpc/sysdev/xive/common.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -726,7 +726,7 @@ static int xive_irq_set_affinity(struct irq_data *d,
726726
pr_debug("%s: irq %d/0x%x\n", __func__, d->irq, hw_irq);
727727

728728
/* Is this valid ? */
729-
if (cpumask_any_and(cpumask, cpu_online_mask) >= nr_cpu_ids)
729+
if (!cpumask_intersects(cpumask, cpu_online_mask))
730730
return -EINVAL;
731731

732732
/*

0 commit comments

Comments
 (0)