[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH v3] use INT64_MAX as max expiration
Change from v2: Correct the logic when calculating icount. Change from v1: According to Jan and Stefano's comments, drop the previous logic which setting the value in an arbitrary way and use Stefano's suggestion instead. Currently, the max expiration time is 2147483647ns(INT32_MAX ns). This is enough when guest is busy, but when guest is idle, the next timer will be later than INT32_MAX ns. And those meaningless alarm will harm the pkg C-state. PS: Since the overflow will not happen with the expression((delta / 1000) + (delta % 1000 > 0 ? 1 : 0)), so i also removed the comments" To avoid problems with overflow limit this to 2^32." Signed-off-by: Yang Zhang <yang.z.zhang@xxxxxxxxx> --- vl.c | 15 ++++++++------- 1 files changed, 8 insertions(+), 7 deletions(-) diff --git a/vl.c b/vl.c index be8587a..d30cb2c 100644 --- a/vl.c +++ b/vl.c @@ -1410,8 +1410,7 @@ static int64_t qemu_next_deadline(void) delta = active_timers[QEMU_TIMER_VIRTUAL]->expire_time - qemu_get_clock(vm_clock); } else { - /* To avoid problems with overflow limit this to 2^32. */ - delta = INT32_MAX; + delta = INT64_MAX; } if (delta < 0) @@ -1427,9 +1426,11 @@ static uint64_t qemu_next_deadline_dyntick(void) int64_t rtdelta; if (use_icount) - delta = INT32_MAX; - else - delta = (qemu_next_deadline() + 999) / 1000; + delta = INT64_MAX; + else { + delta = qemu_next_deadline(); + delta = (delta / 1000) + (delta % 1000 > 0 ? 1 : 0); + } if (active_timers[QEMU_TIMER_REALTIME]) { rtdelta = (active_timers[QEMU_TIMER_REALTIME]->expire_time - @@ -3872,8 +3873,8 @@ int main_loop(void) env->icount_decr.u16.low = 0; env->icount_extra = 0; count = qemu_next_deadline(); - count = (count + (1 << icount_time_shift) - 1) - >> icount_time_shift; + count = (count >> icount_time_shift) + + ((count & ((1 << icount_time_shift) - 1)) > 0 ? 1 : 0); qemu_icount += count; decr = (count > 0xffff) ? 0xffff : count; count -= decr; -- 1.7.1 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |