浏览代码

sh: clkfwk: modify for_each_frequency end condition

The end condition of for_each_frequency should care about
both clk_rate_table_round and clk_rate_div_range_round,
and using "correct max size" is a natural idea in later function.
To avoid data over flow, this patch didn't modify
clk_rate_div_range_round side as .max = div_max + 1.

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Signed-off-by: Paul Mundt <lethal@linux-sh.org>
Kuninori Morimoto 14 年之前
父节点
当前提交
c2590f4a8d
共有 1 个文件被更改,包括 5 次插入2 次删除
  1. 5 2
      drivers/sh/clk.c

+ 5 - 2
drivers/sh/clk.c

@@ -82,7 +82,7 @@ struct clk_rate_round_data {
 
 #define for_each_frequency(pos, r, freq)			\
 	for (pos = r->min, freq = r->func(pos, r);		\
-	     pos < r->max; pos++, freq = r->func(pos, r))	\
+	     pos <= r->max; pos++, freq = r->func(pos, r))	\
 		if (unlikely(freq == 0))			\
 			;					\
 		else
@@ -139,12 +139,15 @@ long clk_rate_table_round(struct clk *clk,
 {
 	struct clk_rate_round_data table_round = {
 		.min	= 0,
-		.max	= clk->nr_freqs,
+		.max	= clk->nr_freqs - 1,
 		.func	= clk_rate_table_iter,
 		.arg	= freq_table,
 		.rate	= rate,
 	};
 
+	if (clk->nr_freqs < 1)
+		return 0;
+
 	return clk_rate_round_helper(&table_round);
 }