On 5 March 2013 18:52, Russell King - ARM Linux <linux@xxxxxxxxxxxxxxxx> wrote: > On Tue, Mar 05, 2013 at 12:52:41PM +0800, Viresh Kumar wrote: >> +static void put_cluster_clk_and_freq_table(u32 cluster) >> +{ >> + if (!atomic_dec_return(&cluster_usage[cluster])) { >> + clk_put(clk[cluster]); >> + clk[cluster] = NULL; > > What's the point in setting the clk to NULL? I couldn't find one and the same is true for freq_table[] too. >> +static int get_cluster_clk_and_freq_table(u32 cluster) >> +{ >> + char name[9] = "cluster"; >> + int count; >> + >> + if (atomic_inc_return(&cluster_usage[cluster]) != 1) >> + return 0; >> + >> + freq_table[cluster] = arm_bL_ops->get_freq_tbl(cluster, &count); >> + if (!freq_table[cluster]) >> + goto atomic_dec; >> + >> + name[7] = cluster + '0'; >> + clk[cluster] = clk_get(NULL, name); >> + if (!IS_ERR_OR_NULL(clk[cluster])) { > > NAK. Two reasons. > > 1. IS_ERR_OR_NULL. You know about this, it's been on the list several > times. AAHHHHHH .. How can i mess up with this concept.. I am really feeling bad now. > 2. Maybe clk_get_sys() rather than clk_get() and use a sensible device > name ("cpu-cluster.%u" maybe) rather than a connection name with a > NULL device? That's a good comment (rather than pointing at some stupid mistake), I will probably keep the same name for the device as well. So how does below fix look to you? ----------x-----------------x----------------- diff --git a/drivers/cpufreq/arm_big_little.c b/drivers/cpufreq/arm_big_little.c index 0d6de0e..2486b9a 100644 --- a/drivers/cpufreq/arm_big_little.c +++ b/drivers/cpufreq/arm_big_little.c @@ -140,9 +140,7 @@ static void put_cluster_clk_and_freq_table(u32 cluster) { if (!atomic_dec_return(&cluster_usage[cluster])) { clk_put(clk[cluster]); - clk[cluster] = NULL; arm_bL_ops->put_freq_tbl(cluster); - freq_table[cluster] = NULL; pr_debug("%s: cluster: %d\n", __func__, cluster); } } @@ -160,8 +158,8 @@ static int get_cluster_clk_and_freq_table(u32 cluster) goto atomic_dec; name[7] = cluster + '0'; - clk[cluster] = clk_get(NULL, name); - if (!IS_ERR_OR_NULL(clk[cluster])) { + clk[cluster] = clk_get_sys(name, NULL); + if (!IS_ERR(clk[cluster])) { pr_debug("%s: clk: %p & freq table: %p, cluster: %d\n", __func__, clk[cluster], freq_table[cluster], cluster); -- To unsubscribe from this list: send the line "unsubscribe cpufreq" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html