On Wed, May 25, 2011 at 18:25, Todd Poynor <toddpoy...@google.com> wrote:
> 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.

arrgh.. yikes..

Regards,
Nishanth Menon
--
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