[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 12/13] chardev: force write all when recording replay logs
From: |
Alex Bennée |
Subject: |
[PULL 12/13] chardev: force write all when recording replay logs |
Date: |
Mon, 8 Jan 2024 15:13:51 +0000 |
This is mostly a problem within avocado as serial generally isn't busy
enough to overfill pipes. However the consequences of recording a
failed write will haunt us on replay when the log will be out of sync
to the playback.
Fixes: https://gitlab.com/qemu-project/qemu/-/issues/2010
Acked-by: Pavel Dovgalyuk <Pavel.Dovgalyuk@ispras.ru>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20231211091346.14616-13-alex.bennee@linaro.org>
diff --git a/chardev/char.c b/chardev/char.c
index 996a024c7a2..48f28881c28 100644
--- a/chardev/char.c
+++ b/chardev/char.c
@@ -171,6 +171,18 @@ int qemu_chr_write(Chardev *s, const uint8_t *buf, int
len, bool write_all)
return res;
}
+ if (replay_mode == REPLAY_MODE_RECORD) {
+ /*
+ * When recording we don't want temporary conditions to
+ * perturb the result. By ensuring we write everything we can
+ * while recording we avoid playback being out of sync if it
+ * doesn't encounter the same temporary conditions (usually
+ * triggered by external programs not reading the chardev fast
+ * enough and pipes filling up).
+ */
+ write_all = true;
+ }
+
res = qemu_chr_write_buffer(s, buf, len, &offset, write_all);
if (qemu_chr_replay(s) && replay_mode == REPLAY_MODE_RECORD) {
--
2.39.2
- [PULL 05/13] scripts/replay_dump: track total number of instructions, (continued)
- [PULL 05/13] scripts/replay_dump: track total number of instructions, Alex Bennée, 2024/01/08
- [PULL 10/13] replay/replay-char: use report_sync_error, Alex Bennée, 2024/01/08
- [PULL 09/13] replay: introduce a central report point for sync errors, Alex Bennée, 2024/01/08
- [PULL 13/13] tests/avocado: remove skips from replay_kernel, Alex Bennée, 2024/01/08
- [PULL 03/13] tests/avocado: modernise the drive args for replay_linux, Alex Bennée, 2024/01/08
- [PULL 11/13] replay: stop us hanging in rr_wait_io_event, Alex Bennée, 2024/01/08
- [PULL 07/13] replay: add proper kdoc for ReplayState, Alex Bennée, 2024/01/08
- [PULL 12/13] chardev: force write all when recording replay logs,
Alex Bennée <=
- Re: [PULL 00/13] replay fixes for replay_kernel, Peter Maydell, 2024/01/09