On Thursday, September 06, 2018, Guenter Roeck wrote:
> > > + u16 counter;
> > > +
> > > + if (priv->cks == CKS_4BIT) {
> > > +         counter = DIV_ROUND_UP((timeout * rate),  4194304) + 1;
> >
> > two spaces ?
> >
> > Also, I am not sure how this prevents overflows. Was't the concern
> > that timeout * rate might overflow an int ?

Actually, I don't have to care about math overflows for large timeout 
values because the driver sets a max timeout value.

        if (priv->cks == CKS_4BIT) {
                /* Assume slowest clock rate possible (CKS=0xF) */
                priv->wdev.max_timeout = (4194304 * U8_MAX) / rate;


So if a user sends a timeout greater than that, the upper layer returns 
'Invalid argument' before it ever gets to the driver.

I guess that technically means I don't really have to do the
        if (counter > 256)
                counter = 256;
either because I will never get a timeout value greater than my max.

  (but, I might keep it in there anyway)

Chris

Reply via email to