On 17-04-19, 10:43, Quentin Perret wrote:
>  static struct thermal_cooling_device *
>  __cpufreq_cooling_register(struct device_node *np,
> -                     struct cpufreq_policy *policy, u32 capacitance)
> +                     struct cpufreq_policy *policy,
> +                     struct em_perf_domain *em)
>  {

> +     if (em_is_sane(cpufreq_cdev, em)) {
> +             cpufreq_cdev->em = em;
>               cooling_ops = &cpufreq_power_cooling_ops;
> -     } else {
> +     } else if (policy->freq_table_sorted != CPUFREQ_TABLE_UNSORTED) {
>               cooling_ops = &cpufreq_cooling_ops;
> +     } else {
> +             WARN(1, "cpu_cooling: no valid frequency table found\n");

Well the frequency table is valid, isn't it ? Maybe something like: "cpu_cooling
doesn't support unsorted frequency tables" ?

> +             cdev = ERR_PTR(-EINVAL);
> +             goto remove_ida;
>       }
>  
>       cdev = thermal_of_cooling_device_register(np, dev_name, cpufreq_cdev,
> @@ -691,7 +619,7 @@ __cpufreq_cooling_register(struct device_node *np,
>       if (IS_ERR(cdev))
>               goto remove_ida;
>  
> -     cpufreq_cdev->clipped_freq = cpufreq_cdev->freq_table[0].frequency;
> +     cpufreq_cdev->clipped_freq = get_state_freq(cpufreq_cdev, 0);
>       cpufreq_cdev->cdev = cdev;
>  
>       mutex_lock(&cooling_list_lock);
> @@ -708,8 +636,6 @@ __cpufreq_cooling_register(struct device_node *np,
>  
>  remove_ida:
>       ida_simple_remove(&cpufreq_ida, cpufreq_cdev->id);
> -free_table:
> -     kfree(cpufreq_cdev->freq_table);
>  free_idle_time:
>       kfree(cpufreq_cdev->idle_time);
>  free_cdev:
> @@ -731,7 +657,7 @@ __cpufreq_cooling_register(struct device_node *np,
>  struct thermal_cooling_device *
>  cpufreq_cooling_register(struct cpufreq_policy *policy)
>  {
> -     return __cpufreq_cooling_register(NULL, policy, 0);
> +     return __cpufreq_cooling_register(NULL, policy, NULL);
>  }
>  EXPORT_SYMBOL_GPL(cpufreq_cooling_register);
>  
> @@ -759,7 +685,6 @@ of_cpufreq_cooling_register(struct cpufreq_policy *policy)
>  {
>       struct device_node *np = of_get_cpu_node(policy->cpu, NULL);
>       struct thermal_cooling_device *cdev = NULL;
> -     u32 capacitance = 0;
>  
>       if (!np) {
>               pr_err("cpu_cooling: OF node not available for cpu%d\n",
> @@ -768,10 +693,9 @@ of_cpufreq_cooling_register(struct cpufreq_policy 
> *policy)
>       }
>  
>       if (of_find_property(np, "#cooling-cells", NULL)) {
> -             of_property_read_u32(np, "dynamic-power-coefficient",
> -                                  &capacitance);
> +             struct em_perf_domain *em = em_cpu_get(policy->cpu);
>  
> -             cdev = __cpufreq_cooling_register(np, policy, capacitance);
> +             cdev = __cpufreq_cooling_register(np, policy, em);
>               if (IS_ERR(cdev)) {
>                       pr_err("cpu_cooling: cpu%d failed to register as 
> cooling device: %ld\n",
>                              policy->cpu, PTR_ERR(cdev));
> @@ -813,7 +737,6 @@ void cpufreq_cooling_unregister(struct 
> thermal_cooling_device *cdev)
>       thermal_cooling_device_unregister(cpufreq_cdev->cdev);
>       ida_simple_remove(&cpufreq_ida, cpufreq_cdev->id);
>       kfree(cpufreq_cdev->idle_time);
> -     kfree(cpufreq_cdev->freq_table);
>       kfree(cpufreq_cdev);
>  }
>  EXPORT_SYMBOL_GPL(cpufreq_cooling_unregister);
> -- 
> 2.21.0

-- 
viresh

Reply via email to