[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-stable] [PATCH] timer: set vm_clock disabled default
From: |
Paolo Bonzini |
Subject: |
Re: [Qemu-stable] [PATCH] timer: set vm_clock disabled default |
Date: |
Tue, 9 Aug 2016 10:14:17 +0200 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.2.0 |
On 09/08/2016 09:49, Gonglei wrote:
> (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 <address@hidden>
> CC: Dr. David Alan Gilbert <address@hidden>
> CC: address@hidden
> Signed-off-by: Gonglei <address@hidden>
> ---
> qemu-timer.c | 2 +-
> tests/test-aio.c | 4 ++--
> 2 files changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/qemu-timer.c b/qemu-timer.c
> index eb22e92..9299cdc 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 982339c..03aa846 100644
> --- a/tests/test-aio.c
> +++ b/tests/test-aio.c
> @@ -452,7 +452,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
> @@ -782,7 +782,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;
>
>
Good fix! I'll queue it for 2.7.
Paolo