From: emil@limesaudio.com (Emil Lundmark)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v2 1/2] clk: imx: fix integer overflow in AV PLL round rate
Date: Tue, 11 Oct 2016 11:52:23 +0200 [thread overview]
Message-ID: <20161011095223.GA8477@lime> (raw)
In-Reply-To: <20161010135454.a6t46o4ocpwjmkwi@pengutronix.de>
On Mon, Oct 10, 2016 at 03:54:54PM +0200, Uwe Kleine-K?nig wrote:
> On Mon, Oct 10, 2016 at 12:03:05PM +0200, Emil Lundmark wrote:
> > Since 'parent_rate * mfn' may overflow 32 bits, the result should be
> > stored using 64 bits.
> >
> > Fixes: ba7f4f557eb6 ("clk: imx: correct AV PLL rate formula")
> > Signed-off-by: Emil Lundmark <emil@limesaudio.com>
> > ---
> > drivers/clk/imx/clk-pllv3.c | 6 +++++-
> > 1 file changed, 5 insertions(+), 1 deletion(-)
> >
> > diff --git a/drivers/clk/imx/clk-pllv3.c b/drivers/clk/imx/clk-pllv3.c
> > index 19f9b622981a..bc7f163ea13c 100644
> > --- a/drivers/clk/imx/clk-pllv3.c
> > +++ b/drivers/clk/imx/clk-pllv3.c
> > @@ -247,7 +247,11 @@ static long clk_pllv3_av_round_rate(struct clk_hw *hw, unsigned long rate,
> > do_div(temp64, parent_rate);
> > mfn = temp64;
> >
> > - return parent_rate * div + parent_rate * mfn / mfd;
> > + temp64 = (u64)parent_rate;
> > + temp64 *= mfn;
> > + do_div(temp64, mfd);
>
> If you change parent_rate from unsigned long to u64 this simplifies to
>
> temp64 = parent_rate * mfn
> do_div(temp64, mfd);
>
Yes, I took my inspiration from clk_pllv3_av_recalc_rate().
> > +
> > + return parent_rate * div + (u32)temp64;
>
> When thinking about overflow problems: Should this fail somehow if
> temp64 != (u32)temp64?
Well, it will fail in the sence that the desired clock will not be
returned. However, since mfn / mfd < 1 it should be fine as long as
ULONG_MAX <= U32_MAX. So, maybe it would be better to cast it to unsigned
long? This would then also need to be changed in
clk_pllv3_av_recalc_rate().
--
Emil Lundmark
next prev parent reply other threads:[~2016-10-11 9:52 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-10-10 10:03 [PATCH v2 0/2] clk: imx: fix AV PLL rate setting Emil Lundmark
2016-10-10 10:03 ` [PATCH v2 1/2] clk: imx: fix integer overflow in AV PLL round rate Emil Lundmark
2016-10-10 13:54 ` Uwe Kleine-König
2016-10-11 9:52 ` Emil Lundmark [this message]
2016-10-10 14:08 ` Fabio Estevam
2016-10-11 9:58 ` Emil Lundmark
2016-10-11 10:42 ` Fabio Estevam
2016-10-10 10:03 ` [PATCH v2 2/2] clk: imx: improve precision of AV PLL to 1 Hz Emil Lundmark
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=20161011095223.GA8477@lime \
--to=emil@limesaudio.com \
--cc=linux-arm-kernel@lists.infradead.org \
/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;
as well as URLs for NNTP newsgroup(s).