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 <nm@xxxxxx> > --- ... > 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 majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html