cgroup/cpuset: Skip task update if hotplug doesn't affect current cpuset
authorWaiman Long <longman@redhat.com>
Fri, 17 Mar 2023 15:15:06 +0000 (11:15 -0400)
committerTejun Heo <tj@kernel.org>
Wed, 29 Mar 2023 18:41:28 +0000 (08:41 -1000)
If a hotplug event doesn't affect the current cpuset, there is no point
to call hotplug_update_tasks() or hotplug_update_tasks_legacy(). So
just skip it.

Signed-off-by: Waiman Long <longman@redhat.com>
Reviewed-by: Michal Koutný <mkoutny@suse.com>
Signed-off-by: Tejun Heo <tj@kernel.org>
kernel/cgroup/cpuset.c

index 8472c71..a05bc93 100644 (file)
@@ -3516,6 +3516,8 @@ retry:
 update_tasks:
        cpus_updated = !cpumask_equal(&new_cpus, cs->effective_cpus);
        mems_updated = !nodes_equal(new_mems, cs->effective_mems);
+       if (!cpus_updated && !mems_updated)
+               goto unlock;    /* Hotplug doesn't affect this cpuset */
 
        if (mems_updated)
                check_insane_mems_config(&new_mems);
@@ -3527,6 +3529,7 @@ update_tasks:
                hotplug_update_tasks_legacy(cs, &new_cpus, &new_mems,
                                            cpus_updated, mems_updated);
 
+unlock:
        percpu_up_write(&cpuset_rwsem);
 }