move vmstate registration of vmstate_timers earlier

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
This commit is contained in:
Paolo Bonzini 2010-03-10 11:38:52 +01:00 committed by Anthony Liguori
parent a2aaa079df
commit 1b48824fa0

62
vl.c
View File

@ -722,36 +722,6 @@ static void icount_adjust_vm(void * opaque)
icount_adjust(); icount_adjust();
} }
static void configure_icount(const char *option)
{
if (!option)
return;
if (strcmp(option, "auto") != 0) {
icount_time_shift = strtol(option, NULL, 0);
use_icount = 1;
return;
}
use_icount = 2;
/* 125MIPS seems a reasonable initial guess at the guest speed.
It will be corrected fairly quickly anyway. */
icount_time_shift = 3;
/* Have both realtime and virtual time triggers for speed adjustment.
The realtime trigger catches emulated time passing too slowly,
the virtual time trigger catches emulated time passing too fast.
Realtime triggers occur even when idle, so use them less frequently
than VM triggers. */
icount_rt_timer = qemu_new_timer(rt_clock, icount_adjust_rt, NULL);
qemu_mod_timer(icount_rt_timer,
qemu_get_clock(rt_clock) + 1000);
icount_vm_timer = qemu_new_timer(vm_clock, icount_adjust_vm, NULL);
qemu_mod_timer(icount_vm_timer,
qemu_get_clock(vm_clock) + get_ticks_per_sec() / 10);
}
static int64_t qemu_icount_round(int64_t count) static int64_t qemu_icount_round(int64_t count)
{ {
return (count + (1 << icount_time_shift) - 1) >> icount_time_shift; return (count + (1 << icount_time_shift) - 1) >> icount_time_shift;
@ -1056,6 +1026,37 @@ static const VMStateDescription vmstate_timers = {
} }
}; };
static void configure_icount(const char *option)
{
vmstate_register(0, &vmstate_timers, &timers_state);
if (!option)
return;
if (strcmp(option, "auto") != 0) {
icount_time_shift = strtol(option, NULL, 0);
use_icount = 1;
return;
}
use_icount = 2;
/* 125MIPS seems a reasonable initial guess at the guest speed.
It will be corrected fairly quickly anyway. */
icount_time_shift = 3;
/* Have both realtime and virtual time triggers for speed adjustment.
The realtime trigger catches emulated time passing too slowly,
the virtual time trigger catches emulated time passing too fast.
Realtime triggers occur even when idle, so use them less frequently
than VM triggers. */
icount_rt_timer = qemu_new_timer(rt_clock, icount_adjust_rt, NULL);
qemu_mod_timer(icount_rt_timer,
qemu_get_clock(rt_clock) + 1000);
icount_vm_timer = qemu_new_timer(vm_clock, icount_adjust_vm, NULL);
qemu_mod_timer(icount_vm_timer,
qemu_get_clock(vm_clock) + get_ticks_per_sec() / 10);
}
static void qemu_run_all_timers(void) static void qemu_run_all_timers(void)
{ {
/* rearm timer, if not periodic */ /* rearm timer, if not periodic */
@ -5943,7 +5944,6 @@ int main(int argc, char **argv, char **envp)
if (qemu_opts_foreach(&qemu_drive_opts, drive_init_func, machine, 1) != 0) if (qemu_opts_foreach(&qemu_drive_opts, drive_init_func, machine, 1) != 0)
exit(1); exit(1);
vmstate_register(0, &vmstate_timers ,&timers_state);
register_savevm_live("ram", 0, 3, NULL, ram_save_live, NULL, register_savevm_live("ram", 0, 3, NULL, ram_save_live, NULL,
ram_load, NULL); ram_load, NULL);