Daniel, On Tue, 26 Mar 2019, Daniel Lezcano wrote: > >> +/* > >> + * Exponential moving average computation > >> + */ > >> +static int irq_timings_ema_new(s64 value, s64 ema_old) > > > > There is a mixed bag of s64/u64 all over this code. Please stay > > consistent. We had enough sign confusion bugs in the past. > > Right. > > I have a question, ema_old and value will be always u64 type and the > function irq_timings_ema_new() will return an u64 ... > > > value = (value - ema_old) * EMA_ALPHA_VAL; > > return ema_old + value >> EMA_ALPHA_SHIFT; > > ... how can I deal with the operations above when value < ema_old ? > > Shall I use an intermediate s64 ? > > eg: > > s64 aux = (value - ema_old) * EMA_ALPHA_VAL; > return ema_old + aux >> EMA_ALPHA_SHIFT; > ?
That should work if ema_old is not ever having the topmost bit set :) Thanks, tglx