Re: [PATCH v3 2/5] thermal: add trace events to the power allocator governor

From: Viresh Kumar
Date: Wed Mar 15 2017 - 00:26:55 EST


Hi Javi,

Sorry for picking up an old thread, but i had a question for you.

On Mon, Mar 2, 2015 at 10:47 PM, Javi Merino <javi.merino@xxxxxxx> wrote:
> diff --git a/drivers/thermal/cpu_cooling.c b/drivers/thermal/cpu_cooling.c

> @@ -588,12 +590,20 @@ static int cpufreq_get_requested_power(struct thermal_cooling_device *cdev,
> u32 *power)
> {
> unsigned long freq;
> - int cpu, ret;
> + int i = 0, cpu, ret;
> u32 static_power, dynamic_power, total_load = 0;
> struct cpufreq_cooling_device *cpufreq_device = cdev->devdata;
> + u32 *load_cpu = NULL;
>
> freq = cpufreq_quick_get(cpumask_any(&cpufreq_device->allowed_cpus));
>
> + if (trace_thermal_power_cpu_get_power_enabled()) {

You allocated load_cpu if cpu_get_power trace is enabled.

> + u32 ncpus = cpumask_weight(&cpufreq_device->allowed_cpus);
> +
> + load_cpu = devm_kcalloc(&cdev->device, ncpus, sizeof(*load_cpu),
> + GFP_KERNEL);
> + }
> +
> for_each_cpu(cpu, &cpufreq_device->allowed_cpus) {
> u32 load;
>
> @@ -603,14 +613,29 @@ static int cpufreq_get_requested_power(struct thermal_cooling_device *cdev,
> load = 0;
>
> total_load += load;
> + if (trace_thermal_power_cpu_limit_enabled() && load_cpu)

But you store values to it only if cpu_limit trace is also enabled,
otherwise it is all zeros.

Why?