Linux clock framework development
 help / color / mirror / Atom feed
From: Vladimir Zapolskiy <vz@mleia.com>
To: Masahiro Yamada <yamada.masahiro@socionext.com>
Cc: Michael Turquette <mturquette@baylibre.com>,
	Stephen Boyd <sboyd@codeaurora.org>,
	linux-clk@vger.kernel.org
Subject: Re: [PATCH 3/3] clk: remove redundant clock parents lookup table allocations
Date: Thu, 07 Jan 2016 15:45:07 +0200	[thread overview]
Message-ID: <568E6BE3.9000909@mleia.com> (raw)
In-Reply-To: <CAK7LNATiHJa8XwigMj6dWFauUC9TV-_Ypw-i_agn5hCD_6Yb4g@mail.gmail.com>

Hi Masahiro,

On 07.01.2016 13:33, Masahiro Yamada wrote:
> Hi Vladimir,
> 
> 2016-01-07 19:44 GMT+09:00 Vladimir Zapolskiy <vz@mleia.com>:
>> Hi Masahiro,
>>
>> On 07.01.2016 11:00, Masahiro Yamada wrote:
>>> Hi Vladimir,
>>>
>>>
>>> 2016-01-07 12:16 GMT+09:00 Vladimir Zapolskiy <vz@mleia.com>:
>>>> Since clock parents lookup table for clocks with multiple parent
>>>> clocks is always allocated during clock registration, remove similar
>>>> allocations from __clk_init_parent() and clk_fetch_parent_index().
>>>>
>>>> The change also corrects a pointer type of a single lookup table
>>>> entry on calculation of the lookup table size.
>>>>
>>>> Signed-off-by: Vladimir Zapolskiy <vz@mleia.com>
>>>> ---
>>>>  drivers/clk/clk.c | 20 +++-----------------
>>>>  1 file changed, 3 insertions(+), 17 deletions(-)
>>>>
>>>> diff --git a/drivers/clk/clk.c b/drivers/clk/clk.c
>>>> index 2fb0dae..f8872f9 100644
>>>> --- a/drivers/clk/clk.c
>>>> +++ b/drivers/clk/clk.c
>>>> @@ -1067,13 +1067,6 @@ static int clk_fetch_parent_index(struct clk_core *core,
>>>>  {
>>>>         int i;
>>>>
>>>> -       if (!core->parents) {
>>>> -               core->parents = kcalloc(core->num_parents,
>>>> -                                       sizeof(struct clk *), GFP_KERNEL);
>>>> -               if (!core->parents)
>>>> -                       return -ENOMEM;
>>>> -       }
>>>> -
>>>>         /*
>>>>          * find index of new parent clock using cached parent ptrs,
>>>>          * or if not yet cached, use string name comparison and cache
>>>> @@ -1711,18 +1704,11 @@ static struct clk_core *__clk_init_parent(struct clk_core *core)
>>>>         }
>>>>
>>>>         /*
>>>> -        * Do our best to cache parent clocks in core->parents.  This prevents
>>>> -        * unnecessary and expensive lookups.  We don't set core->parent here;
>>>> -        * that is done by the calling function.
>>>> +        * We don't set core->parent here; that is done by the calling function.
>>>>          */
>>>>
>>>>         index = core->ops->get_parent(core->hw);
>>>>
>>>> -       if (!core->parents)
>>>> -               core->parents =
>>>> -                       kcalloc(core->num_parents, sizeof(struct clk *),
>>>> -                                       GFP_KERNEL);
>>>> -
>>>>         ret = clk_core_get_parent_by_index(core, index);
>>>>
>>>>  out:
>>>> @@ -2374,8 +2360,8 @@ static int __clk_init(struct device *dev, struct clk *clk_user)
>>>>          * look-ups of clk's possible parents.
>>>>          */
>>>>         if (core->num_parents > 1) {
>>>> -               core->parents = kcalloc(core->num_parents, sizeof(struct clk *),
>>>> -                                       GFP_KERNEL);
>>>> +               core->parents = kcalloc(core->num_parents,
>>>> +                                       sizeof(struct clk_core *), GFP_KERNEL);
>>>>                 if (!core->parents) {
>>>>                         ret = -ENOMEM;
>>>>                         goto out;
>>>
>>>
>>> You are doing the similar thing as mine.
>>>
>>> See
>>> https://patchwork.kernel.org/patch/7925571/
>>
>> Ok, I was not aware of your work, unfortunately.
>>
>>>
>>> This series gives a big conflict with my clean-up series,
>>> which Michael said he would apply after v4.5-rc1.
>>>
>>> See
>>> http://www.serverphorums.com/read.php?12,1376630
>>>
>>>
>>
>> No problem, of course your work goes first.
>>
>> Obviously I have to review your changes more carefully, but do you
>> have something similar to my 1/3? If no, then it is a regression.
> 
> 
> No.
> 
> I solved the problem in a different way.
> https://patchwork.kernel.org/patch/7925571/
> 
> In my way, core->parents is always allocated.

what's about the case of root clocks, when (core->num_parents == 0) ?

Yours unconditional

@@ -2560,12 +2537,20 @@  struct clk *clk_register(struct device *dev, struct clk_hw *hw)
 		}
 	}
 
+	/* avoid unnecessary string look-ups of clk_core's possible parents. */
+	core->parents = kcalloc(core->num_parents, sizeof(*core->parents),
+				GFP_KERNEL);
+	if (!core->parents) {
+		ret = -ENOMEM;
+		goto fail_parents;
+	};
+

looks suspicious, but I have to test and review the background changes as well,
most probably I'm missing something.

> 1/3 is not needed.

Actually 1/3 solves a bit different kind of problem, but again I have to
review/test your series.

Shortly you may test it beforehand by a fuzz testing -- see the details
in 1/3 commit message, you may insert a known in advance wrong

  ret = clk_set_parent(clk, parent);

and get the result.

> If I am wrong, please point out.
> 
> 

I'll test and review your series today later on or tomorrow more carefully.

--
With best wishes,
Vladimir

  reply	other threads:[~2016-01-07 13:45 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-01-07  3:16 [PATCH 0/3] clk: remove dead code allocations of parent lookup tables Vladimir Zapolskiy
2016-01-07  3:16 ` [PATCH 1/3] clk: don't fetch parent index for non multi-parent clocks Vladimir Zapolskiy
2016-01-07  3:16 ` [PATCH 2/3] clk: simplify array allocation of clock parents for lookup Vladimir Zapolskiy
2016-01-07  3:16 ` [PATCH 3/3] clk: remove redundant clock parents lookup table allocations Vladimir Zapolskiy
2016-01-07  9:00   ` Masahiro Yamada
2016-01-07 10:44     ` Vladimir Zapolskiy
2016-01-07 11:33       ` Masahiro Yamada
2016-01-07 13:45         ` Vladimir Zapolskiy [this message]
2016-01-08  0:33 ` [PATCH 0/3] clk: remove dead code allocations of parent lookup tables Vladimir Zapolskiy

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=568E6BE3.9000909@mleia.com \
    --to=vz@mleia.com \
    --cc=linux-clk@vger.kernel.org \
    --cc=mturquette@baylibre.com \
    --cc=sboyd@codeaurora.org \
    --cc=yamada.masahiro@socionext.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox