From: Pavel Dovgalyuk <pavel.dovgaluk@ispras.ru>
To: qemu-devel@nongnu.org
Cc: peter.maydell@linaro.org, mst@redhat.com, jasowang@redhat.com,
quintela@redhat.com, agraf@suse.de, pbonzini@redhat.com,
david@gibson.dropbear.id.au
Subject: [Qemu-devel] [PATCH v2 06/10] replay: vmstate for replay module
Date: Thu, 15 Sep 2016 12:01:16 +0300 [thread overview]
Message-ID: <20160915090116.6440.46288.stgit@PASHA-ISP> (raw)
In-Reply-To: <20160915090042.6440.22516.stgit@PASHA-ISP>
This patch introduces vmstate for replay data structures.
It allows saving and loading vmstate while replaying.
Signed-off-by: Pavel Dovgalyuk <pavel.dovgaluk@ispras.ru>
---
include/sysemu/replay.h | 4 ++++
replay/replay-internal.h | 2 ++
replay/replay-snapshot.c | 40 ++++++++++++++++++++++++++++++++++++++++
vl.c | 1 +
4 files changed, 47 insertions(+)
diff --git a/include/sysemu/replay.h b/include/sysemu/replay.h
index aa378ce..1123fc2 100644
--- a/include/sysemu/replay.h
+++ b/include/sysemu/replay.h
@@ -147,6 +147,10 @@ void replay_net_packet_event(ReplayNetState *rns, unsigned flags,
/* VM state operations */
+/* Registers replay VMState.
+ Should be called before virtual devices initialization
+ to make cached timers available for post_load functions. */
+void replay_vmstate_register(void);
/*! Called at the start of execution.
Loads or saves initial vmstate depending on execution mode. */
void replay_vmstate_init(void);
diff --git a/replay/replay-internal.h b/replay/replay-internal.h
index 3147d66..9bc4a29 100644
--- a/replay/replay-internal.h
+++ b/replay/replay-internal.h
@@ -67,6 +67,8 @@ typedef struct ReplayState {
unsigned int data_kind;
/*! Flag which indicates that event is not processed yet. */
unsigned int has_unread_data;
+ /*! Temporary variable for saving current log offset. */
+ uint64_t file_offset;
} ReplayState;
extern ReplayState replay_state;
diff --git a/replay/replay-snapshot.c b/replay/replay-snapshot.c
index a48c6fc..4933bdd 100644
--- a/replay/replay-snapshot.c
+++ b/replay/replay-snapshot.c
@@ -17,6 +17,46 @@
#include "sysemu/sysemu.h"
#include "monitor/monitor.h"
#include "qapi/qmp/qstring.h"
+#include "migration/vmstate.h"
+
+static void replay_pre_save(void *opaque)
+{
+ ReplayState *state = opaque;
+ state->file_offset = ftello64(replay_file);
+}
+
+static int replay_post_load(void *opaque, int version_id)
+{
+ ReplayState *state = opaque;
+ fseeko64(replay_file, state->file_offset, SEEK_SET);
+ /* If this was a vmstate, saved in recording mode,
+ we need to initialize replay data fields. */
+ replay_fetch_data_kind();
+
+ return 0;
+}
+
+static const VMStateDescription vmstate_replay = {
+ .name = "replay",
+ .version_id = 1,
+ .minimum_version_id = 1,
+ .pre_save = replay_pre_save,
+ .post_load = replay_post_load,
+ .fields = (VMStateField[]) {
+ VMSTATE_INT64_ARRAY(cached_clock, ReplayState, REPLAY_CLOCK_COUNT),
+ VMSTATE_UINT64(current_step, ReplayState),
+ VMSTATE_INT32(instructions_count, ReplayState),
+ VMSTATE_UINT32(data_kind, ReplayState),
+ VMSTATE_UINT32(has_unread_data, ReplayState),
+ VMSTATE_UINT64(file_offset, ReplayState),
+ VMSTATE_END_OF_LIST()
+ },
+};
+
+void replay_vmstate_register(void)
+{
+ vmstate_register(NULL, 0, &vmstate_replay, &replay_state);
+}
void replay_vmstate_init(void)
{
diff --git a/vl.c b/vl.c
index 6698d88..f2193cb 100644
--- a/vl.c
+++ b/vl.c
@@ -4361,6 +4361,7 @@ int main(int argc, char **argv, char **envp)
configure_icount(icount_opts, &error_abort);
qemu_opts_del(icount_opts);
}
+ replay_vmstate_register();
if (default_net) {
QemuOptsList *net = qemu_find_opts("net");
next prev parent reply other threads:[~2016-09-15 9:01 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-09-15 9:00 [Qemu-devel] [PATCH v2 00/10] replay additions Pavel Dovgalyuk
2016-09-15 9:00 ` [Qemu-devel] [PATCH v2 01/10] record/replay: add network support Pavel Dovgalyuk
2016-09-15 9:00 ` [Qemu-devel] [PATCH v2 02/10] block: set snapshot option for block devices in blkreplay module Pavel Dovgalyuk
2016-09-15 9:25 ` Paolo Bonzini
2016-09-15 9:36 ` Paolo Bonzini
2016-09-16 7:55 ` Pavel Dovgalyuk
2016-09-16 9:28 ` Paolo Bonzini
2016-09-16 9:36 ` Pavel Dovgalyuk
2016-09-16 9:49 ` Paolo Bonzini
2016-09-15 9:01 ` [Qemu-devel] [PATCH v2 03/10] block: don't make snapshots for filters Pavel Dovgalyuk
2016-09-15 9:01 ` [Qemu-devel] [PATCH v2 04/10] replay: save/load initial state Pavel Dovgalyuk
2016-09-15 9:25 ` Paolo Bonzini
2016-09-16 7:56 ` Pavel Dovgalyuk
2016-09-16 9:29 ` Paolo Bonzini
2016-09-15 9:01 ` [Qemu-devel] [PATCH v2 05/10] replay: move internal data to the structure Pavel Dovgalyuk
2016-09-15 9:34 ` Paolo Bonzini
2016-09-15 9:01 ` Pavel Dovgalyuk [this message]
2016-09-15 9:37 ` [Qemu-devel] [PATCH v2 06/10] replay: vmstate for replay module Paolo Bonzini
2016-09-16 7:36 ` Pavel Dovgalyuk
2016-09-15 9:01 ` [Qemu-devel] [PATCH v2 07/10] replay: allow replay stopping and restarting Pavel Dovgalyuk
2016-09-15 9:38 ` Paolo Bonzini
2016-09-16 6:35 ` Pavel Dovgalyuk
2016-09-16 8:55 ` Paolo Bonzini
2016-09-15 9:01 ` [Qemu-devel] [PATCH v2 08/10] kvmvapic: fix state change handler Pavel Dovgalyuk
2016-09-15 9:01 ` [Qemu-devel] [PATCH v2 09/10] pcspk: adding vmstate for save/restore Pavel Dovgalyuk
2016-09-15 9:01 ` [Qemu-devel] [PATCH v2 10/10] integratorcp: " Pavel Dovgalyuk
2016-09-15 9:12 ` [Qemu-devel] [PATCH v2 00/10] replay additions Paolo Bonzini
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=20160915090116.6440.46288.stgit@PASHA-ISP \
--to=pavel.dovgaluk@ispras.ru \
--cc=agraf@suse.de \
--cc=david@gibson.dropbear.id.au \
--cc=jasowang@redhat.com \
--cc=mst@redhat.com \
--cc=pbonzini@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-devel@nongnu.org \
--cc=quintela@redhat.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 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.