+ continue;
+
+ scoped_guard (rq_lock, overloaded_rq) {
+ update_rq_clock(overloaded_rq);
+
+ if (!has_pushable_tasks(overloaded_rq))
+ break;
You can skip the clock update if there aren't any tasks to grab.
+
+ env.src_cpu = overloaded_cpu;
+ env.src_rq = overloaded_rq;
+
+ p = detach_one_task(&env);
Yep, detach_one_task() uses can_migrate_task() which checks
task_on_cpu(), so that's all good :-)
+ }
+
+ if (!p)
+ continue;
+
+ attach_one_task(this_rq, p);
+ return 1;
+ }
+
+ cpumask_andnot(cpus, cpus, sched_domain_span(cpu_llc));
+ }