]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
cpufreq/schedutil: Only bind threads if needed
authorChristian Loehle <christian.loehle@arm.com>
Mon, 20 Jan 2025 10:09:46 +0000 (10:09 +0000)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Thu, 23 Jan 2025 20:09:25 +0000 (21:09 +0100)
Remove the unconditional binding of sugov kthreads to the affected CPUs
if the cpufreq driver indicates that updates can happen from any CPU.
This allows userspace to set affinities to either save power (waking up
bigger CPUs on HMP can be expensive) or increasing performance (by
letting the utilized CPUs run without preemption of the sugov kthread).

Signed-off-by: Christian Loehle <christian.loehle@arm.com>
Acked-by: Viresh Kumar <viresh.kumar@linaro.org>
Acked-by: Vincent Guittot <vincent.guittot@linaro.org>
Acked-by: Rafael J. Wysocki <rafael@kernel.org>
Acked-by: Juri Lelli <juri.lelli@redhat.com>
Link: https://patch.msgid.link/5a8deed4-7764-4729-a9d4-9520c25fa7e8@arm.com
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
kernel/sched/cpufreq_schedutil.c
kernel/sched/syscalls.c

index a2a29e3fffcaa86a8b4a40e95de45ec3f837050b..1a19d69b91ed3cc9dde91eba91793d95f74ba4fc 100644 (file)
@@ -666,7 +666,11 @@ static int sugov_kthread_create(struct sugov_policy *sg_policy)
        }
 
        sg_policy->thread = thread;
-       kthread_bind_mask(thread, policy->related_cpus);
+       if (policy->dvfs_possible_from_any_cpu)
+               set_cpus_allowed_ptr(thread, policy->related_cpus);
+       else
+               kthread_bind_mask(thread, policy->related_cpus);
+
        init_irq_work(&sg_policy->irq_work, sugov_irq_work);
        mutex_init(&sg_policy->work_lock);
 
index 149e2c8036d36199b48009808a38d3345656b7ea..456d339be98fb2ba1720d496af8146580473b981 100644 (file)
@@ -1129,6 +1129,13 @@ int dl_task_check_affinity(struct task_struct *p, const struct cpumask *mask)
        if (!task_has_dl_policy(p) || !dl_bandwidth_enabled())
                return 0;
 
+       /*
+        * The special/sugov task isn't part of regular bandwidth/admission
+        * control so let userspace change affinities.
+        */
+       if (dl_entity_is_special(&p->dl))
+               return 0;
+
        /*
         * Since bandwidth control happens on root_domain basis,
         * if admission test is enabled, we only admit -deadline