Merge branch 'smp-hotplug-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull CPU hotplug updates from Thomas Gleixner: "A small update for the SMP hotplug code code: - Track "booted once" CPUs in a cpumask so the x86 APIC code has an easy way to decide whether broadcast IPIs are safe to use or not. - Implement a cpumask_or_equal() helper for the IPI broadcast evaluation. The above two changes have been also pulled into the x86/apic branch for implementing the conditional IPI broadcast feature. - Cache the number of online CPUs instead of reevaluating it over and over. num_online_cpus() is an unreliable snapshot anyway except when it is used outside a cpu hotplug locked region. The cached access is not changing this, but it's definitely faster than calculating the bitmap wheight especially in hot paths" * 'smp-hotplug-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: cpu/hotplug: Cache number of online CPUs cpumask: Implement cpumask_or_equal() smp/hotplug: Track booted once CPUs in a cpumask
This commit is contained in:
20
lib/bitmap.c
20
lib/bitmap.c
@@ -59,6 +59,26 @@ int __bitmap_equal(const unsigned long *bitmap1,
|
||||
}
|
||||
EXPORT_SYMBOL(__bitmap_equal);
|
||||
|
||||
bool __bitmap_or_equal(const unsigned long *bitmap1,
|
||||
const unsigned long *bitmap2,
|
||||
const unsigned long *bitmap3,
|
||||
unsigned int bits)
|
||||
{
|
||||
unsigned int k, lim = bits / BITS_PER_LONG;
|
||||
unsigned long tmp;
|
||||
|
||||
for (k = 0; k < lim; ++k) {
|
||||
if ((bitmap1[k] | bitmap2[k]) != bitmap3[k])
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!(bits % BITS_PER_LONG))
|
||||
return true;
|
||||
|
||||
tmp = (bitmap1[k] | bitmap2[k]) ^ bitmap3[k];
|
||||
return (tmp & BITMAP_LAST_WORD_MASK(bits)) == 0;
|
||||
}
|
||||
|
||||
void __bitmap_complement(unsigned long *dst, const unsigned long *src, unsigned int bits)
|
||||
{
|
||||
unsigned int k, lim = BITS_TO_LONGS(bits);
|
||||
|
Reference in New Issue
Block a user