Commit e160cc17 authored by Alex Shi's avatar Alex Shi Committed by Olof Johansson

vexpress/spc: fix a build warning on array bounds

With ARCH_VEXPRESS_SPC option, kernel build has the following
warning:

arch/arm/mach-vexpress/spc.c: In function ‘ve_spc_clk_init’:
arch/arm/mach-vexpress/spc.c:431:38: warning: array subscript is below array bounds [-Warray-bounds]
  struct ve_spc_opp *opps = info->opps[cluster];
                                      ^
since 'cluster' maybe '-1' in UP system. This patch does a active
checking to fix this issue.
Signed-off-by: default avatarAlex Shi <alex.shi@linaro.org>
Acked-by: default avatarPawel Moll <pawel.moll@arm.com>
Acked-by: default avatarSudeep Holla <sudeep.holla@arm.com>
Signed-off-by: default avatarOlof Johansson <olof@lixom.net>
parent 98fd1508
...@@ -426,9 +426,15 @@ static int ve_spc_populate_opps(uint32_t cluster) ...@@ -426,9 +426,15 @@ static int ve_spc_populate_opps(uint32_t cluster)
static int ve_init_opp_table(struct device *cpu_dev) static int ve_init_opp_table(struct device *cpu_dev)
{ {
int cluster = topology_physical_package_id(cpu_dev->id); int cluster;
int idx, ret = 0, max_opp = info->num_opps[cluster]; int idx, ret = 0, max_opp;
struct ve_spc_opp *opps = info->opps[cluster]; struct ve_spc_opp *opps;
cluster = topology_physical_package_id(cpu_dev->id);
cluster = cluster < 0 ? 0 : cluster;
max_opp = info->num_opps[cluster];
opps = info->opps[cluster];
for (idx = 0; idx < max_opp; idx++, opps++) { for (idx = 0; idx < max_opp; idx++, opps++) {
ret = dev_pm_opp_add(cpu_dev, opps->freq * 1000, opps->u_volt); ret = dev_pm_opp_add(cpu_dev, opps->freq * 1000, opps->u_volt);
...@@ -537,6 +543,8 @@ static struct clk *ve_spc_clk_register(struct device *cpu_dev) ...@@ -537,6 +543,8 @@ static struct clk *ve_spc_clk_register(struct device *cpu_dev)
spc->hw.init = &init; spc->hw.init = &init;
spc->cluster = topology_physical_package_id(cpu_dev->id); spc->cluster = topology_physical_package_id(cpu_dev->id);
spc->cluster = spc->cluster < 0 ? 0 : spc->cluster;
init.name = dev_name(cpu_dev); init.name = dev_name(cpu_dev);
init.ops = &clk_spc_ops; init.ops = &clk_spc_ops;
init.flags = CLK_IS_ROOT | CLK_GET_RATE_NOCACHE; init.flags = CLK_IS_ROOT | CLK_GET_RATE_NOCACHE;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment