qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Pavel Dovgalyuk <Pavel.Dovgaluk@ispras.ru>
To: qemu-devel@nongnu.org
Cc: kwolf@redhat.com, peter.maydell@linaro.org, war2jordan@live.com,
	crosthwaite.peter@gmail.com, boost.lists@gmail.com,
	quintela@redhat.com, ciro.santilli@gmail.com,
	jasowang@redhat.com, mst@redhat.com, zuban32s@gmail.com,
	armbru@redhat.com, maria.klimushenkova@ispras.ru,
	dovgaluk@ispras.ru, kraxel@redhat.com, pavel.dovgaluk@ispras.ru,
	thomas.dullien@googlemail.com, pbonzini@redhat.com,
	mreitz@redhat.com, alex.bennee@linaro.org, dgilbert@redhat.com,
	rth@twiddle.net
Subject: [Qemu-devel] [PATCH v4 19/19] replay: allow loading any snapshots before recording
Date: Mon, 28 May 2018 10:15:21 +0300	[thread overview]
Message-ID: <20180528071521.9424.88763.stgit@pasha-VirtualBox> (raw)
In-Reply-To: <20180528071332.9424.27343.stgit@pasha-VirtualBox>

This patch enables using -loadvm in recording mode to allow starting
the execution recording from any of the available snapshots.
It also fixes loading of the record/replay state, therefore snapshots
created in replay mode may also be used for starting the new recording.

Signed-off-by: Pavel Dovgalyuk <Pavel.Dovgaluk@ispras.ru>
---
 replay/replay-snapshot.c |   17 ++++++++++++-----
 vl.c                     |    7 ++++---
 2 files changed, 16 insertions(+), 8 deletions(-)

diff --git a/replay/replay-snapshot.c b/replay/replay-snapshot.c
index 2ab85cf..16bacc9 100644
--- a/replay/replay-snapshot.c
+++ b/replay/replay-snapshot.c
@@ -33,11 +33,18 @@ static int replay_pre_save(void *opaque)
 static int replay_post_load(void *opaque, int version_id)
 {
     ReplayState *state = opaque;
-    fseek(replay_file, state->file_offset, SEEK_SET);
-    qemu_clock_set_last(QEMU_CLOCK_HOST, state->host_clock_last);
-    /* If this was a vmstate, saved in recording mode,
-       we need to initialize replay data fields. */
-    replay_fetch_data_kind();
+    if (replay_mode == REPLAY_MODE_PLAY) {
+        fseek(replay_file, state->file_offset, SEEK_SET);
+        qemu_clock_set_last(QEMU_CLOCK_HOST, state->host_clock_last);
+        /* If this was a vmstate, saved in recording mode,
+           we need to initialize replay data fields. */
+        replay_fetch_data_kind();
+    } else if (replay_mode == REPLAY_MODE_RECORD) {
+        /* This is only useful for loading the initial state.
+           Therefore reset all the counters. */
+        state->instructions_count = 0;
+        state->block_request_id = 0;
+    }
 
     return 0;
 }
diff --git a/vl.c b/vl.c
index 2aeaefb..04ef9ce 100644
--- a/vl.c
+++ b/vl.c
@@ -4651,15 +4651,16 @@ int main(int argc, char **argv, char **envp)
     replay_checkpoint(CHECKPOINT_RESET);
     qemu_system_reset(SHUTDOWN_CAUSE_NONE);
     register_global_state();
