[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 66/69] replay: don't process async events when warpin
From: |
Paolo Bonzini |
Subject: |
[Qemu-devel] [PULL 66/69] replay: don't process async events when warping the clock |
Date: |
Tue, 13 Mar 2018 23:47:16 +0100 |
From: Pavel Dovgalyuk <address@hidden>
Virtual clock is warped from iothread and vcpu thread. When the hardware
events associated with warp checkpoint, then interrupt delivering may be
non-deterministic if checkpoint is processed in different threads in record
and replay.
This patch disables event processing for clock warp checkpoint and leaves
all hardware events to other checkpoints (e.g., virtual clock).
Signed-off-by: Pavel Dovgalyuk <address@hidden>
Message-Id: <address@hidden>
Signed-off-by: Paolo Bonzini <address@hidden>
Signed-off-by: Pavel Dovgalyuk <address@hidden>
---
replay/replay-events.c | 1 +
replay/replay.c | 7 ++++++-
2 files changed, 7 insertions(+), 1 deletion(-)
diff --git a/replay/replay-events.c b/replay/replay-events.c
index 54dd9d2606..3d5fc8a479 100644
--- a/replay/replay-events.c
+++ b/replay/replay-events.c
@@ -205,6 +205,7 @@ static void replay_save_event(Event *event, int checkpoint)
void replay_save_events(int checkpoint)
{
g_assert(replay_mutex_locked());
+ g_assert(checkpoint != CHECKPOINT_CLOCK_WARP_START);
while (!QTAILQ_EMPTY(&events_list)) {
Event *event = QTAILQ_FIRST(&events_list);
replay_save_event(event, checkpoint);
diff --git a/replay/replay.c b/replay/replay.c
index eae8daf18a..8228261401 100644
--- a/replay/replay.c
+++ b/replay/replay.c
@@ -211,7 +211,12 @@ bool replay_checkpoint(ReplayCheckpoint checkpoint)
} else if (replay_mode == REPLAY_MODE_RECORD) {
g_assert(replay_mutex_locked());
replay_put_event(EVENT_CHECKPOINT + checkpoint);
- replay_save_events(checkpoint);
+ /* This checkpoint belongs to several threads.
+ Processing events from different threads is
+ non-deterministic */
+ if (checkpoint != CHECKPOINT_CLOCK_WARP_START) {
+ replay_save_events(checkpoint);
+ }
res = true;
}
out:
--
2.14.3
- [Qemu-devel] [PULL 55/69] replay: fix save/load vm for non-empty queue, (continued)
- [Qemu-devel] [PULL 55/69] replay: fix save/load vm for non-empty queue, Paolo Bonzini, 2018/03/13
- [Qemu-devel] [PULL 57/69] replay: save prior value of the host clock, Paolo Bonzini, 2018/03/13
- [Qemu-devel] [PULL 60/69] replay: make locking visible outside replay code, Paolo Bonzini, 2018/03/13
- [Qemu-devel] [PULL 59/69] replay/replay-internal.c: track holding of replay_lock, Paolo Bonzini, 2018/03/13
- [Qemu-devel] [PULL 58/69] replay/replay.c: bump REPLAY_VERSION again, Paolo Bonzini, 2018/03/13
- [Qemu-devel] [PULL 61/69] replay: don't destroy mutex at exit, Paolo Bonzini, 2018/03/13
- [Qemu-devel] [PULL 62/69] replay: push replay_mutex_lock up the call tree, Paolo Bonzini, 2018/03/13
- [Qemu-devel] [PULL 64/69] replay: avoid recursive call of checkpoints, Paolo Bonzini, 2018/03/13
- [Qemu-devel] [PULL 63/69] replay: check return values of fwrite, Paolo Bonzini, 2018/03/13
- [Qemu-devel] [PULL 65/69] scripts/replay-dump.py: replay log dumper, Paolo Bonzini, 2018/03/13
- [Qemu-devel] [PULL 66/69] replay: don't process async events when warping the clock,
Paolo Bonzini <=
- [Qemu-devel] [PULL 67/69] replay: save vmstate of the asynchronous events, Paolo Bonzini, 2018/03/13
- [Qemu-devel] [PULL 68/69] replay: update documentation, Paolo Bonzini, 2018/03/13
- [Qemu-devel] [PULL 69/69] tcg: fix cpu_io_recompile, Paolo Bonzini, 2018/03/13
- Re: [Qemu-devel] [PULL 00/69] Misc patches for QEMU soft freeze, no-reply, 2018/03/13
Re: [Qemu-devel] [PULL 00/69] Misc patches for QEMU soft freeze, Peter Maydell, 2018/03/16