mirror of
https://gitlab.com/qemu-project/qemu
synced 2024-11-05 20:35:44 +00:00
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>
This commit is contained in:
parent
f9f1f56e4d
commit
bb3d7702e8
2 changed files with 16 additions and 8 deletions
|
@ -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;
|
||||
}
|
||||
|
|
7
vl.c
7
vl.c
|
@ -4535,9 +4535,7 @@ 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);
|
||||
|
@ -4545,6 +4543,9 @@ int main(int argc, char **argv, char **envp)
|
|||
exit(1);
|
||||
}
|
||||
}
|
||||
if (replay_mode != REPLAY_MODE_NONE) {
|
||||
replay_vmstate_init();
|
||||
}
|
||||
|
||||
qdev_prop_check_globals();
|
||||
if (vmstate_dump_file) {
|
||||
|
|
Loading…
Reference in a new issue