diff options
author | Pavel Dovgalyuk <Pavel.Dovgaluk@ispras.ru> | 2018-09-12 11:19:39 +0300 |
---|---|---|
committer | Paolo Bonzini <pbonzini@redhat.com> | 2018-10-02 19:08:58 +0200 |
commit | bb3d7702e8dd0fd84c9496e226b46ce964b76e13 (patch) | |
tree | 3b688f6c0728834008a2fa4596ab638940a53214 /replay/replay-snapshot.c | |
parent | f9f1f56e4da088b993ce28775c271d5bcdcf49ae (diff) | |
download | qemu-bb3d7702e8dd0fd84c9496e226b46ce964b76e13.zip qemu-bb3d7702e8dd0fd84c9496e226b46ce964b76e13.tar.gz qemu-bb3d7702e8dd0fd84c9496e226b46ce964b76e13.tar.bz2 |
replay: allow loading any snapshots before recording
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>
Message-Id: <20180912081939.3228.56131.stgit@pasha-VirtualBox>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Diffstat (limited to 'replay/replay-snapshot.c')
-rw-r--r-- | replay/replay-snapshot.c | 17 |
1 files changed, 12 insertions, 5 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; } |