This set of patches moves replay lock upper in the function call tree. Now replay lock functions similar to BQL in older version and allows deterministic execution of the threads in icount mode. It is also fixes some vmstate creation (and loading) issues in record/replay modes: - VM start/stop fixes in replay mode - overlay creation for blkreplay filter - fixes for vmstate save/load in record/replay mode - fixes for host clock vmstate
There is also a set of helper scripts written by Alex Bennée for debugging the record/replay code. v6 changes: - removed BQL optimization at all - refined replay lock patches - removed lock/unlock from replay-audio v5 changes: - removed patch for narrowing BQL-protected code - disabled bdrv_(drain/flush)_all for record/replay mode v4 changes: - removed upstreamed patches - added patch for saving async queue state in replay - minor fixes v3 changes: - removed upstreamed patches - fixed bug with recursive checkpoints - fixed bug with icount warp checkpoint v2 changes: - updated lock/unlock logic (as suggested by Paolo Bonzini) - updated cpu execution loop to avoid races in setting/resetting exit request (as suggested by Paolo Bonzini) - minor changes --- Alex Bennée (5): replay/replay.c: bump REPLAY_VERSION again replay/replay-internal.c: track holding of replay_lock replay: make locking visible outside replay code replay: push replay_mutex_lock up the call tree scripts/replay-dump.py: replay log dumper Pavel Dovgalyuk (15): cpu-exec: fix exception_index handling block: implement bdrv_snapshot_goto for blkreplay blkreplay: create temporary overlay for underlaying devices replay: disable default snapshot for record/replay replay: fix processing async events replay: fixed replay_enable_events replay: fix save/load vm for non-empty queue replay: added replay log format description replay: save prior value of the host clock replay: don't destroy mutex at exit replay: check return values of fwrite replay: avoid recursive call of checkpoints replay: don't process async events when warping the clock replay: save vmstate of the asynchronous events replay: don't drain/flush bdrv queue while RR is working accel/tcg/cpu-exec.c | 5 + block/blkreplay.c | 73 +++++++++++ block/io.c | 22 +++ cpus.c | 26 +++- docs/replay.txt | 91 ++++++++++++++ include/qemu/timer.h | 14 ++ include/sysemu/replay.h | 19 +++ migration/savevm.c | 13 ++ replay/replay-audio.c | 14 +- replay/replay-char.c | 21 +-- replay/replay-events.c | 75 +++++------ replay/replay-internal.c | 47 ++++++- replay/replay-internal.h | 15 ++ replay/replay-snapshot.c | 12 ++ replay/replay-time.c | 10 + replay/replay.c | 62 ++++++--- scripts/replay-dump.py | 308 ++++++++++++++++++++++++++++++++++++++++++++++ stubs/replay.c | 16 ++ util/main-loop.c | 15 ++ util/qemu-timer.c | 12 ++ vl.c | 12 +- 21 files changed, 769 insertions(+), 113 deletions(-) create mode 100755 scripts/replay-dump.py -- Pavel Dovgalyuk