Inter-revision diff: patch 5

Comparing v1 (message) to v2 (message)

--- 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
 
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help