On Wed, May 25, 2011 at 04:38:51PM -0700, Nishanth Menon wrote:
> Since we have multiple CPUs, the cpuinit call for CPU1 causes
> freq_table of CPU0 to be overwritten. Instead, we maintain
> a counter to keep track of cpus who use the cpufreq table
> allocate it once(one freq table for all CPUs) and free them
> once the last user is done with it. We also need to protect
> freq_table and this new counter from updates from multiple
> contexts to be on a safe side.
> 
> Signed-off-by: Nishanth Menon <n...@ti.com>
> ---
...
>  static int freq_table_alloc(void)
>  {
> -     if (use_opp)
> -             return opp_init_cpufreq_table(mpu_dev, &freq_table);
> +     int ret = 0;
>  
> -     clk_init_cpufreq_table(&freq_table);
> -     if (!freq_table)
> -             return -ENOMEM;
> +     mutex_lock(&freq_table_lock);
>  
> -     return 0;
> +     freq_table_users++;
> +     /* Did we allocate previously? */
> +     if (freq_table_users - 1)
> +             goto out;
> +
> +     /* no, so we allocate */
> +     if (use_opp) {
> +             ret = opp_init_cpufreq_table(mpu_dev, &freq_table);
> +     } else {
> +             clk_init_cpufreq_table(&freq_table);
> +             if (!freq_table)
> +                     ret = -ENOMEM;
> +     }
> +     /* if we did not allocate cleanly.. reduce user count */
> +     if (!ret)
> +             freq_table_users--;

"if (ret)" intended?  ret == 0 means allocated OK.


Todd
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to