mirror of https://github.com/xemu-project/xemu.git
Correct alarm deadline computation
When the QEMU_CLOCK_HOST clock was added, computation of its deadline was added to qemu_next_deadline, which is correct but incomplete. I noticed this by reading the very convoluted rules whereby qemu_next_deadline_dyntick is computed, which miss QEMU_CLOCK_HOST when use_icount is true. This patch inlines qemu_next_deadline into qemu_next_deadline_dyntick, and then corrects the logic to skip only QEMU_CLOCK_VIRTUAL when use_icount is true. Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> Cc: Jan Kiszka <jan.kiszka@siemens.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
This commit is contained in:
parent
9c13246ac1
commit
6ad0a1ed21
15
qemu-timer.c
15
qemu-timer.c
|
@ -724,11 +724,18 @@ static uint64_t qemu_next_deadline_dyntick(void)
|
|||
int64_t delta;
|
||||
int64_t rtdelta;
|
||||
|
||||
if (use_icount)
|
||||
if (!use_icount && active_timers[QEMU_CLOCK_VIRTUAL]) {
|
||||
delta = active_timers[QEMU_CLOCK_VIRTUAL]->expire_time -
|
||||
qemu_get_clock(vm_clock);
|
||||
} else {
|
||||
delta = INT32_MAX;
|
||||
else
|
||||
delta = qemu_next_deadline();
|
||||
|
||||
}
|
||||
if (active_timers[QEMU_CLOCK_HOST]) {
|
||||
int64_t hdelta = active_timers[QEMU_CLOCK_HOST]->expire_time -
|
||||
qemu_get_clock_ns(host_clock);
|
||||
if (hdelta < delta)
|
||||
delta = hdelta;
|
||||
}
|
||||
if (active_timers[QEMU_CLOCK_REALTIME]) {
|
||||
rtdelta = (active_timers[QEMU_CLOCK_REALTIME]->expire_time * 1000000 -
|
||||
qemu_get_clock_ns(rt_clock));
|
||||
|
|
Loading…
Reference in New Issue