[PATCH v2] clk: __clk_set_parent: set uninitialized variable
Turquette, Mike
mturquette at ti.com
Mon Jul 2 19:29:10 EDT 2012
On Mon, Jul 2, 2012 at 1:42 AM, Rajendra Nayak <rnayak at ti.com> wrote:
> On Monday 02 July 2012 01:11 PM, Marc Kleine-Budde wrote:
>>
>> This patch fixes the following warning:
>>
>> drivers/clk/clk.c: In function '__clk_set_parent':
>> drivers/clk/clk.c:1083:5: warning: 'i' may be used uninitialized in
>> this function [-Wuninitialized]
>>
>> which has been introduced with commit:
>>
>> commit 7975059db572eb47f0fb272a62afeae272a4b209
>> Author: Rajendra Nayak<rnayak at ti.com>
>> Date: Wed Jun 6 14:41:31 2012 +0530
>>
>> clk: Allow late cache allocation for clk->parents
>>
>> This patch applies to linux-3.5-rc5
>>
>> Cc: Rajendra Nayak<rnayak at ti.com>
>> Signed-off-by: Marc Kleine-Budde<mkl at pengutronix.de>
>> ---
>> Hello,
>>
>> here an updated version. Changes since v1:
>> - Set i to clk->num_parents as Uwe pointed out.
>
>
> I started looking at how to avoid this initing
> of i to clk->parents (which is correct for the logic
> used below, but somehow seems error prone if someone
> happens to change the logic without noticing the init
> part)
> This is what I came up with, not tested at all, but
> worth considering if Mike dislikes the idea of initing
> i to clk->parents.
>
Hi Rajendra and Marc,
I prefer the code flow in Rajendra's change. It seems more readable
and has a negative diffstat ;-)
$ git diff --stat
drivers/clk/clk.c | 28 +++++++++++++---------------
1 file changed, 13 insertions(+), 15 deletions(-)
Rajendra, can you test and send a proper patch for the same? Thanks
Marc for sending your two previous patches. I don't think that I will
Cc this one to stable since it falls under the category of
"theoretical but not yet observed" bugs.
Thanks again,
Mike
> diff --git a/drivers/clk/clk.c b/drivers/clk/clk.c
> index dcbe056..af737cc 100644
> --- a/drivers/clk/clk.c
> +++ b/drivers/clk/clk.c
> @@ -1067,26 +1067,23 @@ static int __clk_set_parent(struct clk *clk, struct
> clk *parent)
>
> old_parent = clk->parent;
>
> - /* find index of new parent clock using cached parent ptrs */
> - if (clk->parents)
> - for (i = 0; i < clk->num_parents; i++)
> - if (clk->parents[i] == parent)
> - break;
> - else
> + if (!clk->parents)
>
> clk->parents = kzalloc((sizeof(struct clk*) *
> clk->num_parents), GFP_KERNEL);
> -
> /*
> - * find index of new parent clock using string name comparison
> - * also try to cache the parent to avoid future calls to
> __clk_lookup
> + * find index of new parent clock using cached parent ptrs,
> + * or if not yet cached, use string name comparison and cache
> + * them now to avoid future calls to __clk_lookup.
> */
> - if (i == clk->num_parents)
> - for (i = 0; i < clk->num_parents; i++)
> - if (!strcmp(clk->parent_names[i], parent->name)) {
> - if (clk->parents)
> - clk->parents[i] =
> __clk_lookup(parent->name);
> - break;
> - }
> + for (i = 0; i < clk->num_parents; i++) {
> + if (clk->parents && clk->parents[i] == parent)
> + break;
> + else if (!strcmp(clk->parent_names[i], parent->name)) {
> + if (clk->parents)
> + clk->parents[i] =
> __clk_lookup(parent->name);
> + break;
> + }
> + }
>
> if (i == clk->num_parents) {
> pr_debug("%s: clock %s is not a possible parent of clock
> %s\n",
>
> regards,
> Rajendra
>
>
>>
>> regards, Marc
>>
>> drivers/clk/clk.c | 6 ++++--
>> 1 file changed, 4 insertions(+), 2 deletions(-)
>>
>> diff --git a/drivers/clk/clk.c b/drivers/clk/clk.c
>> index dcbe056..9a75635 100644
>> --- a/drivers/clk/clk.c
>> +++ b/drivers/clk/clk.c
>> @@ -1068,13 +1068,15 @@ static int __clk_set_parent(struct clk *clk,
>> struct clk *parent)
>> old_parent = clk->parent;
>>
>> /* find index of new parent clock using cached parent ptrs */
>> - if (clk->parents)
>> + if (clk->parents) {
>> for (i = 0; i< clk->num_parents; i++)
>> if (clk->parents[i] == parent)
>> break;
>> - else
>> + } else {
>> + i = clk->num_parents
>> clk->parents = kzalloc((sizeof(struct clk*) *
>> clk->num_parents),
>>
>> GFP_KERNEL);
>> + }
>>
>> /*
>> * find index of new parent clock using string name comparison
>
>
>
> _______________________________________________
> linux-arm-kernel mailing list
> linux-arm-kernel at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
More information about the linux-arm-kernel
mailing list