1) Compile files once 2) Move include file from replay/replay.h to include/sysemu/replay.h.
3) Fix Error usage 4) cleanup timerlistgroup_deadline_ns a bit and allow clock jump notifiers to run 5) move replay-user.c to stubs/ --- Makefile.objs | 2 ++ Makefile.target | 1 - cpu-exec.c | 2 +- cpus.c | 2 +- exec.c | 2 +- hw/bt/hci.c | 4 ++-- hw/core/ptimer.c | 2 +- include/qapi/qmp/qerror.h | 2 +- {replay => include/sysemu}/replay.h | 0 qapi/common.json | 6 +----- qemu-timer.c | 14 ++++++-------- replay/Makefile.objs | 11 +++++------ replay/replay-events.c | 2 +- replay/replay-input.c | 2 +- replay/replay-internal.c | 4 ++-- replay/replay-internal.h | 0 replay/replay-time.c | 2 +- replay/replay.c | 2 +- stubs/Makefile.objs | 1 + {replay => stubs}/replay-user.c | 6 +----- stubs/replay.c | 9 +++++++-- ui/input.c | 2 +- vl.c | 6 +++--- 23 files changed, 40 insertions(+), 44 deletions(-) rename {replay => include/sysemu}/replay.h (100%) mode change 100755 => 100644 replay/Makefile.objs mode change 100755 => 100644 replay/replay-events.c mode change 100755 => 100644 replay/replay-input.c mode change 100755 => 100644 replay/replay-internal.c mode change 100755 => 100644 replay/replay-internal.h mode change 100755 => 100644 replay/replay-time.c mode change 100755 => 100644 replay/replay.c rename {replay => stubs}/replay-user.c (90%) diff --git a/Makefile.objs b/Makefile.objs index bc43e5c..ba4b45e 100644 --- a/Makefile.objs +++ b/Makefile.objs @@ -58,6 +58,8 @@ common-obj-y += audio/ common-obj-y += hw/ common-obj-y += accel.o +common-obj-y += replay/ + common-obj-y += ui/ common-obj-y += bt-host.o bt-vhci.o bt-host.o-cflags := $(BLUEZ_CFLAGS) diff --git a/Makefile.target b/Makefile.target index ca8f351..962d004 100644 --- a/Makefile.target +++ b/Makefile.target @@ -88,7 +88,6 @@ obj-y = exec.o translate-all.o cpu-exec.o obj-y += translate-common.o obj-y += cpu-exec-common.o obj-y += tcg/tcg.o tcg/tcg-op.o tcg/optimize.o -obj-y += replay/ obj-$(CONFIG_TCG_INTERPRETER) += tci.o obj-y += tcg/tcg-common.o obj-$(CONFIG_TCG_INTERPRETER) += disas/tci.o diff --git a/cpu-exec.c b/cpu-exec.c index 2b83e18..0850f8c 100644 --- a/cpu-exec.c +++ b/cpu-exec.c @@ -30,7 +30,7 @@ #if defined(TARGET_I386) && !defined(CONFIG_USER_ONLY) #include "hw/i386/apic.h" #endif -#include "replay/replay.h" +#include "sysemu/replay.h" /* -icount align implementation. */ diff --git a/cpus.c b/cpus.c index 5130806..7e846e3 100644 --- a/cpus.c +++ b/cpus.c @@ -42,7 +42,7 @@ #include "qemu/seqlock.h" #include "qapi-event.h" #include "hw/nmi.h" -#include "replay/replay.h" +#include "sysemu/replay.h" #ifndef _WIN32 #include "qemu/compatfd.h" diff --git a/exec.c b/exec.c index dba9258..38f968a 100644 --- a/exec.c +++ b/exec.c @@ -50,7 +50,7 @@ #include "qemu/rcu_queue.h" #include "qemu/main-loop.h" #include "translate-all.h" -#include "replay/replay.h" +#include "sysemu/replay.h" #include "exec/memory-internal.h" #include "exec/ram_addr.h" diff --git a/hw/bt/hci.c b/hw/bt/hci.c index 93dd1dc..2151d01 100644 --- a/hw/bt/hci.c +++ b/hw/bt/hci.c @@ -24,7 +24,7 @@ #include "sysemu/bt.h" #include "hw/bt.h" #include "qapi/qmp/qerror.h" -#include "replay/replay.h" +#include "sysemu/replay.h" struct bt_hci_s { uint8_t *(*evt_packet)(void *opaque); @@ -2193,7 +2193,7 @@ struct HCIInfo *bt_new_hci(struct bt_scatternet_s *net) s->device.handle_destroy = bt_hci_destroy; - error_set(&s->replay_blocker, ERROR_CLASS_REPLAY_NOT_SUPPORTED, "bt hci"); + error_setg(&s->replay_blocker, QERR_REPLAY_NOT_SUPPORTED, "-bt hci"); replay_add_blocker(s->replay_blocker); return &s->info; diff --git a/hw/core/ptimer.c b/hw/core/ptimer.c index 86d544f..edf077c 100644 --- a/hw/core/ptimer.c +++ b/hw/core/ptimer.c @@ -9,7 +9,7 @@ #include "qemu/timer.h" #include "hw/ptimer.h" #include "qemu/host-utils.h" -#include "replay/replay.h" +#include "sysemu/replay.h" struct ptimer_state { diff --git a/include/qapi/qmp/qerror.h b/include/qapi/qmp/qerror.h index 0781a7f..f601499 100644 --- a/include/qapi/qmp/qerror.h +++ b/include/qapi/qmp/qerror.h @@ -107,6 +107,6 @@ "this feature or command is not currently supported" #define QERR_REPLAY_NOT_SUPPORTED \ - ERROR_CLASS_GENERIC_ERROR, "Record/replay feature is not supported for '%s'" + "Record/replay feature is not supported for '%s'" #endif /* QERROR_H */ diff --git a/replay/replay.h b/include/sysemu/replay.h similarity index 100% rename from replay/replay.h rename to include/sysemu/replay.h diff --git a/qapi/common.json b/qapi/common.json index d80e3d4..bad56bf 100644 --- a/qapi/common.json +++ b/qapi/common.json @@ -22,15 +22,11 @@ # @KVMMissingCap: the requested operation can't be fulfilled because a # required KVM capability is missing # -# @ReplayNotSupported: the requested feature is not supported with -# record/replay mode enabled -# # Since: 1.2 ## { 'enum': 'ErrorClass', 'data': [ 'GenericError', 'CommandNotFound', 'DeviceEncrypted', - 'DeviceNotActive', 'DeviceNotFound', 'KVMMissingCap', - 'ReplayNotSupported' ] } + 'DeviceNotActive', 'DeviceNotFound', 'KVMMissingCap' ] } ## # @VersionTriple diff --git a/qemu-timer.c b/qemu-timer.c index e7a5c96..3c6e4c3 100644 --- a/qemu-timer.c +++ b/qemu-timer.c @@ -24,7 +24,7 @@ #include "qemu/main-loop.h" #include "qemu/timer.h" -#include "replay/replay.h" +#include "sysemu/replay.h" #include "sysemu/sysemu.h" #ifdef CONFIG_POSIX @@ -572,15 +572,14 @@ int64_t timerlistgroup_deadline_ns(QEMUTimerListGroup *tlg) QEMUClockType type; bool play = replay_mode == REPLAY_MODE_PLAY; for (type = 0; type < QEMU_CLOCK_MAX; type++) { - if (qemu_clock_use_for_deadline(tlg->tl[type]->clock->type)) { - if (!play || tlg->tl[type]->clock->type == QEMU_CLOCK_REALTIME) { + if (qemu_clock_use_for_deadline(type)) { + if (!play || type == QEMU_CLOCK_REALTIME) { deadline = qemu_soonest_timeout(deadline, - timerlist_deadline_ns( - tlg->tl[type])); + timerlist_deadline_ns(tlg->tl[type])); } else { /* Read clock from the replay file and do not calculate the deadline, based on virtual clock. */ - qemu_clock_get_ns(tlg->tl[type]->clock->type); + qemu_clock_get_ns(type); } } } @@ -606,8 +605,7 @@ int64_t qemu_clock_get_ns(QEMUClockType type) now = REPLAY_CLOCK(REPLAY_CLOCK_HOST, get_clock_realtime()); last = clock->last; clock->last = now; - if ((now < last || now > (last + get_max_clock_jump())) - && replay_mode == REPLAY_MODE_NONE) { + if (now < last || now > (last + get_max_clock_jump())) { notifier_list_notify(&clock->reset_notifiers, &now); } return now; diff --git a/replay/Makefile.objs b/replay/Makefile.objs old mode 100755 new mode 100644 index 1267969..232193a --- a/replay/Makefile.objs +++ b/replay/Makefile.objs @@ -1,6 +1,5 @@ -obj-$(CONFIG_SOFTMMU) += replay.o -obj-$(CONFIG_SOFTMMU) += replay-internal.o -obj-$(CONFIG_SOFTMMU) += replay-events.o -obj-$(CONFIG_SOFTMMU) += replay-time.o -obj-$(CONFIG_SOFTMMU) += replay-input.o -obj-$(CONFIG_USER_ONLY) += replay-user.o +common-obj-y += replay.o +common-obj-y += replay-internal.o +common-obj-y += replay-events.o +common-obj-y += replay-time.o +common-obj-y += replay-input.o diff --git a/replay/replay-events.c b/replay/replay-events.c old mode 100755 new mode 100644 index 06dd4ca..402f644 --- a/replay/replay-events.c +++ b/replay/replay-events.c @@ -11,7 +11,7 @@ #include "qemu-common.h" #include "qemu/error-report.h" -#include "replay.h" +#include "sysemu/replay.h" #include "replay-internal.h" #include "block/aio.h" #include "ui/input.h" diff --git a/replay/replay-input.c b/replay/replay-input.c old mode 100755 new mode 100644 index 9c3b45b..de628ea --- a/replay/replay-input.c +++ b/replay/replay-input.c @@ -10,7 +10,7 @@ */ #include "qemu-common.h" -#include "replay.h" +#include "sysemu/replay.h" #include "replay-internal.h" #include "qemu/notify.h" #include "ui/input.h" diff --git a/replay/replay-internal.c b/replay/replay-internal.c old mode 100755 new mode 100644 index 69fe49f..35cff44 --- a/replay/replay-internal.c +++ b/replay/replay-internal.c @@ -10,7 +10,7 @@ */ #include "qemu-common.h" -#include "replay.h" +#include "sysemu/replay.h" #include "replay-internal.h" #include "qemu/error-report.h" #include "sysemu/sysemu.h" @@ -196,7 +196,7 @@ void replay_save_instructions(void) if (replay_file && replay_mode == REPLAY_MODE_RECORD) { replay_mutex_lock(); int diff = (int)(replay_get_current_step() - replay_state.current_step); - if (first_cpu != NULL && diff > 0) { + if (diff > 0) { replay_put_event(EVENT_INSTRUCTION); replay_put_dword(diff); replay_state.current_step += diff; diff --git a/replay/replay-internal.h b/replay/replay-internal.h old mode 100755 new mode 100644 diff --git a/replay/replay-time.c b/replay/replay-time.c old mode 100755 new mode 100644 index f292ab6..6d06951 --- a/replay/replay-time.c +++ b/replay/replay-time.c @@ -10,7 +10,7 @@ */ #include "qemu-common.h" -#include "replay.h" +#include "sysemu/replay.h" #include "replay-internal.h" #include "qemu/error-report.h" diff --git a/replay/replay.c b/replay/replay.c old mode 100755 new mode 100644 index dfa3d6f..0d33e82 --- a/replay/replay.c +++ b/replay/replay.c @@ -10,7 +10,7 @@ */ #include "qemu-common.h" -#include "replay.h" +#include "sysemu/replay.h" #include "replay-internal.h" #include "qemu/timer.h" #include "qemu/main-loop.h" diff --git a/stubs/Makefile.objs b/stubs/Makefile.objs index c2f9e51..58de861 100644 --- a/stubs/Makefile.objs +++ b/stubs/Makefile.objs @@ -26,6 +26,7 @@ stub-obj-y += notify-event.o stub-obj-$(CONFIG_SPICE) += qemu-chr-open-spice.o stub-obj-y += qtest.o stub-obj-y += replay.o +stub-obj-y += replay-user.o stub-obj-y += reset.o stub-obj-y += runstate-check.o stub-obj-y += set-fd-handler.o diff --git a/replay/replay-user.c b/stubs/replay-user.c similarity index 90% rename from replay/replay-user.c rename to stubs/replay-user.c index eeaa41d..ab8cff7 100755 --- a/replay/replay-user.c +++ b/stubs/replay-user.c @@ -9,7 +9,7 @@ * */ -#include "replay.h" +#include "sysemu/replay.h" bool replay_exception(void) { @@ -30,7 +30,3 @@ bool replay_has_interrupt(void) { return true; } - -void replay_finish(void) -{ -} diff --git a/stubs/replay.c b/stubs/replay.c index f7f74c9..71fa7d5 100755 --- a/stubs/replay.c +++ b/stubs/replay.c @@ -1,4 +1,4 @@ -#include "replay/replay.h" +#include "sysemu/replay.h" #include <stdlib.h> #include "sysemu/sysemu.h" @@ -19,14 +19,19 @@ int64_t replay_read_clock(unsigned int kind) bool replay_checkpoint(ReplayCheckpoint checkpoint) { return 0; + return true; } int runstate_is_running(void) { - return 0; + abort(); } bool replay_events_enabled(void) { return false; } + +void replay_finish(void) +{ +} diff --git a/ui/input.c b/ui/input.c index 9939722..4be7e3c 100644 --- a/ui/input.c +++ b/ui/input.c @@ -6,7 +6,7 @@ #include "trace.h" #include "ui/input.h" #include "ui/console.h" -#include "replay/replay.h" +#include "sysemu/replay.h" struct QemuInputHandlerState { DeviceState *dev; diff --git a/vl.c b/vl.c index 2e5c208..c12fc19 100644 --- a/vl.c +++ b/vl.c @@ -122,7 +122,7 @@ int main(int argc, char **argv) #include "qapi-event.h" #include "exec/semihost.h" #include "crypto/init.h" -#include "replay/replay.h" +#include "sysemu/replay.h" #include "qapi/qmp/qerror.h" #define MAX_VIRTIO_CONSOLES 1 @@ -851,7 +851,7 @@ static void configure_rtc(QemuOpts *opts) } else if (!strcmp(value, "localtime")) { Error *blocker = NULL; rtc_utc = 0; - error_set(&blocker, ERROR_CLASS_REPLAY_NOT_SUPPORTED, + error_setg(&blocker, QERR_REPLAY_NOT_SUPPORTED, "-rtc base=localtime"); replay_add_blocker(blocker); } else { @@ -1258,7 +1258,7 @@ static void smp_parse(QemuOpts *opts) if (smp_cpus > 1 || smp_cores > 1 || smp_threads > 1) { Error *blocker = NULL; - error_set(&blocker, ERROR_CLASS_REPLAY_NOT_SUPPORTED, "smp"); + error_setg(&blocker, QERR_REPLAY_NOT_SUPPORTED, "smp"); replay_add_blocker(blocker); } } -- 2.5.0