]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
sched: Simplify tg_set_cfs_bandwidth()
authorPeter Zijlstra <peterz@infradead.org>
Fri, 9 Jun 2023 18:45:16 +0000 (20:45 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 3 Apr 2024 13:28:18 +0000 (15:28 +0200)
[ Upstream commit 6fb45460615358157a6d3c990e74f9c1395247e2 ]

Use guards to reduce gotos and simplify control flow.

Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Stable-dep-of: 1aa09b9379a7 ("powercap: intel_rapl: Fix locking in TPMI RAPL")
Signed-off-by: Sasha Levin <sashal@kernel.org>
include/linux/cpu.h
kernel/sched/core.c

index 59dd421a8e35d0b22c294f8c67c70c92ee06288e..e990c180282e78607f70e2a883c94a3f107af43b 100644 (file)
@@ -157,6 +157,8 @@ static inline int remove_cpu(unsigned int cpu) { return -EPERM; }
 static inline void smp_shutdown_nonboot_cpus(unsigned int primary_cpu) { }
 #endif /* !CONFIG_HOTPLUG_CPU */
 
+DEFINE_LOCK_GUARD_0(cpus_read_lock, cpus_read_lock(), cpus_read_unlock())
+
 #ifdef CONFIG_PM_SLEEP_SMP
 extern int freeze_secondary_cpus(int primary);
 extern void thaw_secondary_cpus(void);
index a854b71836dd5b8a811d098a0cc24a2381e1e727..1f91e2c12731e364c7cf3d03c1f40d8e5364bd5a 100644 (file)
@@ -10868,11 +10868,12 @@ static int tg_set_cfs_bandwidth(struct task_group *tg, u64 period, u64 quota,
         * Prevent race between setting of cfs_rq->runtime_enabled and
         * unthrottle_offline_cfs_rqs().
         */
-       cpus_read_lock();
-       mutex_lock(&cfs_constraints_mutex);
+       guard(cpus_read_lock)();
+       guard(mutex)(&cfs_constraints_mutex);
+
        ret = __cfs_schedulable(tg, period, quota);
        if (ret)
-               goto out_unlock;
+               return ret;
 
        runtime_enabled = quota != RUNTIME_INF;
        runtime_was_enabled = cfs_b->quota != RUNTIME_INF;
@@ -10882,39 +10883,38 @@ static int tg_set_cfs_bandwidth(struct task_group *tg, u64 period, u64 quota,
         */
        if (runtime_enabled && !runtime_was_enabled)
                cfs_bandwidth_usage_inc();
-       raw_spin_lock_irq(&cfs_b->lock);
-       cfs_b->period = ns_to_ktime(period);
-       cfs_b->quota = quota;
-       cfs_b->burst = burst;
 
-       __refill_cfs_bandwidth_runtime(cfs_b);
+       scoped_guard (raw_spinlock_irq, &cfs_b->lock) {
+               cfs_b->period = ns_to_ktime(period);
+               cfs_b->quota = quota;
+               cfs_b->burst = burst;
 
-       /* Restart the period timer (if active) to handle new period expiry: */
-       if (runtime_enabled)
-               start_cfs_bandwidth(cfs_b);
+               __refill_cfs_bandwidth_runtime(cfs_b);
 
-       raw_spin_unlock_irq(&cfs_b->lock);
+               /*
+                * Restart the period timer (if active) to handle new
+                * period expiry:
+                */
+               if (runtime_enabled)
+                       start_cfs_bandwidth(cfs_b);
+       }
 
        for_each_online_cpu(i) {
                struct cfs_rq *cfs_rq = tg->cfs_rq[i];
                struct rq *rq = cfs_rq->rq;
-               struct rq_flags rf;
 
-               rq_lock_irq(rq, &rf);
+               guard(rq_lock_irq)(rq);
                cfs_rq->runtime_enabled = runtime_enabled;
                cfs_rq->runtime_remaining = 0;
 
                if (cfs_rq->throttled)
                        unthrottle_cfs_rq(cfs_rq);
-               rq_unlock_irq(rq, &rf);
        }
+
        if (runtime_was_enabled && !runtime_enabled)
                cfs_bandwidth_usage_dec();
-out_unlock:
-       mutex_unlock(&cfs_constraints_mutex);
-       cpus_read_unlock();
 
-       return ret;
+       return 0;
 }
 
 static int tg_set_cfs_quota(struct task_group *tg, long cfs_quota_us)