$ git diff google_qemu_stream isec_nathan_timer_tweak diff --git a/qemu_timers.c b/qemu_timers.c index 2dc0806..d521315 100644 --- a/qemu_timers.c +++ b/qemu_timers.c @@ -29,6 +29,13 @@ QEMUClock *vm_clock; /***********************************************************/ /* real time host monotonic timer */ +/* Hacked by nathan@isecpartners.com to prevent busy spin during clone + * on a slow linux vm guest: + */ +#define ORIGINAL_QEMU_UNIX_USEC 999 +#define TWEAKED_QEMU_UNIX_USEC 9999 +#define QEMU_UNIX_USEC TWEAKED_QEMU_UNIX_USEC + /* digit: the following two variables are used to implement high-resolution * poll-based interrupts. the idea is to be able to generate an emulated * interrupt every millisecond, even on non-Linux platforms which don't have @@ -917,9 +924,9 @@ static int unix_start_timer(struct qemu_alarm_timer *t) itv.it_interval.tv_sec = 0; /* for i386 kernel 2.6 to get 1 ms */ - itv.it_interval.tv_usec = 999; + itv.it_interval.tv_usec = QEMU_UNIX_USEC; itv.it_value.tv_sec = 0; - itv.it_value.tv_usec = 10 * 1000; + itv.it_value.tv_usec = 10 * (QEMU_TIMER_REALTIME + 1); err = setitimer(ITIMER_REAL, &itv, NULL); if (err)