* [PATCH 1/2] drivers: clk: st: warn on iomap failure @ 2018-07-15 10:18 Nicholas Mc Guire 2018-07-15 10:18 ` [PATCH 2/2] drivers: clk: st: address sparse warnings Nicholas Mc Guire 2018-07-25 20:41 ` [PATCH 1/2] drivers: clk: st: warn on iomap failure Stephen Boyd 0 siblings, 2 replies; 6+ messages in thread From: Nicholas Mc Guire @ 2018-07-15 10:18 UTC (permalink / raw) To: Michael Turquette Cc: Stephen Boyd, Kees Cook, linux-clk, linux-kernel, Nicholas Mc Guire While the return value of clkgen_get_register_base() is being checked at the call site, there is no indication of failure cause thus making diagnosis of the issues hard. The WARN_ON() allows to determine the cause of failure. Signed-off-by: Nicholas Mc Guire <hofrat@osadl.org> --- Problem found by an experimental coccinelle script Patch was compile tested with: multi_v7_defconfig (implies CONFIG_ARCH_STI=y) Patch is against 4.18-rc4 (localversion-next is next-20180713) drivers/clk/st/clkgen-pll.c | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/clk/st/clkgen-pll.c b/drivers/clk/st/clkgen-pll.c index cbb5184..aeb30ab 100644 --- a/drivers/clk/st/clkgen-pll.c +++ b/drivers/clk/st/clkgen-pll.c @@ -647,6 +647,7 @@ static void __iomem * __init clkgen_get_register_base( return NULL; reg = of_iomap(pnode, 0); + WARN_ON(!reg); of_node_put(pnode); return reg; -- 2.1.4 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH 2/2] drivers: clk: st: address sparse warnings 2018-07-15 10:18 [PATCH 1/2] drivers: clk: st: warn on iomap failure Nicholas Mc Guire @ 2018-07-15 10:18 ` Nicholas Mc Guire 2018-07-25 20:40 ` Stephen Boyd 2018-07-25 20:41 ` [PATCH 1/2] drivers: clk: st: warn on iomap failure Stephen Boyd 1 sibling, 1 reply; 6+ messages in thread From: Nicholas Mc Guire @ 2018-07-15 10:18 UTC (permalink / raw) To: Michael Turquette Cc: Stephen Boyd, Kees Cook, linux-clk, linux-kernel, Nicholas Mc Guire Refactoring of code to make it more readable and at the same time make sparse happy again. Signed-off-by: Nicholas Mc Guire <hofrat@osadl.org> --- sparse complained about: drivers/clk/st/clkgen-pll.c:225:12: warning: context imbalance in 'clkgen_pll_enable' - different lock contexts for basic block drivers/clk/st/clkgen-pll.c:267:9: warning: context imbalance in 'clkgen_pll_disable' - different lock contexts for basic block drivers/clk/st/clkgen-pll.c:413:9: warning: context imbalance in 'set_rate_stm_pll3200c32' - different lock contexts for basic block drivers/clk/st/clkgen-pll.c:570:9: warning: context imbalance in 'set_rate_stm_pll4600c28' - different lock contexts for basic block Which are technically false positives as the pll->lock which is being checked is determined at configuration time, thus the locks are balanced. Never the less the refactored code seems more readable and was commented to make it clear. Patch was compile tested with: multi_v7_defconfig (implies CONFIG_ARCH_STI=y) Patch is against 4.18-rc4 (localversion-next is next-20180713) drivers/clk/st/clkgen-pll.c | 51 +++++++++++++++++++++++++-------------------- 1 file changed, 28 insertions(+), 23 deletions(-) diff --git a/drivers/clk/st/clkgen-pll.c b/drivers/clk/st/clkgen-pll.c index 7a7106dc..cbb5184 100644 --- a/drivers/clk/st/clkgen-pll.c +++ b/drivers/clk/st/clkgen-pll.c @@ -228,13 +228,13 @@ static int clkgen_pll_enable(struct clk_hw *hw) unsigned long flags = 0; int ret = 0; - if (pll->lock) + if (pll->lock) { + /* stih418 and stih407 */ spin_lock_irqsave(pll->lock, flags); - - ret = __clkgen_pll_enable(hw); - - if (pll->lock) + ret = __clkgen_pll_enable(hw); spin_unlock_irqrestore(pll->lock, flags); + } else + ret = __clkgen_pll_enable(hw); return ret; } @@ -259,13 +259,13 @@ static void clkgen_pll_disable(struct clk_hw *hw) struct clkgen_pll *pll = to_clkgen_pll(hw); unsigned long flags = 0; - if (pll->lock) + if (pll->lock) { + /* stih418 and stih407 */ spin_lock_irqsave(pll->lock, flags); - - __clkgen_pll_disable(hw); - - if (pll->lock) + __clkgen_pll_disable(hw); spin_unlock_irqrestore(pll->lock, flags); + } else + __clkgen_pll_disable(hw); } static int clk_pll3200c32_get_params(unsigned long input, unsigned long output, @@ -400,15 +400,18 @@ static int set_rate_stm_pll3200c32(struct clk_hw *hw, unsigned long rate, __clkgen_pll_disable(hw); - if (pll->lock) + if (pll->lock) { + /* stih407 and stih418 */ spin_lock_irqsave(pll->lock, flags); - - CLKGEN_WRITE(pll, ndiv, pll->ndiv); - CLKGEN_WRITE(pll, idf, pll->idf); - CLKGEN_WRITE(pll, cp, pll->cp); - - if (pll->lock) + CLKGEN_WRITE(pll, ndiv, pll->ndiv); + CLKGEN_WRITE(pll, idf, pll->idf); + CLKGEN_WRITE(pll, cp, pll->cp); spin_unlock_irqrestore(pll->lock, flags); + } else { + CLKGEN_WRITE(pll, ndiv, pll->ndiv); + CLKGEN_WRITE(pll, idf, pll->idf); + CLKGEN_WRITE(pll, cp, pll->cp); + } __clkgen_pll_enable(hw); @@ -558,14 +561,16 @@ static int set_rate_stm_pll4600c28(struct clk_hw *hw, unsigned long rate, __clkgen_pll_disable(hw); - if (pll->lock) + if (pll->lock) { + /* stih407 and stih418 */ spin_lock_irqsave(pll->lock, flags); - - CLKGEN_WRITE(pll, ndiv, pll->ndiv); - CLKGEN_WRITE(pll, idf, pll->idf); - - if (pll->lock) + CLKGEN_WRITE(pll, ndiv, pll->ndiv); + CLKGEN_WRITE(pll, idf, pll->idf); spin_unlock_irqrestore(pll->lock, flags); + } else { + CLKGEN_WRITE(pll, ndiv, pll->ndiv); + CLKGEN_WRITE(pll, idf, pll->idf); + } __clkgen_pll_enable(hw); -- 2.1.4 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH 2/2] drivers: clk: st: address sparse warnings 2018-07-15 10:18 ` [PATCH 2/2] drivers: clk: st: address sparse warnings Nicholas Mc Guire @ 2018-07-25 20:40 ` Stephen Boyd 2018-07-26 5:50 ` Nicholas Mc Guire 0 siblings, 1 reply; 6+ messages in thread From: Stephen Boyd @ 2018-07-25 20:40 UTC (permalink / raw) To: Michael Turquette, Nicholas Mc Guire Cc: Kees Cook, linux-clk, linux-kernel, Nicholas Mc Guire Quoting Nicholas Mc Guire (2018-07-15 03:18:24) > Refactoring of code to make it more readable and at the same time make > sparse happy again. > > Signed-off-by: Nicholas Mc Guire <hofrat@osadl.org> > --- > > sparse complained about: > drivers/clk/st/clkgen-pll.c:225:12: warning: context imbalance in 'clkgen_pll_enable' - different lock contexts for basic block > drivers/clk/st/clkgen-pll.c:267:9: warning: context imbalance in 'clkgen_pll_disable' - different lock contexts for basic block > drivers/clk/st/clkgen-pll.c:413:9: warning: context imbalance in 'set_rate_stm_pll3200c32' - different lock contexts for basic block > drivers/clk/st/clkgen-pll.c:570:9: warning: context imbalance in 'set_rate_stm_pll4600c28' - different lock contexts for basic block > > Which are technically false positives as the pll->lock which is being > checked is determined at configuration time, thus the locks are balanced. > Never the less the refactored code seems more readable and was > commented to make it clear. This stuff above should go into the commit text. > > Patch was compile tested with: multi_v7_defconfig (implies > CONFIG_ARCH_STI=y) > > Patch is against 4.18-rc4 (localversion-next is next-20180713) > > drivers/clk/st/clkgen-pll.c | 51 +++++++++++++++++++++++++-------------------- > 1 file changed, 28 insertions(+), 23 deletions(-) I believe this driver is in stasis mode. Not sure anyone is testing this right now. Please Cc people who have worked on this driver, like Gabriel Fernandez. > > diff --git a/drivers/clk/st/clkgen-pll.c b/drivers/clk/st/clkgen-pll.c > index 7a7106dc..cbb5184 100644 > --- a/drivers/clk/st/clkgen-pll.c > +++ b/drivers/clk/st/clkgen-pll.c > @@ -228,13 +228,13 @@ static int clkgen_pll_enable(struct clk_hw *hw) > unsigned long flags = 0; > int ret = 0; > > - if (pll->lock) > + if (pll->lock) { > + /* stih418 and stih407 */ > spin_lock_irqsave(pll->lock, flags); > - > - ret = __clkgen_pll_enable(hw); > - > - if (pll->lock) > + ret = __clkgen_pll_enable(hw); > spin_unlock_irqrestore(pll->lock, flags); > + } else > + ret = __clkgen_pll_enable(hw); > > return ret; > } > @@ -259,13 +259,13 @@ static void clkgen_pll_disable(struct clk_hw *hw) > struct clkgen_pll *pll = to_clkgen_pll(hw); > unsigned long flags = 0; > > - if (pll->lock) > + if (pll->lock) { > + /* stih418 and stih407 */ > spin_lock_irqsave(pll->lock, flags); > - > - __clkgen_pll_disable(hw); > - > - if (pll->lock) > + __clkgen_pll_disable(hw); > spin_unlock_irqrestore(pll->lock, flags); > + } else > + __clkgen_pll_disable(hw); > } > > static int clk_pll3200c32_get_params(unsigned long input, unsigned long output, > @@ -400,15 +400,18 @@ static int set_rate_stm_pll3200c32(struct clk_hw *hw, unsigned long rate, > > __clkgen_pll_disable(hw); > > - if (pll->lock) > + if (pll->lock) { > + /* stih407 and stih418 */ > spin_lock_irqsave(pll->lock, flags); > - > - CLKGEN_WRITE(pll, ndiv, pll->ndiv); > - CLKGEN_WRITE(pll, idf, pll->idf); > - CLKGEN_WRITE(pll, cp, pll->cp); > - > - if (pll->lock) > + CLKGEN_WRITE(pll, ndiv, pll->ndiv); > + CLKGEN_WRITE(pll, idf, pll->idf); > + CLKGEN_WRITE(pll, cp, pll->cp); > spin_unlock_irqrestore(pll->lock, flags); > + } else { > + CLKGEN_WRITE(pll, ndiv, pll->ndiv); > + CLKGEN_WRITE(pll, idf, pll->idf); > + CLKGEN_WRITE(pll, cp, pll->cp); > + } Please don't duplicate this code. The sparse warnings can be fixed by adding a fake lock acquire to the else of the if condition. We do this in drivers/clk/clk.c so you should be able to copy it from there. > ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH 2/2] drivers: clk: st: address sparse warnings 2018-07-25 20:40 ` Stephen Boyd @ 2018-07-26 5:50 ` Nicholas Mc Guire 0 siblings, 0 replies; 6+ messages in thread From: Nicholas Mc Guire @ 2018-07-26 5:50 UTC (permalink / raw) To: Stephen Boyd Cc: Michael Turquette, Nicholas Mc Guire, Kees Cook, linux-clk, linux-kernel On Wed, Jul 25, 2018 at 01:40:53PM -0700, Stephen Boyd wrote: > Quoting Nicholas Mc Guire (2018-07-15 03:18:24) > > Refactoring of code to make it more readable and at the same time make > > sparse happy again. > > > > Signed-off-by: Nicholas Mc Guire <hofrat@osadl.org> > > --- > > > > sparse complained about: > > drivers/clk/st/clkgen-pll.c:225:12: warning: context imbalance in 'clkgen_pll_enable' - different lock contexts for basic block > > drivers/clk/st/clkgen-pll.c:267:9: warning: context imbalance in 'clkgen_pll_disable' - different lock contexts for basic block > > drivers/clk/st/clkgen-pll.c:413:9: warning: context imbalance in 'set_rate_stm_pll3200c32' - different lock contexts for basic block > > drivers/clk/st/clkgen-pll.c:570:9: warning: context imbalance in 'set_rate_stm_pll4600c28' - different lock contexts for basic block > > > > Which are technically false positives as the pll->lock which is being > > checked is determined at configuration time, thus the locks are balanced. > > Never the less the refactored code seems more readable and was > > commented to make it clear. > > This stuff above should go into the commit text. ok - then I´ll resend that with that moved into the commit message. > > > > > Patch was compile tested with: multi_v7_defconfig (implies > > CONFIG_ARCH_STI=y) > > > > Patch is against 4.18-rc4 (localversion-next is next-20180713) > > > > drivers/clk/st/clkgen-pll.c | 51 +++++++++++++++++++++++++-------------------- > > 1 file changed, 28 insertions(+), 23 deletions(-) > > I believe this driver is in stasis mode. Not sure anyone is testing this > right now. Please Cc people who have worked on this driver, like Gabriel > Fernandez. > > > > > diff --git a/drivers/clk/st/clkgen-pll.c b/drivers/clk/st/clkgen-pll.c > > index 7a7106dc..cbb5184 100644 > > --- a/drivers/clk/st/clkgen-pll.c > > +++ b/drivers/clk/st/clkgen-pll.c > > @@ -228,13 +228,13 @@ static int clkgen_pll_enable(struct clk_hw *hw) > > unsigned long flags = 0; > > int ret = 0; > > > > - if (pll->lock) > > + if (pll->lock) { > > + /* stih418 and stih407 */ > > spin_lock_irqsave(pll->lock, flags); > > - > > - ret = __clkgen_pll_enable(hw); > > - > > - if (pll->lock) > > + ret = __clkgen_pll_enable(hw); > > spin_unlock_irqrestore(pll->lock, flags); > > + } else > > + ret = __clkgen_pll_enable(hw); > > > > return ret; > > } > > @@ -259,13 +259,13 @@ static void clkgen_pll_disable(struct clk_hw *hw) > > struct clkgen_pll *pll = to_clkgen_pll(hw); > > unsigned long flags = 0; > > > > - if (pll->lock) > > + if (pll->lock) { > > + /* stih418 and stih407 */ > > spin_lock_irqsave(pll->lock, flags); > > - > > - __clkgen_pll_disable(hw); > > - > > - if (pll->lock) > > + __clkgen_pll_disable(hw); > > spin_unlock_irqrestore(pll->lock, flags); > > + } else > > + __clkgen_pll_disable(hw); > > } > > > > static int clk_pll3200c32_get_params(unsigned long input, unsigned long output, > > @@ -400,15 +400,18 @@ static int set_rate_stm_pll3200c32(struct clk_hw *hw, unsigned long rate, > > > > __clkgen_pll_disable(hw); > > > > - if (pll->lock) > > + if (pll->lock) { > > + /* stih407 and stih418 */ > > spin_lock_irqsave(pll->lock, flags); > > - > > - CLKGEN_WRITE(pll, ndiv, pll->ndiv); > > - CLKGEN_WRITE(pll, idf, pll->idf); > > - CLKGEN_WRITE(pll, cp, pll->cp); > > - > > - if (pll->lock) > > + CLKGEN_WRITE(pll, ndiv, pll->ndiv); > > + CLKGEN_WRITE(pll, idf, pll->idf); > > + CLKGEN_WRITE(pll, cp, pll->cp); > > spin_unlock_irqrestore(pll->lock, flags); > > + } else { > > + CLKGEN_WRITE(pll, ndiv, pll->ndiv); > > + CLKGEN_WRITE(pll, idf, pll->idf); > > + CLKGEN_WRITE(pll, cp, pll->cp); > > + } > > Please don't duplicate this code. The sparse warnings can be fixed by > adding a fake lock acquire to the else of the if condition. We do this > in drivers/clk/clk.c so you should be able to copy it from there. the duplication is not a mater of the sparse warning only - the inetnt was to improve readability - atleast for the one-line cases it seems more readable to have it this way than to have the two lock checks - notably as you can then comment what the difference here really is. I agree that for this case with the three lines in the body it is not that reasonable - this was simply a matter of consistency as the other lock checks were moved into a if-else construct for readability and commenting. thx! hofrat ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH 1/2] drivers: clk: st: warn on iomap failure 2018-07-15 10:18 [PATCH 1/2] drivers: clk: st: warn on iomap failure Nicholas Mc Guire 2018-07-15 10:18 ` [PATCH 2/2] drivers: clk: st: address sparse warnings Nicholas Mc Guire @ 2018-07-25 20:41 ` Stephen Boyd 2018-07-26 5:43 ` Nicholas Mc Guire 1 sibling, 1 reply; 6+ messages in thread From: Stephen Boyd @ 2018-07-25 20:41 UTC (permalink / raw) To: Michael Turquette, Nicholas Mc Guire Cc: Kees Cook, linux-clk, linux-kernel, Nicholas Mc Guire Quoting Nicholas Mc Guire (2018-07-15 03:18:23) > While the return value of clkgen_get_register_base() is being checked > at the call site, there is no indication of failure cause thus making > diagnosis of the issues hard. The WARN_ON() allows to determine the > cause of failure. > > Signed-off-by: Nicholas Mc Guire <hofrat@osadl.org> > --- > > Problem found by an experimental coccinelle script > > Patch was compile tested with: multi_v7_defconfig (implies > CONFIG_ARCH_STI=y) > > Patch is against 4.18-rc4 (localversion-next is next-20180713) > > drivers/clk/st/clkgen-pll.c | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/drivers/clk/st/clkgen-pll.c b/drivers/clk/st/clkgen-pll.c > index cbb5184..aeb30ab 100644 > --- a/drivers/clk/st/clkgen-pll.c > +++ b/drivers/clk/st/clkgen-pll.c > @@ -647,6 +647,7 @@ static void __iomem * __init clkgen_get_register_base( > return NULL; > > reg = of_iomap(pnode, 0); > + WARN_ON(!reg); > > of_node_put(pnode); > return reg; Shouldn't the caller blow up on NULL pointer access? This patch doesn't seem useful, sorry. ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH 1/2] drivers: clk: st: warn on iomap failure 2018-07-25 20:41 ` [PATCH 1/2] drivers: clk: st: warn on iomap failure Stephen Boyd @ 2018-07-26 5:43 ` Nicholas Mc Guire 0 siblings, 0 replies; 6+ messages in thread From: Nicholas Mc Guire @ 2018-07-26 5:43 UTC (permalink / raw) To: Stephen Boyd Cc: Michael Turquette, Nicholas Mc Guire, Kees Cook, linux-clk, linux-kernel On Wed, Jul 25, 2018 at 01:41:38PM -0700, Stephen Boyd wrote: > Quoting Nicholas Mc Guire (2018-07-15 03:18:23) > > While the return value of clkgen_get_register_base() is being checked > > at the call site, there is no indication of failure cause thus making > > diagnosis of the issues hard. The WARN_ON() allows to determine the > > cause of failure. > > > > Signed-off-by: Nicholas Mc Guire <hofrat@osadl.org> > > --- > > > > Problem found by an experimental coccinelle script > > > > Patch was compile tested with: multi_v7_defconfig (implies > > CONFIG_ARCH_STI=y) > > > > Patch is against 4.18-rc4 (localversion-next is next-20180713) > > > > drivers/clk/st/clkgen-pll.c | 1 + > > 1 file changed, 1 insertion(+) > > > > diff --git a/drivers/clk/st/clkgen-pll.c b/drivers/clk/st/clkgen-pll.c > > index cbb5184..aeb30ab 100644 > > --- a/drivers/clk/st/clkgen-pll.c > > +++ b/drivers/clk/st/clkgen-pll.c > > @@ -647,6 +647,7 @@ static void __iomem * __init clkgen_get_register_base( > > return NULL; > > > > reg = of_iomap(pnode, 0); > > + WARN_ON(!reg); > > > > of_node_put(pnode); > > return reg; > > Shouldn't the caller blow up on NULL pointer access? This patch doesn't > seem useful, sorry. > if you look at the call chain then there is a check for !NULL along the way - but never any information - no pr_*/printk or the like so ultimately you would get a failure but not know where that failure came from - the intent of the WARN_ON() is to allow you to locate the trigger event. Blowing up with a BUG_ON() is not necessary as the call chain does check for !NULL along the way. thx! hofrat ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2018-07-26 5:52 UTC | newest] Thread overview: 6+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2018-07-15 10:18 [PATCH 1/2] drivers: clk: st: warn on iomap failure Nicholas Mc Guire 2018-07-15 10:18 ` [PATCH 2/2] drivers: clk: st: address sparse warnings Nicholas Mc Guire 2018-07-25 20:40 ` Stephen Boyd 2018-07-26 5:50 ` Nicholas Mc Guire 2018-07-25 20:41 ` [PATCH 1/2] drivers: clk: st: warn on iomap failure Stephen Boyd 2018-07-26 5:43 ` Nicholas Mc Guire
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).