All of lore.kernel.org
 help / color / mirror / Atom feed
From: Eduardo Habkost <ehabkost@redhat.com>
To: Paolo Bonzini <pbonzini@redhat.com>,
	Igor Mammedov <imammedo@redhat.com>,
	Peter Maydell <peter.maydell@linaro.org>,
	Richard Henderson <rth@twiddle.net>,
	Marcel Apfelbaum <marcel.apfelbaum@gmail.com>,
	qemu-devel@nongnu.org
Cc: Marcelo Tosatti <mtosatti@redhat.com>,
	"Maxiwell S. Garcia" <maxiwell@linux.ibm.com>
Subject: [Qemu-devel] [PULL v2 13/13] migration: Do not re-read the clock on pre_save in case of paused guest
Date: Tue,  3 Sep 2019 18:02:01 -0300	[thread overview]
Message-ID: <20190903210201.14627-14-ehabkost@redhat.com> (raw)
In-Reply-To: <20190903210201.14627-1-ehabkost@redhat.com>

From: "Maxiwell S. Garcia" <maxiwell@linux.ibm.com>

The clock move makes the guest knows about the paused time between the
'stop' and 'migrate' commands. This is an issue in an already-paused
VM because some side effects, like process stalls, could happen
after migration.

So, this patch checks the runstate of guest in the pre_save handler and
do not re-reads the clock in case of paused state (cold migration).

Signed-off-by: Maxiwell S. Garcia <maxiwell@linux.ibm.com>
Message-Id: <20190829210711.6570-1-maxiwell@linux.ibm.com>
Reviewed-by: Marcelo Tosatti <mtosatti@redhat.com>
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
---
 hw/i386/kvm/clock.c | 15 +++++++++++----
 1 file changed, 11 insertions(+), 4 deletions(-)

diff --git a/hw/i386/kvm/clock.c b/hw/i386/kvm/clock.c
index 80c133a724..2c59b6894b 100644
--- a/hw/i386/kvm/clock.c
+++ b/hw/i386/kvm/clock.c
@@ -41,6 +41,9 @@ typedef struct KVMClockState {
     uint64_t clock;
     bool clock_valid;
 
+    /* whether the 'clock' value was obtained in the 'paused' state */
+    bool runstate_paused;
+
     /* whether machine type supports reliable KVM_GET_CLOCK */
     bool mach_use_reliable_get_clock;
 
@@ -202,6 +205,8 @@ static void kvmclock_vm_state_change(void *opaque, int running,
             return;
         }
 
+        s->runstate_paused = runstate_check(RUN_STATE_PAUSED);
+
         kvm_synchronize_all_tsc();
 
         kvm_update_clock(s);
@@ -260,9 +265,9 @@ static int kvmclock_pre_load(void *opaque)
 }
 
 /*
- * When migrating, read the clock just before migration,
- * so that the guest clock counts during the events
- * between:
+ * When migrating a running guest, read the clock just
+ * before migration, so that the guest clock counts
+ * during the events between:
  *
  *  * vm_stop()
  *  *
@@ -277,7 +282,9 @@ static int kvmclock_pre_save(void *opaque)
 {
     KVMClockState *s = opaque;
 
-    kvm_update_clock(s);
+    if (!s->runstate_paused) {
+        kvm_update_clock(s);
+    }
 
     return 0;
 }
-- 
2.21.0



  parent reply	other threads:[~2019-09-03 21:38 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-09-03 21:01 [Qemu-devel] [PULL v2 00/13] Machine + x86 queue, 2019-09-03 Eduardo Habkost
2019-09-03 21:01 ` [Qemu-devel] [PULL v2 01/13] includes: remove stale [smp|max]_cpus externs Eduardo Habkost
2019-09-03 21:01 ` [Qemu-devel] [PULL v2 02/13] hw/arm: simplify arm_load_dtb Eduardo Habkost
2019-09-03 21:01 ` [Qemu-devel] [PULL v2 03/13] numa: move numa global variable nb_numa_nodes into MachineState Eduardo Habkost
2019-09-03 21:01 ` [Qemu-devel] [PULL v2 04/13] numa: move numa global variable have_numa_distance " Eduardo Habkost
2019-09-03 21:01 ` [Qemu-devel] [PULL v2 05/13] numa: move numa global variable numa_info " Eduardo Habkost
2019-09-03 21:01 ` [Qemu-devel] [PULL v2 06/13] pc: Fix error message on die-id validation Eduardo Habkost
2019-09-03 21:01 ` [Qemu-devel] [PULL v2 07/13] pc: Improve error message when die-id is omitted Eduardo Habkost
2019-09-03 21:01 ` [Qemu-devel] [PULL v2 08/13] pc: Don't make die-id mandatory unless necessary Eduardo Habkost
2019-09-03 21:01 ` [Qemu-devel] [PULL v2 09/13] qapi: report the default CPU type for each machine Eduardo Habkost
2019-09-03 21:01 ` [Qemu-devel] [PULL v2 10/13] hostmem-file: fix pmem file size check Eduardo Habkost
2019-09-03 21:01 ` [Qemu-devel] [PULL v2 11/13] i386/vmmouse: Properly reset state Eduardo Habkost
2019-09-03 21:02 ` [Qemu-devel] [PULL v2 12/13] x86: do not advertise die-id in query-hotpluggbale-cpus if '-smp dies' is not set Eduardo Habkost
2019-09-03 21:02 ` Eduardo Habkost [this message]
2019-09-04 14:38 ` [Qemu-devel] [PULL v2 00/13] Machine + x86 queue, 2019-09-03 Peter Maydell

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20190903210201.14627-14-ehabkost@redhat.com \
    --to=ehabkost@redhat.com \
    --cc=imammedo@redhat.com \
    --cc=marcel.apfelbaum@gmail.com \
    --cc=maxiwell@linux.ibm.com \
    --cc=mtosatti@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=peter.maydell@linaro.org \
    --cc=qemu-devel@nongnu.org \
    --cc=rth@twiddle.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.