[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20190424163802.GH4038@hirez.programming.kicks-ass.net>
Date: Wed, 24 Apr 2019 18:38:02 +0200
From: Peter Zijlstra <peterz@...radead.org>
To: Thara Gopinath <thara.gopinath@...aro.org>
Cc: mingo@...hat.com, rui.zhang@...el.com,
linux-kernel@...r.kernel.org, amit.kachhap@...il.com,
viresh.kumar@...aro.org, javi.merino@...nel.org,
edubezval@...il.com, daniel.lezcano@...aro.org,
vincent.guittot@...aro.org, nicolas.dechesne@...aro.org,
bjorn.andersson@...aro.org, dietmar.eggemann@....com
Subject: Re: [PATCH V2 1/3] Calculate Thermal Pressure
On Tue, Apr 16, 2019 at 03:38:39PM -0400, Thara Gopinath wrote:
> +static void thermal_pressure_update(struct thermal_pressure *cpu_thermal,
> + unsigned long cap_max_freq,
> + unsigned long max_freq, bool change_scale)
> +{
> + unsigned long flags = 0;
> +
> + calculate_thermal_pressure(cpu_thermal);
> + if (change_scale)
> + cpu_thermal->raw_scale =
> + (cap_max_freq << SCHED_CAPACITY_SHIFT) / max_freq;
That needs {} per coding style.
> +
> + mod_timer(&cpu_thermal->timer, jiffies +
> + usecs_to_jiffies(TICK_USEC));
> +
> + spin_unlock_irqrestore(&cpu_thermal->lock, flags);
This is busted has heck, @flags should be the result of irqsave(.flags).
> +}
> +
> +/**
> + * Function for the tick update of the thermal pressure.
> + * The thermal pressure update is aborted if already an update is
> + * happening.
> + */
> +static void thermal_pressure_timeout(struct timer_list *timer)
> +{
> + struct thermal_pressure *cpu_thermal = from_timer(cpu_thermal, timer,
> + timer);
If you split after the = the result is so very much easier to read.
> + unsigned long flags = 0;
> +
> + if (!cpu_thermal)
> + return;
> +
> + if (!spin_trylock_irqsave(&cpu_thermal->lock, flags))
> + return;
> +
> + thermal_pressure_update(cpu_thermal, 0, 0, 0);
> +}
> +
> +/**
> + * Function to update thermal pressure from cooling device
> + * or any framework responsible for capping cpu maximum
> + * capacity.
Would be useful to know how wide @cpus is, typically. Is that the power
culster?
> + */
> +void sched_update_thermal_pressure(struct cpumask *cpus,
> + unsigned long cap_max_freq,
> + unsigned long max_freq)
> +{
> + int cpu;
> + unsigned long flags = 0;
> + struct thermal_pressure *cpu_thermal;
You got them in exactly the wrong order here.
> +
> + for_each_cpu(cpu, cpus) {
> + cpu_thermal = per_cpu(thermal_pressure_cpu, cpu);
> + if (!cpu_thermal)
> + return;
> + spin_lock_irqsave(&cpu_thermal->lock, flags);
> + thermal_pressure_update(cpu_thermal, cap_max_freq, max_freq, 1);
> + }
> +}
That's just horrible style. Move the unlock out of
thermal_pressure_update() such that lock and unlock are in the same
function.
Powered by blists - more mailing lists