linux-omap.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* Re: clk: ti: Add support for dm814x ADPLL
       [not found] <20160302111130.GA10965@mwanda>
@ 2016-03-02 17:05 ` Tony Lindgren
  2016-03-02 18:09   ` Dan Carpenter
  0 siblings, 1 reply; 3+ messages in thread
From: Tony Lindgren @ 2016-03-02 17:05 UTC (permalink / raw)
  To: Dan Carpenter; +Cc: linux-clk, linux-omap, Stephen Boyd

Hi

* Dan Carpenter <dan.carpenter@oracle.com> [160302 03:12]:
> Hello Tony Lindgren,
> 
> The patch e6ab1637c643: "clk: ti: Add support for dm814x ADPLL" from
> Feb 26, 2016, leads to the following static checker warnings:
> 
> 	drivers/clk/ti/adpll.c:465 ti_adpll_recalc_rate()
> 	warn: should '__readw(d->regs + 20) << 18' be a 64 bit type?
> 
> 	drivers/clk/ti/adpll.c:945 ti_adpll_probe()
> 	error: we previously assumed 'd->clocks' could be null (see line 921)

Stephen already patched most of this with "clk: ti: Fix some errors
found by static checkers", some mysteries remain below though.

> This should probably be:
> 		rate = (u64)readw_relaxed(d->regs + ADPLL_MN2DIV_OFFSET) << 18;

Already fixed by Stephen.

>    773  static void ti_adpll_free_resources(struct ti_adpll_data *d)
>    774  {
>    775          int i;
>    776  
>    777          for (i = TI_ADPLL_M3; i >= 0; i--) {
>    778                  struct ti_adpll_clock *ac = &d->clocks[i];
>    779  
>    780                  if (!ac || IS_ERR_OR_NULL(ac->clk))
> 
> ac can't possibly be NULL here.

Yeah looks like we can remove ac check here.

>    910          err = ti_adpll_init_registers(d);
>    911          if (err)
>    912                  return err;
>    913  
>    914          err = ti_adpll_init_inputs(d);
>    915          if (err)
>    916                  return err;
>                         ^^^^^^^^^^
> This is the last direct return in the function, meaning that
> ti_adpll_init_inputs() must allocate something but I can't see what.
> It should match clkdev_drop() and ac->unregister()?  I don't understand.

Hmm I don't get this one. How did you get a warning here, is this a
warning from sparse also?

>    917  
>    918          d->clocks = devm_kzalloc(d->dev, sizeof(struct ti_adpll_clock) *
>    919                                   TI_ADPLL_NR_CLOCKS,
>    920                                   GFP_KERNEL);
>    921          if (!d->clocks)
>    922                  goto free;
> 
> We don't set the error code here.

Fixed by Stephen.

>    924          err = ti_adpll_init_dco(d);
>    925          if (err) {
>    926                  dev_err(dev, "could not register dco: %i\n", err);
>    927                  goto free;
>    928          }
>    929  
>    930          err = ti_adpll_init_children_adpll_s(d);
>    931          if (err)
>    932                  goto free;
>    933          err = ti_adpll_init_children_adpll_lj(d);
>    934          if (err)
>    935                  goto free;
>    936  
>    937          err = of_clk_add_provider(d->np, of_clk_src_onecell_get, &d->outputs);
>    938          if (err)
>    939                  goto free;
>    940  
>    941          return 0;
>    942  
>    943  free:
>    944          WARN_ON(1);
>    945          ti_adpll_free_resources(d);
> 
> This is a classic one err bug, where we have a single exit point but
> it's too complicated and subtle to handle all errors so we mess up.  The
> label doesn't indicate what we are freeing.

Well there's really not much to free with devm.. We could rename
the label to unregister to avoid confusion?

> Ideally, the allocate and the free functions mirror each other but I
> don't see a ti_adpll_(alloc|register|whatever)_resources().  Possibly
> this is a mirror of ti_adpll_init_dco() so it could be called
> ti_adpll_free_dco()?  I'm not sure.

Or it could be just be renamed to ti_adpll_unregister() as
we're not freeing any memory there.

Regards,

Tony

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: clk: ti: Add support for dm814x ADPLL
  2016-03-02 17:05 ` clk: ti: Add support for dm814x ADPLL Tony Lindgren
@ 2016-03-02 18:09   ` Dan Carpenter
  2016-03-02 18:19     ` Tony Lindgren
  0 siblings, 1 reply; 3+ messages in thread
From: Dan Carpenter @ 2016-03-02 18:09 UTC (permalink / raw)
  To: Tony Lindgren; +Cc: linux-clk, linux-omap, Stephen Boyd

On Wed, Mar 02, 2016 at 09:05:03AM -0800, Tony Lindgren wrote:
> >    910          err = ti_adpll_init_registers(d);
> >    911          if (err)
> >    912                  return err;
> >    913  
> >    914          err = ti_adpll_init_inputs(d);
> >    915          if (err)
> >    916                  return err;
> >                         ^^^^^^^^^^
> > This is the last direct return in the function, meaning that
> > ti_adpll_init_inputs() must allocate something but I can't see what.
> > It should match clkdev_drop() and ac->unregister()?  I don't understand.
> 
> Hmm I don't get this one. How did you get a warning here, is this a
> warning from sparse also?

There isn't a warning here.  I'm just saying that when I'm reading this
code I assume that ti_adpll_free_resources() is supposed to undo
ti_adpll_init_inputs().

I looked at Steven's patch and now I see what's going on here.  The
error handling is fine when that's applied.  Thanks.

regards,
dan carpenter


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: clk: ti: Add support for dm814x ADPLL
  2016-03-02 18:09   ` Dan Carpenter
@ 2016-03-02 18:19     ` Tony Lindgren
  0 siblings, 0 replies; 3+ messages in thread
From: Tony Lindgren @ 2016-03-02 18:19 UTC (permalink / raw)
  To: Dan Carpenter; +Cc: linux-clk, linux-omap, Stephen Boyd

* Dan Carpenter <dan.carpenter@oracle.com> [160302 10:09]:
> On Wed, Mar 02, 2016 at 09:05:03AM -0800, Tony Lindgren wrote:
> > >    910          err = ti_adpll_init_registers(d);
> > >    911          if (err)
> > >    912                  return err;
> > >    913  
> > >    914          err = ti_adpll_init_inputs(d);
> > >    915          if (err)
> > >    916                  return err;
> > >                         ^^^^^^^^^^
> > > This is the last direct return in the function, meaning that
> > > ti_adpll_init_inputs() must allocate something but I can't see what.
> > > It should match clkdev_drop() and ac->unregister()?  I don't understand.
> > 
> > Hmm I don't get this one. How did you get a warning here, is this a
> > warning from sparse also?
> 
> There isn't a warning here.  I'm just saying that when I'm reading this
> code I assume that ti_adpll_free_resources() is supposed to undo
> ti_adpll_init_inputs().
>
> I looked at Steven's patch and now I see what's going on here.  The
> error handling is fine when that's applied.  Thanks.

OK thanks for checking.

Regards,

Tony

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2016-03-02 18:19 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
     [not found] <20160302111130.GA10965@mwanda>
2016-03-02 17:05 ` clk: ti: Add support for dm814x ADPLL Tony Lindgren
2016-03-02 18:09   ` Dan Carpenter
2016-03-02 18:19     ` Tony Lindgren

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).