qemu-stable
[Top][All Lists]
Advanced

[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



reply via email to

[Prev in Thread] Current Thread [Next in Thread]