On Thursday, September 06, 2018, Guenter Roeck wrote:
> > +static void rza_wdt_calc_timeout(struct rza_wdt *priv, int timeout)
> > +{
> > +   int rate = clk_get_rate(priv->clk);
> 
> clk_get_rate() returns unsigned long.

OK, I'll change it.

> > +   u16 counter;
> > +
> > +   if (priv->cks == CKS_4BIT) {
> > +           counter = DIV_ROUND_UP((timeout * rate),  4194304) + 1;
> 
> two spaces ?

Oh, did see that.

> Also, I am not sure how this prevents overflows. Was't the concern
> that timeout * rate might overflow an int ?

Actually, since 32 second is the max timeout for this WDT, I think at 
first I'll check to see if "timeout" is greater than 32. If it is, there 
is no reason to do any math. Then I won't have to worry about any 
overflows from math.

        if (timeout > 32) 
                counter = 256;
        else
                counter = DIV_ROUND_UP((timeout * rate), 4194304) + 1;


> Also, why still "+ 1" ? Wasn't DIV_ROUND_UP() supposed to take care
> of that ?

Ooops, I forgot to remove the "+ 1"

> > +           if (counter > 255)
> > +                   counter = 0;
> 
> This is difficult to understand.

As you suggested, I'll change this to:
        if (counter > 256)
                counter = 256;

Chris

Reply via email to