aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGonglei <arei.gonglei@huawei.com>2016-08-09 15:49:15 +0800
committerMichael Roth <mdroth@linux.vnet.ibm.com>2016-08-15 08:57:36 -0500
commit5125bef25abcaa124db6a579c97bc584f4fa1e92 (patch)
tree691042565858af2192dd0f0c863f15e3cb13c0ae
parentbeeff749f64690c259bd5932a1ec20f473cbedd1 (diff)
timer: set vm_clock disabled default
(commit 80dcfb8532ae76343109a48f12ba8ca1c505c179) Upon migration, the code use a timer based on vm_clock for 1ns in the future from post_load to do the event send in case host_connected differs between migration source and target. However, it's not guaranteed that the apic is ready to inject irqs into the guest, and the irq line remained high, resulting in any future interrupts going unnoticed by the guest as well. That's because 1) the migration coroutine is not blocked when it get EAGAIN while reading QEMUFile. 2) The vm_clock is enabled default currently, it doesn't rely on the calling of vm_start(), that means vm_clock timers can run before VCPUs are running. So, let's set the vm_clock disabled default, keep the initial intention of design for vm_clock timers. Meanwhile, change the test-aio usecase, using QEMU_CLOCK_REALTIME instead of QEMU_CLOCK_VIRTUAL as the block code does. CC: Paolo Bonzini <pbonzini@redhat.com> CC: Dr. David Alan Gilbert <dgilbert@redhat.com> CC: qemu-stable@nongnu.org Signed-off-by: Gonglei <arei.gonglei@huawei.com> Message-Id: <1470728955-90600-1-git-send-email-arei.gonglei@huawei.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> (cherry picked from commit 3fdd0ee393e26178a4892e101e60b011bbfaa9ea) Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
-rw-r--r--qemu-timer.c2
-rw-r--r--tests/test-aio.c4
2 files changed, 3 insertions, 3 deletions
diff --git a/qemu-timer.c b/qemu-timer.c
index 4441fe66ff..a8636cb3b8 100644
--- a/qemu-timer.c
+++ b/qemu-timer.c
@@ -129,7 +129,7 @@ static void qemu_clock_init(QEMUClockType type)
assert(main_loop_tlg.tl[type] == NULL);
clock->type = type;
- clock->enabled = true;
+ clock->enabled = (type == QEMU_CLOCK_VIRTUAL ? false : true);
clock->last = INT64_MIN;
QLIST_INIT(&clock->timerlists);
notifier_list_init(&clock->reset_notifiers);
diff --git a/tests/test-aio.c b/tests/test-aio.c
index 687dfa062e..39b8ce89d4 100644
--- a/tests/test-aio.c
+++ b/tests/test-aio.c
@@ -453,7 +453,7 @@ static void test_timer_schedule(void)
{
TimerTestData data = { .n = 0, .ctx = ctx, .ns = SCALE_MS * 750LL,
.max = 2,
- .clock_type = QEMU_CLOCK_VIRTUAL };
+ .clock_type = QEMU_CLOCK_REALTIME };
EventNotifier e;
/* aio_poll will not block to wait for timers to complete unless it has
@@ -783,7 +783,7 @@ static void test_source_timer_schedule(void)
{
TimerTestData data = { .n = 0, .ctx = ctx, .ns = SCALE_MS * 750LL,
.max = 2,
- .clock_type = QEMU_CLOCK_VIRTUAL };
+ .clock_type = QEMU_CLOCK_REALTIME };
EventNotifier e;
int64_t expiry;