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