Messages in this thread | | | Date | Fri, 22 May 2009 16:27:40 +0200 (CEST) | From | Thomas Gleixner <> | Subject | Re: [PATCH resend4 2/3] itimers: fix periodic tics precision |
| |
On Fri, 22 May 2009, Stanislaw Gruszka wrote: > > +#define CPUTIME_SUB_NS(ct, real_ns) ({ \ > + struct timespec ts; \ > + s64 cpu_ns; \ > + cputime_to_timespec(ct, &ts); \ > + cpu_ns = timespec_to_ns(&ts); \ > + cpu_ns - real_ns; \ > +}) > +
Please make this an inline function. Also this should have a sanity check for values < 0, which might happen due to rounding errors. In that case you set it simply to 0.
> if (cputime_ge(cur_time, it->expires)) { > - it->expires = it->incr; > - if (!cputime_eq(it->expires, cputime_zero)) > - it->expires = cputime_add(it->expires, cur_time); > + if (!cputime_eq(it->incr, cputime_zero)) { > + it->expires = cputime_add(it->expires, it->incr); > + it->error += it->incr_error; > + if (it->error >= onecputick) { > + it->expires = cputime_sub(it->expires, > + jiffies_to_cputime(1)); > + it->error -= onecputick; > + }
Yep, that's a sane solution except for jiffies_to_cputime(), which can be precomputed as well.
Thanks,
tglx
| |