On Mon, 2011-06-13 at 19:31 -0400, Glauber Costa wrote: > +static inline int touch_steal_time(int is_idle) > +{ > + u64 steal, st = 0; > + > + if (static_branch(¶virt_steal_enabled)) { > + > + steal = paravirt_steal_clock(smp_processor_id()); > + > + steal -= this_rq()->prev_steal_time; > + this_rq()->prev_steal_time += steal; If you move this addition below this test: > + if (is_idle || (steal < TICK_NSEC)) > + return 0; that is, right here, then you don't loose tiny steal deltas and subsequent ticks accumulate their steal time until you really have a full steal tick to account. I guess you want something different for the idle case though. > + while (steal > TICK_NSEC) { /* really, if we wanted a division we'd have written one */ asm("" : "+rm" (steal)); > + steal -= TICK_NSEC; > + st++; > + } > + > + account_steal_time(st); > + return 1; > + } > + return 0; > +} -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html