-    if (replay_mode != REPLAY_MODE_NONE) {
-        replay_vmstate_init();
-    } else if (loadvm) {
+    if (loadvm) {
         Error *local_err = NULL;
         if (load_snapshot(loadvm, &local_err) < 0) {
             error_report_err(local_err);
             autostart = 0;
         }
     }
+    if (replay_mode != REPLAY_MODE_NONE) {
+        replay_vmstate_init();
+    }
 
     qdev_prop_check_globals();
     if (vmstate_dump_file) {

  parent reply	other threads:[~2018-05-28  7:15 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-05-28  7:13 [Qemu-devel] [PATCH v4 00/19] reverse debugging Pavel Dovgalyuk
2018-05-28  7:13 ` [Qemu-devel] [PATCH v4 01/19] block: implement bdrv_snapshot_goto for blkreplay Pavel Dovgalyuk
2018-05-28  7:13 ` [Qemu-devel] [PATCH v4 02/19] replay: disable default snapshot for record/replay Pavel Dovgalyuk
2018-05-28  7:13 ` [Qemu-devel] [PATCH v4 03/19] replay: update docs for record/replay with block devices Pavel Dovgalyuk
2018-05-28  7:13 ` [Qemu-devel] [PATCH v4 04/19] replay: don't drain/flush bdrv queue while RR is working Pavel Dovgalyuk
2018-05-28  7:14 ` [Qemu-devel] [PATCH v4 05/19] replay: finish record/replay before closing the disks Pavel Dovgalyuk
2018-05-28  7:14 ` [Qemu-devel] [PATCH v4 06/19] qcow2: introduce icount field for snapshots Pavel Dovgalyuk
2018-05-28  7:14 ` [Qemu-devel] [PATCH v4 07/19] migration: " Pavel Dovgalyuk
2018-05-28  7:14 ` [Qemu-devel] [PATCH v4 08/19] replay: introduce info hmp/qmp command Pavel Dovgalyuk
2018-05-28  7:14 ` [Qemu-devel] [PATCH v4 09/19] replay: introduce breakpoint at the specified step Pavel Dovgalyuk
2018-05-28  7:14 ` [Qemu-devel] [PATCH v4 10/19] replay: implement replay-seek command to proceed to the desired step Pavel Dovgalyuk
2018-05-28  7:14 ` [Qemu-devel] [PATCH v4 11/19] replay: flush events when exiting Pavel Dovgalyuk
2018-05-28  7:14 ` [Qemu-devel] [PATCH v4 12/19] timer: remove replay clock probe in deadline calculation Pavel Dovgalyuk
2018-05-28  7:14 ` [Qemu-devel] [PATCH v4 13/19] replay: refine replay-time module Pavel Dovgalyuk
2018-05-28  7:14 ` [Qemu-devel] [PATCH v4 14/19] translator: fix breakpoint processing Pavel Dovgalyuk
2018-05-28  7:14 ` [Qemu-devel] [PATCH v4 15/19] replay: flush rr queue before loading the vmstate Pavel Dovgalyuk
2018-05-28  7:15 ` [Qemu-devel] [PATCH v4 16/19] gdbstub: add reverse step support in replay mode Pavel Dovgalyuk
2018-05-28  7:15 ` [Qemu-devel] [PATCH v4 17/19] gdbstub: add reverse continue " Pavel Dovgalyuk
2018-05-28  7:15 ` [Qemu-devel] [PATCH v4 18/19] replay: describe reverse debugging in docs/replay.txt Pavel Dovgalyuk
2018-05-28  7:15 ` Pavel Dovgalyuk [this message]
2018-06-04  6:43 ` [Qemu-devel] [PATCH v4 00/19] reverse debugging Pavel Dovgalyuk
2018-06-04 15:26   ` Alex Bennée
2018-06-05  5:27     ` Pavel Dovgalyuk
2018-06-05  8:01       ` Alex Bennée
2018-06-05  8:47       ` Alex Bennée
2018-06-05  9:24         ` Pavel Dovgalyuk
2018-06-05 14:55           ` Alex Bennée
2018-06-06  6:55             ` Pavel Dovgalyuk
2018-06-25  6:08             ` Pavel Dovgalyuk
2018-06-27 17:50               ` Alex Bennée

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=20180528071521.9424.88763.stgit@pasha-VirtualBox \
    --to=pavel.dovgaluk@ispras.ru \
    --cc=alex.bennee@linaro.org \
    --cc=armbru@redhat.com \
    --cc=boost.lists@gmail.com \
    --cc=ciro.santilli@gmail.com \
    --cc=crosthwaite.peter@gmail.com \
    --cc=dgilbert@redhat.com \
    --cc=dovgaluk@ispras.ru \
    --cc=jasowang@redhat.com \
    --cc=kraxel@redhat.com \
    --cc=kwolf@redhat.com \
    --cc=maria.klimushenkova@ispras.ru \
    --cc=mreitz@redhat.com \
    --cc=mst@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=peter.maydell@linaro.org \
    --cc=qemu-devel@nongnu.org \
    --cc=quintela@redhat.com \
    --cc=rth@twiddle.net \
    --cc=thomas.dullien@googlemail.com \
    --cc=war2jordan@live.com \
    --cc=zuban32s@gmail.com \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).