qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] latest rc: virtio-blk hangs forever after migration


From: Marcin Gibuła
Subject: Re: [Qemu-devel] latest rc: virtio-blk hangs forever after migration
Date: Wed, 16 Jul 2014 09:35:16 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.6.0

Andrey,

Can you please provide instructions on how to create reproducible
environment?

The following patch is equivalent to the original patch, for
the purposes of fixing the kvmclock problem.

Perhaps it becomes easier to spot the reason for the hang you are
experiencing.

Marcelo,

the original reason for patch adding cpu_synchronize_all_states() there was because this bug affected non-migration operations as well - http://lists.gnu.org/archive/html/qemu-devel/2014-06/msg00472.html.

Won't moving it only to migration code break these things again?


diff --git a/hw/i386/kvm/clock.c b/hw/i386/kvm/clock.c
index 272a88a..feb5fc5 100644
--- a/hw/i386/kvm/clock.c
+++ b/hw/i386/kvm/clock.c
@@ -17,7 +17,6 @@
  #include "qemu/host-utils.h"
  #include "sysemu/sysemu.h"
  #include "sysemu/kvm.h"
-#include "sysemu/cpus.h"
  #include "hw/sysbus.h"
  #include "hw/kvm/clock.h"

@@ -66,7 +65,6 @@ static uint64_t kvmclock_current_nsec(KVMClockState *s)

      cpu_physical_memory_read(kvmclock_struct_pa, &time, sizeof(time));

-    assert(time.tsc_timestamp <= migration_tsc);
      delta = migration_tsc - time.tsc_timestamp;
      if (time.tsc_shift < 0) {
          delta >>= -time.tsc_shift;
@@ -125,8 +123,6 @@ static void kvmclock_vm_state_change(void *opaque, int 
running,
          if (s->clock_valid) {
              return;
          }
-
-        cpu_synchronize_all_states();
          ret = kvm_vm_ioctl(kvm_state, KVM_GET_CLOCK, &data);
          if (ret < 0) {
              fprintf(stderr, "KVM_GET_CLOCK failed: %s\n", strerror(ret));
diff --git a/migration.c b/migration.c
index 8d675b3..34f2325 100644
--- a/migration.c
+++ b/migration.c
@@ -608,6 +608,7 @@ static void *migration_thread(void *opaque)
                  qemu_system_wakeup_request(QEMU_WAKEUP_REASON_OTHER);
                  old_vm_running = runstate_is_running();

+                cpu_synchronize_all_states();
                  ret = vm_stop_force_state(RUN_STATE_FINISH_MIGRATE);
                  if (ret >= 0) {
                      qemu_file_set_rate_limit(s->file, INT64_MAX);



--
mg



reply via email to

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