--- v1
+++ v2
@@ -1,48 +1,32 @@
-Add cpumask_weight_{eq,gt,le} and replace cpumask_weight() with one
-of cpumask_weight_{empty,eq,gt,le} where appropriate. This allows
-cpumask_weight_*() to return earlier depending on the condition.
+In many cases, kernel code calls cpumask_weight() to check if any bit of
+a given cpumask is set. We can do it more efficiently with cpumask_empty()
+because cpumask_empty() stops traversing the cpumask as soon as it finds
+first set bit, while cpumask_weight() counts all bits unconditionally.
Signed-off-by: Yury Norov <yury.norov@gmail.com>
---
- arch/alpha/kernel/process.c | 2 +-
- arch/ia64/kernel/setup.c | 2 +-
- arch/ia64/mm/tlb.c | 2 +-
- arch/mips/cavium-octeon/octeon-irq.c | 4 +--
- arch/mips/kernel/crash.c | 2 +-
- arch/powerpc/kernel/smp.c | 2 +-
- arch/powerpc/kernel/watchdog.c | 4 +--
- arch/powerpc/xmon/xmon.c | 4 +--
- arch/s390/kernel/perf_cpum_cf.c | 2 +-
- arch/x86/kernel/cpu/resctrl/rdtgroup.c | 14 +++++------
- arch/x86/kernel/smpboot.c | 4 +--
- arch/x86/mm/mmio-mod.c | 2 +-
- arch/x86/platform/uv/uv_nmi.c | 2 +-
- drivers/cpufreq/qcom-cpufreq-hw.c | 2 +-
- drivers/cpufreq/scmi-cpufreq.c | 2 +-
- drivers/firmware/psci/psci_checker.c | 2 +-
- drivers/gpu/drm/i915/i915_pmu.c | 2 +-
- drivers/hv/channel_mgmt.c | 4 +--
- drivers/infiniband/hw/hfi1/affinity.c | 13 +++++-----
- drivers/infiniband/hw/qib/qib_file_ops.c | 2 +-
- drivers/infiniband/hw/qib/qib_iba7322.c | 2 +-
- drivers/infiniband/sw/siw/siw_main.c | 3 +--
- drivers/irqchip/irq-bcm6345-l1.c | 2 +-
- drivers/scsi/lpfc/lpfc_init.c | 2 +-
- drivers/soc/fsl/qbman/qman_test_stash.c | 2 +-
- include/linux/cpumask.h | 32 ++++++++++++++++++++++++
- kernel/irq/affinity.c | 2 +-
- kernel/padata.c | 2 +-
- kernel/rcu/tree_nocb.h | 4 +--
- kernel/rcu/tree_plugin.h | 2 +-
- kernel/sched/core.c | 10 ++++----
- kernel/sched/topology.c | 4 +--
- kernel/time/clockevents.c | 2 +-
- kernel/time/clocksource.c | 2 +-
- mm/vmstat.c | 4 +--
- 35 files changed, 89 insertions(+), 59 deletions(-)
+ arch/alpha/kernel/process.c | 2 +-
+ arch/ia64/kernel/setup.c | 2 +-
+ arch/x86/kernel/cpu/resctrl/rdtgroup.c | 14 +++++++-------
+ arch/x86/mm/mmio-mod.c | 2 +-
+ arch/x86/platform/uv/uv_nmi.c | 2 +-
+ drivers/cpufreq/qcom-cpufreq-hw.c | 2 +-
+ drivers/cpufreq/scmi-cpufreq.c | 2 +-
+ drivers/gpu/drm/i915/i915_pmu.c | 2 +-
+ drivers/infiniband/hw/hfi1/affinity.c | 4 ++--
+ drivers/irqchip/irq-bcm6345-l1.c | 2 +-
+ kernel/irq/affinity.c | 2 +-
+ kernel/padata.c | 2 +-
+ kernel/rcu/tree_nocb.h | 4 ++--
+ kernel/rcu/tree_plugin.h | 2 +-
+ kernel/sched/core.c | 2 +-
+ kernel/sched/topology.c | 2 +-
+ kernel/time/clocksource.c | 2 +-
+ mm/vmstat.c | 4 ++--
+ 18 files changed, 27 insertions(+), 27 deletions(-)
diff --git a/arch/alpha/kernel/process.c b/arch/alpha/kernel/process.c
-index 5f8527081da9..0d4bc60828bf 100644
+index f4759e4ee4a9..a4415ad44982 100644
--- a/arch/alpha/kernel/process.c
+++ b/arch/alpha/kernel/process.c
@@ -125,7 +125,7 @@ common_shutdown_1(void *generic_ptr)
@@ -67,126 +51,8 @@
32 : cpumask_weight(&early_cpu_possible_map)),
additional_cpus > 0 ? additional_cpus : 0);
#endif /* CONFIG_ACPI_NUMA */
-diff --git a/arch/ia64/mm/tlb.c b/arch/ia64/mm/tlb.c
-index 135b5135cace..a5bce13ab047 100644
---- a/arch/ia64/mm/tlb.c
-+++ b/arch/ia64/mm/tlb.c
-@@ -332,7 +332,7 @@ __flush_tlb_range (struct vm_area_struct *vma, unsigned long start,
-
- preempt_disable();
- #ifdef CONFIG_SMP
-- if (mm != current->active_mm || cpumask_weight(mm_cpumask(mm)) != 1) {
-+ if (mm != current->active_mm || !cpumask_weight_eq(mm_cpumask(mm), 1)) {
- ia64_global_tlb_purge(mm, start, end, nbits);
- preempt_enable();
- return;
-diff --git a/arch/mips/cavium-octeon/octeon-irq.c b/arch/mips/cavium-octeon/octeon-irq.c
-index 844f882096e6..914871f15fb7 100644
---- a/arch/mips/cavium-octeon/octeon-irq.c
-+++ b/arch/mips/cavium-octeon/octeon-irq.c
-@@ -763,7 +763,7 @@ static void octeon_irq_cpu_offline_ciu(struct irq_data *data)
- if (!cpumask_test_cpu(cpu, mask))
- return;
-
-- if (cpumask_weight(mask) > 1) {
-+ if (cpumask_weight_gt(mask, 1)) {
- /*
- * It has multi CPU affinity, just remove this CPU
- * from the affinity set.
-@@ -795,7 +795,7 @@ static int octeon_irq_ciu_set_affinity(struct irq_data *data,
- * This removes the need to do locking in the .ack/.eoi
- * functions.
- */
-- if (cpumask_weight(dest) != 1)
-+ if (!cpumask_weight_eq(dest, 1))
- return -EINVAL;
-
- if (!enable_one)
-diff --git a/arch/mips/kernel/crash.c b/arch/mips/kernel/crash.c
-index 81845ba04835..4c35004754db 100644
---- a/arch/mips/kernel/crash.c
-+++ b/arch/mips/kernel/crash.c
-@@ -72,7 +72,7 @@ static void crash_kexec_prepare_cpus(void)
- */
- pr_emerg("Sending IPI to other cpus...\n");
- msecs = 10000;
-- while ((cpumask_weight(&cpus_in_crash) < ncpus) && (--msecs > 0)) {
-+ while (cpumask_weight_le(&cpus_in_crash, ncpus) && (--msecs > 0)) {
- cpu_relax();
- mdelay(1);
- }
-diff --git a/arch/powerpc/kernel/smp.c b/arch/powerpc/kernel/smp.c
-index c23ee842c4c3..2eae302ea26b 100644
---- a/arch/powerpc/kernel/smp.c
-+++ b/arch/powerpc/kernel/smp.c
-@@ -1615,7 +1615,7 @@ void start_secondary(void *unused)
- if (has_big_cores)
- sibling_mask = cpu_smallcore_mask;
-
-- if (cpumask_weight(mask) > cpumask_weight(sibling_mask(cpu)))
-+ if (cpumask_weight_gt(mask, cpumask_weight(sibling_mask(cpu))))
- shared_caches = true;
- }
-
-diff --git a/arch/powerpc/kernel/watchdog.c b/arch/powerpc/kernel/watchdog.c
-index 3fa6d240bade..9e9cba7cfb85 100644
---- a/arch/powerpc/kernel/watchdog.c
-+++ b/arch/powerpc/kernel/watchdog.c
-@@ -158,7 +158,7 @@ static void watchdog_smp_panic(int cpu, u64 tb)
- goto out;
- if (cpumask_test_cpu(cpu, &wd_smp_cpus_pending))
- goto out;
-- if (cpumask_weight(&wd_smp_cpus_pending) == 0)
-+ if (cpumask_empty(&wd_smp_cpus_pending))
- goto out;
-
- pr_emerg("CPU %d detected hard LOCKUP on other CPUs %*pbl\n",
-@@ -346,7 +346,7 @@ static void start_watchdog(void *arg)
-
- wd_smp_lock(&flags);
- cpumask_set_cpu(cpu, &wd_cpus_enabled);
-- if (cpumask_weight(&wd_cpus_enabled) == 1) {
-+ if (cpumask_weight_eq(&wd_cpus_enabled, 1)) {
- cpumask_set_cpu(cpu, &wd_smp_cpus_pending);
- wd_smp_last_reset_tb = get_tb();
- }
-diff --git a/arch/powerpc/xmon/xmon.c b/arch/powerpc/xmon/xmon.c
-index 8b28ff9d98d1..2073be312fe9 100644
---- a/arch/powerpc/xmon/xmon.c
-+++ b/arch/powerpc/xmon/xmon.c
-@@ -469,7 +469,7 @@ static bool wait_for_other_cpus(int ncpus)
-
- /* We wait for 2s, which is a metric "little while" */
- for (timeout = 20000; timeout != 0; --timeout) {
-- if (cpumask_weight(&cpus_in_xmon) >= ncpus)
-+ if (cpumask_weight_gt(&cpus_in_xmon, ncpus - 1))
- return true;
- udelay(100);
- barrier();
-@@ -1338,7 +1338,7 @@ static int cpu_cmd(void)
- case 'S':
- case 't':
- cpumask_copy(&xmon_batch_cpus, &cpus_in_xmon);
-- if (cpumask_weight(&xmon_batch_cpus) <= 1) {
-+ if (cpumask_weight_le(&xmon_batch_cpus, 2)) {
- printf("There are no other cpus in xmon\n");
- break;
- }
-diff --git a/arch/s390/kernel/perf_cpum_cf.c b/arch/s390/kernel/perf_cpum_cf.c
-index ee8707abdb6a..4d217f7f5ccf 100644
---- a/arch/s390/kernel/perf_cpum_cf.c
-+++ b/arch/s390/kernel/perf_cpum_cf.c
-@@ -975,7 +975,7 @@ static int cfset_all_start(struct cfset_request *req)
- return -ENOMEM;
- cpumask_and(mask, &req->mask, cpu_online_mask);
- on_each_cpu_mask(mask, cfset_ioctl_on, &p, 1);
-- if (atomic_read(&p.cpus_ack) != cpumask_weight(mask)) {
-+ if (!cpumask_weight_eq(mask, atomic_read(&p.cpus_ack))) {
- on_each_cpu_mask(mask, cfset_ioctl_off, &p, 1);
- rc = -EIO;
- debug_sprintf_event(cf_dbg, 4, "%s CPUs missing", __func__);
diff --git a/arch/x86/kernel/cpu/resctrl/rdtgroup.c b/arch/x86/kernel/cpu/resctrl/rdtgroup.c
-index 94e7e6b420e4..5fa730063af2 100644
+index b57b3db9a6a7..e23ff03290b8 100644
--- a/arch/x86/kernel/cpu/resctrl/rdtgroup.c
+++ b/arch/x86/kernel/cpu/resctrl/rdtgroup.c
@@ -341,14 +341,14 @@ static int cpus_mon_write(struct rdtgroup *rdtgrp, cpumask_var_t newmask,
@@ -248,28 +114,6 @@
ret = -EINVAL;
rdt_last_cmd_puts("Can only assign online CPUs\n");
goto unlock;
-diff --git a/arch/x86/kernel/smpboot.c b/arch/x86/kernel/smpboot.c
-index ac2909f0cab3..394071898b50 100644
---- a/arch/x86/kernel/smpboot.c
-+++ b/arch/x86/kernel/smpboot.c
-@@ -1594,7 +1594,7 @@ static void remove_siblinginfo(int cpu)
- /*/
- * last thread sibling in this cpu core going down
- */
-- if (cpumask_weight(topology_sibling_cpumask(cpu)) == 1)
-+ if (cpumask_weight_eq(topology_sibling_cpumask(cpu), 1))
- cpu_data(sibling).booted_cores--;
- }
-
-@@ -1603,7 +1603,7 @@ static void remove_siblinginfo(int cpu)
-
- for_each_cpu(sibling, topology_sibling_cpumask(cpu)) {
- cpumask_clear_cpu(cpu, topology_sibling_cpumask(sibling));
-- if (cpumask_weight(topology_sibling_cpumask(sibling)) == 1)
-+ if (cpumask_weight_eq(topology_sibling_cpumask(sibling), 1))
- cpu_data(sibling).smt_active = false;
- }
-
diff --git a/arch/x86/mm/mmio-mod.c b/arch/x86/mm/mmio-mod.c
index 933a2ebad471..c3317f0650d8 100644
--- a/arch/x86/mm/mmio-mod.c
@@ -297,10 +141,10 @@
atomic_set(&uv_nmi_cpus_in_nmi, -1);
atomic_set(&uv_nmi_cpu, -1);
diff --git a/drivers/cpufreq/qcom-cpufreq-hw.c b/drivers/cpufreq/qcom-cpufreq-hw.c
-index 248135e5087e..60055ab190a9 100644
+index 05f3d7876e44..95a0c57ab5bb 100644
--- a/drivers/cpufreq/qcom-cpufreq-hw.c
+++ b/drivers/cpufreq/qcom-cpufreq-hw.c
-@@ -475,7 +475,7 @@ static int qcom_cpufreq_hw_cpu_init(struct cpufreq_policy *policy)
+@@ -482,7 +482,7 @@ static int qcom_cpufreq_hw_cpu_init(struct cpufreq_policy *policy)
}
qcom_get_related_cpus(index, policy->cpus);
@@ -322,19 +166,6 @@
/*
* Either opp-table is not set or no opp-shared was found.
* Use the CPU mask from SCMI to designate CPUs sharing an OPP
-diff --git a/drivers/firmware/psci/psci_checker.c b/drivers/firmware/psci/psci_checker.c
-index 116eb465cdb4..90c9473832a9 100644
---- a/drivers/firmware/psci/psci_checker.c
-+++ b/drivers/firmware/psci/psci_checker.c
-@@ -90,7 +90,7 @@ static unsigned int down_and_up_cpus(const struct cpumask *cpus,
- * cpu_down() checks the number of online CPUs before the TOS
- * resident CPU.
- */
-- if (cpumask_weight(offlined_cpus) + 1 == nb_available_cpus) {
-+ if (cpumask_weight_eq(offlined_cpus, nb_available_cpus - 1)) {
- if (ret != -EBUSY) {
- pr_err("Unexpected return code %d while trying "
- "to power down last online CPU %d\n",
diff --git a/drivers/gpu/drm/i915/i915_pmu.c b/drivers/gpu/drm/i915/i915_pmu.c
index 0b488d49694c..962e8d6bf6ea 100644
--- a/drivers/gpu/drm/i915/i915_pmu.c
@@ -348,56 +179,11 @@
cpumask_set_cpu(cpu, &i915_pmu_cpumask);
return 0;
-diff --git a/drivers/hv/channel_mgmt.c b/drivers/hv/channel_mgmt.c
-index 2829575fd9b7..da297220230d 100644
---- a/drivers/hv/channel_mgmt.c
-+++ b/drivers/hv/channel_mgmt.c
-@@ -762,8 +762,8 @@ static void init_vp_index(struct vmbus_channel *channel)
- }
- alloced_mask = &hv_context.hv_numa_map[numa_node];
-
-- if (cpumask_weight(alloced_mask) ==
-- cpumask_weight(cpumask_of_node(numa_node))) {
-+ if (cpumask_weight_eq(alloced_mask,
-+ cpumask_weight(cpumask_of_node(numa_node)))) {
- /*
- * We have cycled through all the CPUs in the node;
- * reset the alloced map.
diff --git a/drivers/infiniband/hw/hfi1/affinity.c b/drivers/infiniband/hw/hfi1/affinity.c
-index 98c813ba4304..7c5ca5c5306a 100644
+index 98c813ba4304..38eee675369a 100644
--- a/drivers/infiniband/hw/hfi1/affinity.c
+++ b/drivers/infiniband/hw/hfi1/affinity.c
-@@ -507,7 +507,7 @@ static int _dev_comp_vect_cpu_mask_init(struct hfi1_devdata *dd,
- * available CPUs divide it by the number of devices in the
- * local NUMA node.
- */
-- if (cpumask_weight(&entry->comp_vect_mask) == 1) {
-+ if (cpumask_weight_eq(&entry->comp_vect_mask, 1)) {
- possible_cpus_comp_vect = 1;
- dd_dev_warn(dd,
- "Number of kernel receive queues is too large for completion vector affinity to be effective\n");
-@@ -593,7 +593,7 @@ int hfi1_dev_affinity_init(struct hfi1_devdata *dd)
- {
- struct hfi1_affinity_node *entry;
- const struct cpumask *local_mask;
-- int curr_cpu, possible, i, ret;
-+ int curr_cpu, i, ret;
- bool new_entry = false;
-
- local_mask = cpumask_of_node(dd->node);
-@@ -626,10 +626,9 @@ int hfi1_dev_affinity_init(struct hfi1_devdata *dd)
- local_mask);
-
- /* fill in the receive list */
-- possible = cpumask_weight(&entry->def_intr.mask);
- curr_cpu = cpumask_first(&entry->def_intr.mask);
-
-- if (possible == 1) {
-+ if (cpumask_weight_eq(&entry->def_intr.mask, 1)) {
- /* only one CPU, everyone will use it */
- cpumask_set_cpu(curr_cpu, &entry->rcv_intr.mask);
- cpumask_set_cpu(curr_cpu, &entry->general_intr_mask);
-@@ -667,7 +666,7 @@ int hfi1_dev_affinity_init(struct hfi1_devdata *dd)
+@@ -667,7 +667,7 @@ int hfi1_dev_affinity_init(struct hfi1_devdata *dd)
* engines, use the same CPU cores as general/control
* context.
*/
@@ -406,7 +192,7 @@
cpumask_copy(&entry->def_intr.mask,
&entry->general_intr_mask);
}
-@@ -687,7 +686,7 @@ int hfi1_dev_affinity_init(struct hfi1_devdata *dd)
+@@ -687,7 +687,7 @@ int hfi1_dev_affinity_init(struct hfi1_devdata *dd)
* vectors, use the same CPU core as the general/control
* context.
*/
@@ -415,55 +201,6 @@
cpumask_copy(&entry->comp_vect_mask,
&entry->general_intr_mask);
}
-@@ -1017,7 +1016,7 @@ int hfi1_get_proc_affinity(int node)
- cpu = cpumask_first(proc_mask);
- cpumask_set_cpu(cpu, &set->used);
- goto done;
-- } else if (current->nr_cpus_allowed < cpumask_weight(&set->mask)) {
-+ } else if (cpumask_weight_gt(&set->mask, current->nr_cpus_allowed)) {
- hfi1_cdbg(PROC, "PID %u %s affinity set to CPU set(s) %*pbl",
- current->pid, current->comm,
- cpumask_pr_args(proc_mask));
-diff --git a/drivers/infiniband/hw/qib/qib_file_ops.c b/drivers/infiniband/hw/qib/qib_file_ops.c
-index aa290928cf96..60717606fe98 100644
---- a/drivers/infiniband/hw/qib/qib_file_ops.c
-+++ b/drivers/infiniband/hw/qib/qib_file_ops.c
-@@ -1151,7 +1151,7 @@ static void assign_ctxt_affinity(struct file *fp, struct qib_devdata *dd)
- * reserve a processor for it on the local NUMA node.
- */
- if ((weight >= qib_cpulist_count) &&
-- (cpumask_weight(local_mask) <= qib_cpulist_count)) {
-+ (cpumask_weight_le(local_mask, qib_cpulist_count + 1))) {
- for_each_cpu(local_cpu, local_mask)
- if (!test_and_set_bit(local_cpu, qib_cpulist)) {
- fd->rec_cpu_num = local_cpu;
-diff --git a/drivers/infiniband/hw/qib/qib_iba7322.c b/drivers/infiniband/hw/qib/qib_iba7322.c
-index ab98b6a3ae1e..636a080b2952 100644
---- a/drivers/infiniband/hw/qib/qib_iba7322.c
-+++ b/drivers/infiniband/hw/qib/qib_iba7322.c
-@@ -3405,7 +3405,7 @@ static void qib_setup_7322_interrupt(struct qib_devdata *dd, int clearpend)
- local_mask = cpumask_of_pcibus(dd->pcidev->bus);
- firstcpu = cpumask_first(local_mask);
- if (firstcpu >= nr_cpu_ids ||
-- cpumask_weight(local_mask) == num_online_cpus()) {
-+ cpumask_weight_eq(local_mask, num_online_cpus())) {
- local_mask = topology_core_cpumask(0);
- firstcpu = cpumask_first(local_mask);
- }
-diff --git a/drivers/infiniband/sw/siw/siw_main.c b/drivers/infiniband/sw/siw/siw_main.c
-index e5c586913d0b..5d6220137a70 100644
---- a/drivers/infiniband/sw/siw/siw_main.c
-+++ b/drivers/infiniband/sw/siw/siw_main.c
-@@ -193,8 +193,7 @@ int siw_get_tx_cpu(struct siw_device *sdev)
- else
- tx_cpumask = siw_cpu_info.tx_valid_cpus[node];
-
-- num_cpus = cpumask_weight(tx_cpumask);
-- if (!num_cpus) {
-+ if (cpumask_empty(tx_cpumask)) {
- /* no CPU on this NUMA node */
- tx_cpumask = cpu_online_mask;
- num_cpus = cpumask_weight(tx_cpumask);
diff --git a/drivers/irqchip/irq-bcm6345-l1.c b/drivers/irqchip/irq-bcm6345-l1.c
index fd079215c17f..142a7431745f 100644
--- a/drivers/irqchip/irq-bcm6345-l1.c
@@ -477,75 +214,6 @@
ret = -ENODEV;
goto out_free;
}
-diff --git a/drivers/scsi/lpfc/lpfc_init.c b/drivers/scsi/lpfc/lpfc_init.c
-index ba17a8f740a9..3c9e31078f06 100644
---- a/drivers/scsi/lpfc/lpfc_init.c
-+++ b/drivers/scsi/lpfc/lpfc_init.c
-@@ -12626,7 +12626,7 @@ lpfc_cpuhp_get_eq(struct lpfc_hba *phba, unsigned int cpu,
- * gone offline yet, we need >1.
- */
- cpumask_and(tmp, maskp, cpu_online_mask);
-- if (cpumask_weight(tmp) > 1)
-+ if (cpumask_weight_gt(tmp, 1))
- continue;
-
- /* Now that we have an irq to shutdown, get the eq
-diff --git a/drivers/soc/fsl/qbman/qman_test_stash.c b/drivers/soc/fsl/qbman/qman_test_stash.c
-index b7e8e5ec884c..7ef6c624bb59 100644
---- a/drivers/soc/fsl/qbman/qman_test_stash.c
-+++ b/drivers/soc/fsl/qbman/qman_test_stash.c
-@@ -561,7 +561,7 @@ int qman_test_stash(void)
- {
- int err;
-
-- if (cpumask_weight(cpu_online_mask) < 2) {
-+ if (cpumask_weight_le(cpu_online_mask, 2)) {
- pr_info("%s(): skip - only 1 CPU\n", __func__);
- return 0;
- }
-diff --git a/include/linux/cpumask.h b/include/linux/cpumask.h
-index 64dae70d31f5..b5e50cf74785 100644
---- a/include/linux/cpumask.h
-+++ b/include/linux/cpumask.h
-@@ -575,6 +575,38 @@ static inline unsigned int cpumask_weight(const struct cpumask *srcp)
- return bitmap_weight(cpumask_bits(srcp), nr_cpumask_bits);
- }
-
-+/**
-+ * cpumask_weight_eq - Check if # of bits in *srcp is equal to a given number
-+ * @srcp: the cpumask to count bits (< nr_cpu_ids) in.
-+ * @num: the number to check.
-+ */
-+static inline bool cpumask_weight_eq(const struct cpumask *srcp, unsigned int num)
-+{
-+ return bitmap_weight_eq(cpumask_bits(srcp), nr_cpumask_bits, num);
-+}
-+
-+/**
-+ * cpumask_weight_gt - Check if # of bits in *srcp is greater than a given number
-+ * @srcp: the cpumask to count bits (< nr_cpu_ids) in.
-+ * @num: the number to check.
-+ */
-+static inline bool cpumask_weight_gt(const struct cpumask *srcp,
-+ unsigned int num)
-+{
-+ return bitmap_weight_gt(cpumask_bits(srcp), nr_cpumask_bits, num);
-+}
-+
-+/**
-+ * cpumask_weight_le - Check if # of bits in *srcp is less than a given number
-+ * @srcp: the cpumask to count bits (< nr_cpu_ids) in.
-+ * @num: the number to check.
-+ */
-+static inline bool cpumask_weight_le(const struct cpumask *srcp,
-+ unsigned int num)
-+{
-+ return bitmap_weight_le(cpumask_bits(srcp), nr_cpumask_bits, num);
-+}
-+
- /**
- * cpumask_shift_right - *dstp = *srcp >> n
- * @dstp: the cpumask result
diff --git a/kernel/irq/affinity.c b/kernel/irq/affinity.c
index f7ff8919dc9b..18740faf0eb1 100644
--- a/kernel/irq/affinity.c
@@ -573,10 +241,10 @@
/* Select an alternate fallback CPU and notify the caller. */
diff --git a/kernel/rcu/tree_nocb.h b/kernel/rcu/tree_nocb.h
-index 2461fe8d0c23..82473478e222 100644
+index 1e40519d1a05..bc038a451768 100644
--- a/kernel/rcu/tree_nocb.h
+++ b/kernel/rcu/tree_nocb.h
-@@ -1135,7 +1135,7 @@ void __init rcu_init_nohz(void)
+@@ -1169,7 +1169,7 @@ void __init rcu_init_nohz(void)
struct rcu_data *rdp;
#if defined(CONFIG_NO_HZ_FULL)
@@ -585,7 +253,7 @@
need_rcu_nocb_mask = true;
#endif /* #if defined(CONFIG_NO_HZ_FULL) */
-@@ -1319,7 +1319,7 @@ static void __init rcu_organize_nocb_kthreads(void)
+@@ -1353,7 +1353,7 @@ static void __init rcu_organize_nocb_kthreads(void)
*/
void rcu_bind_current_to_nocb(void)
{
@@ -595,10 +263,10 @@
}
EXPORT_SYMBOL_GPL(rcu_bind_current_to_nocb);
diff --git a/kernel/rcu/tree_plugin.h b/kernel/rcu/tree_plugin.h
-index 463735a3b657..2908495cc840 100644
+index 54ef0e8c8742..3857ff6cb6f7 100644
--- a/kernel/rcu/tree_plugin.h
+++ b/kernel/rcu/tree_plugin.h
-@@ -1215,7 +1215,7 @@ static void rcu_boost_kthread_setaffinity(struct rcu_node *rnp, int outgoingcpu)
+@@ -1216,7 +1216,7 @@ static void rcu_boost_kthread_setaffinity(struct rcu_node *rnp, int outgoingcpu)
cpu != outgoingcpu)
cpumask_set_cpu(cpu, cm);
cpumask_and(cm, cm, housekeeping_cpumask(HK_FLAG_RCU));
@@ -606,29 +274,11 @@
+ if (cpumask_empty(cm))
cpumask_copy(cm, housekeeping_cpumask(HK_FLAG_RCU));
set_cpus_allowed_ptr(t, cm);
- free_cpumask_var(cm);
+ mutex_unlock(&rnp->boost_kthread_mutex);
diff --git a/kernel/sched/core.c b/kernel/sched/core.c
-index beaa8be6241e..c91912c0c005 100644
+index 83872f95a1ea..9b3ec14227e1 100644
--- a/kernel/sched/core.c
+++ b/kernel/sched/core.c
-@@ -6003,7 +6003,7 @@ static void sched_core_cpu_starting(unsigned int cpu)
- WARN_ON_ONCE(rq->core != rq);
-
- /* if we're the first, we'll be our own leader */
-- if (cpumask_weight(smt_mask) == 1)
-+ if (cpumask_weight_eq(smt_mask, 1))
- goto unlock;
-
- /* find the leader */
-@@ -6044,7 +6044,7 @@ static void sched_core_cpu_deactivate(unsigned int cpu)
- sched_core_lock(cpu, &flags);
-
- /* if we're the last man standing, nothing to do */
-- if (cpumask_weight(smt_mask) == 1) {
-+ if (cpumask_weight_eq(smt_mask, 1)) {
- WARN_ON_ONCE(rq->core != rq);
- goto unlock;
- }
@@ -8715,7 +8715,7 @@ int cpuset_cpumask_can_shrink(const struct cpumask *cur,
{
int ret = 1;
@@ -638,26 +288,8 @@
return ret;
ret = dl_cpuset_cpumask_can_shrink(cur, trial);
-@@ -9054,7 +9054,7 @@ int sched_cpu_activate(unsigned int cpu)
- /*
- * When going up, increment the number of cores with SMT present.
- */
-- if (cpumask_weight(cpu_smt_mask(cpu)) == 2)
-+ if (cpumask_weight_eq(cpu_smt_mask(cpu), 2))
- static_branch_inc_cpuslocked(&sched_smt_present);
- #endif
- set_cpu_active(cpu, true);
-@@ -9129,7 +9129,7 @@ int sched_cpu_deactivate(unsigned int cpu)
- /*
- * When going down, decrement the number of cores with SMT present.
- */
-- if (cpumask_weight(cpu_smt_mask(cpu)) == 2)
-+ if (cpumask_weight_eq(cpu_smt_mask(cpu), 2))
- static_branch_dec_cpuslocked(&sched_smt_present);
-
- sched_core_cpu_deactivate(cpu);
diff --git a/kernel/sched/topology.c b/kernel/sched/topology.c
-index d201a7052a29..79395571599f 100644
+index d201a7052a29..8478e2a8cd65 100644
--- a/kernel/sched/topology.c
+++ b/kernel/sched/topology.c
@@ -74,7 +74,7 @@ static int sched_domain_debug_one(struct sched_domain *sd, int cpu, int level,
@@ -669,33 +301,11 @@
printk(KERN_CONT "\n");
printk(KERN_ERR "ERROR: empty group\n");
break;
-@@ -169,7 +169,7 @@ static const unsigned int SD_DEGENERATE_GROUPS_MASK =
-
- static int sd_degenerate(struct sched_domain *sd)
- {
-- if (cpumask_weight(sched_domain_span(sd)) == 1)
-+ if (cpumask_weight_eq(sched_domain_span(sd), 1))
- return 1;
-
- /* Following flags need at least 2 groups */
-diff --git a/kernel/time/clockevents.c b/kernel/time/clockevents.c
-index 003ccf338d20..32d6629a55b2 100644
---- a/kernel/time/clockevents.c
-+++ b/kernel/time/clockevents.c
-@@ -648,7 +648,7 @@ void tick_cleanup_dead_cpu(int cpu)
- */
- list_for_each_entry_safe(dev, tmp, &clockevent_devices, list) {
- if (cpumask_test_cpu(cpu, dev->cpumask) &&
-- cpumask_weight(dev->cpumask) == 1 &&
-+ cpumask_weight_eq(dev->cpumask, 1) &&
- !tick_is_broadcast_device(dev)) {
- BUG_ON(!clockevent_state_detached(dev));
- list_del(&dev->list);
diff --git a/kernel/time/clocksource.c b/kernel/time/clocksource.c
-index bf6a087e132f..8471b9378206 100644
+index 95d7ca35bdf2..cee5da1e54c4 100644
--- a/kernel/time/clocksource.c
+++ b/kernel/time/clocksource.c
-@@ -321,7 +321,7 @@ void clocksource_verify_percpu(struct clocksource *cs)
+@@ -343,7 +343,7 @@ void clocksource_verify_percpu(struct clocksource *cs)
cpus_read_lock();
preempt_disable();
clocksource_verify_choose_cpus();
@@ -727,5 +337,5 @@
node_clear_state(node, N_CPU);
--
-2.25.1
+2.30.2