sched/topology: Simplify sched_group_mask() usage
authorPeter Zijlstra <peterz@infradead.org>
Mon, 1 May 2017 06:51:05 +0000 (08:51 +0200)
committerIngo Molnar <mingo@kernel.org>
Mon, 15 May 2017 08:15:33 +0000 (10:15 +0200)
While writing the comments, it occurred to me that:

  sg_cpus & sg_mask == sg_mask

at least conceptually; the !overlap case sets the all 1s mask. If we
correct that we can simplify things and directly use sg_mask.

Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Mike Galbraith <efault@gmx.de>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: linux-kernel@vger.kernel.org
Signed-off-by: Ingo Molnar <mingo@kernel.org>
kernel/sched/fair.c
kernel/sched/topology.c

index f80c825e2b43b73230ccb26e1f814098b3a194dd..1eb32d4513ea103b554076fa9df7f0ca0de35441 100644 (file)
@@ -7996,7 +7996,7 @@ static int active_load_balance_cpu_stop(void *data);
 static int should_we_balance(struct lb_env *env)
 {
        struct sched_group *sg = env->sd->groups;
-       struct cpumask *sg_cpus, *sg_mask;
+       struct cpumask *sg_mask;
        int cpu, balance_cpu = -1;
 
        /*
@@ -8006,11 +8006,10 @@ static int should_we_balance(struct lb_env *env)
        if (env->idle == CPU_NEWLY_IDLE)
                return 1;
 
-       sg_cpus = sched_group_cpus(sg);
        sg_mask = sched_group_mask(sg);
        /* Try to find first idle cpu */
-       for_each_cpu_and(cpu, sg_cpus, env->cpus) {
-               if (!cpumask_test_cpu(cpu, sg_mask) || !idle_cpu(cpu))
+       for_each_cpu_and(cpu, sg_mask, env->cpus) {
+               if (!idle_cpu(cpu))
                        continue;
 
                balance_cpu = cpu;
index dea1950b42a5ed3221b1a43ed157b56b65f35425..bf53a99eb511f47d03d75aa82c16e07fc33a6df3 100644 (file)
@@ -85,7 +85,8 @@ static int sched_domain_debug_one(struct sched_domain *sd, int cpu, int level,
                                group->sgc->id,
                                cpumask_pr_args(sched_group_cpus(group)));
 
-               if ((sd->flags & SD_OVERLAP) && !cpumask_full(sched_group_mask(group))) {
+               if ((sd->flags & SD_OVERLAP) &&
+                   !cpumask_equal(sched_group_mask(group), sched_group_cpus(group))) {
                        printk(KERN_CONT " mask=%*pbl",
                                cpumask_pr_args(sched_group_mask(group)));
                }
@@ -505,7 +506,7 @@ enum s_alloc {
  */
 int group_balance_cpu(struct sched_group *sg)
 {
-       return cpumask_first_and(sched_group_cpus(sg), sched_group_mask(sg));
+       return cpumask_first(sched_group_mask(sg));
 }