This one is ok too. Pavel Dovgalyuk
> -----Original Message----- > From: Paolo Bonzini [mailto:paolo.bonz...@gmail.com] On Behalf Of Paolo > Bonzini > Sent: Tuesday, October 06, 2015 11:01 PM > To: qemu-devel@nongnu.org > Cc: pavel.dovga...@ispras.ru > Subject: [PATCH 2/4] more replay fixes > > 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 >