|
|
|
|
# If possible, add new files to other directories, by using "if_false".
|
|
|
|
|
# If you need them here, try to add them under one of the if statements
|
|
|
|
|
# below, so that it is clear who needs the stubbed functionality.
|
|
|
|
|
|
|
|
|
|
stub_ss.add(files('cpu-get-clock.c'))
|
|
|
|
|
stub_ss.add(files('error-printf.c'))
|
|
|
|
|
stub_ss.add(files('fdset.c'))
|
|
|
|
|
stub_ss.add(files('iothread-lock.c'))
|
|
|
|
|
stub_ss.add(files('is-daemonized.c'))
|
|
|
|
|
stub_ss.add(files('monitor-core.c'))
|
|
|
|
|
stub_ss.add(files('replay-mode.c'))
|
|
|
|
|
stub_ss.add(files('trace-control.c'))
|
|
|
|
|
|
|
|
|
|
if have_block
|
|
|
|
|
stub_ss.add(files('bdrv-next-monitor-owned.c'))
|
|
|
|
|
stub_ss.add(files('blk-commit-all.c'))
|
|
|
|
|
stub_ss.add(files('blk-exp-close-all.c'))
|
|
|
|
|
stub_ss.add(files('blockdev-close-all-bdrv-states.c'))
|
|
|
|
|
stub_ss.add(files('change-state-handler.c'))
|
|
|
|
|
stub_ss.add(files('get-vm-name.c'))
|
|
|
|
|
stub_ss.add(files('iothread-lock-block.c'))
|
|
|
|
|
stub_ss.add(files('migr-blocker.c'))
|
|
|
|
|
stub_ss.add(files('physmem.c'))
|
|
|
|
|
stub_ss.add(files('ram-block.c'))
|
|
|
|
|
stub_ss.add(files('runstate-check.c'))
|
|
|
|
|
stub_ss.add(files('uuid.c'))
|
replay: do not build if TCG is not available
this fixes non-TCG builds broken recently by replay reverse debugging.
Stub the needed functions in stub/, splitting roughly between functions
needed only by system emulation, by system emulation and tools,
and by everyone. This includes duplicating some code in replay/, and
puts the logic for non-replay related events in the replay/ module (+
the stubs), so this should be revisited in the future.
Surprisingly, only _one_ qtest was affected by this, ide-test.c, which
resulted in a buzz as the bh events were never delivered, and the bh
never executed.
Many other subsystems _should_ have been affected.
This fixes the immediate issue, however a better way to group replay
functionality to TCG-only code could be developed in the long term.
Signed-off-by: Claudio Fontana <cfontana@suse.de>
Message-Id: <20201013192123.22632-4-cfontana@suse.de>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
6 years ago
|
|
|
endif
|
|
|
|
|
|
|
|
|
|
if have_block or have_ga
|
|
|
|
|
stub_ss.add(files('replay-tools.c'))
|
|
|
|
|
# stubs for hooks in util/main-loop.c, util/async.c etc.
|
|
|
|
|
stub_ss.add(files('cpus-virtual-clock.c'))
|
|
|
|
|
stub_ss.add(files('icount.c'))
|
|
|
|
|
stub_ss.add(files('graph-lock.c'))
|
|
|
|
|
if libaio.found()
|
|
|
|
|
stub_ss.add(files('linux-aio.c'))
|
|
|
|
|
endif
|
|
|
|
|
stub_ss.add(files('qemu-timer-notify-cb.c'))
|
|
|
|
|
|
|
|
|
|
# stubs for monitor
|
|
|
|
|
stub_ss.add(files('monitor-internal.c'))
|
|
|
|
|
stub_ss.add(files('qmp-command-available.c'))
|
|
|
|
|
stub_ss.add(files('qmp-quit.c'))
|
target/s390x: Fix infinite loop during replay
Replaying even trivial s390x kernels hangs, because:
- cpu_post_load() fires the TOD timer immediately.
- s390_tod_load() schedules work for firing the TOD timer.
- If rr loop sees work and then timer, we get one timer expiration.
- If rr loop sees timer and then work, we get two timer expirations.
- Record and replay may diverge due to this race.
- In this particular case divergence makes replay loop spin: it sees that
TOD timer has expired, but cannot invoke its callback, because there
is no recorded CHECKPOINT_CLOCK_VIRTUAL.
- The order in which rr loop sees work and timer depends on whether
and when rr loop wakes up during load_snapshot().
- rr loop may wake up after the main thread kicks the CPU and drops
the BQL, which may happen if it calls, e.g., qemu_cond_wait_bql().
Firing TOD timer twice is duplicate work, but it was introduced
intentionally in commit 7c12f710bad6 ("s390x/tcg: rearm the CKC timer
during migration") in order to avoid dependency on migration order.
The key culprits here are timers that are armed ready expired. They
break the ordering between timers and CPU work, because they are not
constrained by instruction execution, thus introducing non-determinism
and record-replay divergence.
Fix by converting such timer callbacks to CPU work. Also add TOD clock
updates to the save path, mirroring the load path, in order to have the
same CHECKPOINT_CLOCK_VIRTUAL during recording and replaying.
Link: https://lore.kernel.org/qemu-devel/20251128133949.181828-1-thuth@redhat.com/
Signed-off-by: Ilya Leoshkevich <iii@linux.ibm.com>
Tested-by: Thomas Huth <thuth@redhat.com>
Message-ID: <20251201215514.1751994-1-iii@linux.ibm.com>
[thuth: Add SPDX license identifiers to the new stubs files]
Signed-off-by: Thomas Huth <thuth@redhat.com>
4 months ago
|
|
|
stub_ss.add(files('async-run-on-cpu.c'))
|
|
|
|
|
stub_ss.add(files('cpus-queue.c'))
|
|
|
|
|
endif
|
|
|
|
|
|
|
|
|
|
if have_block or have_user
|
|
|
|
|
stub_ss.add(files('qtest.c'))
|
|
|
|
|
stub_ss.add(files('vm-stop.c'))
|
|
|
|
|
stub_ss.add(files('vmstate.c'))
|
|
|
|
|
endif
|
|
|
|
|
|
|
|
|
|
if have_user
|
|
|
|
|
# Symbols that are used by hw/core.
|
|
|
|
|
stub_ss.add(files('cpu-synchronize-state.c'))
|
|
|
|
|
stub_ss.add(files('cpu-destroy-address-spaces.c'))
|
|
|
|
|
|
|
|
|
|
# Stubs for QAPI events. Those can always be included in the build, but
|
|
|
|
|
# they are not built at all for --disable-system builds.
|
|
|
|
|
if not have_system
|
|
|
|
|
stub_ss.add(files('qdev.c'))
|
|
|
|
|
endif
|
|
|
|
|
|
|
|
|
|
stub_ss.add(files('monitor-internal.c'))
|
|
|
|
|
endif
|
|
|
|
|
|
|
|
|
|
if have_system
|
|
|
|
|
# Symbols that are only needed in some configurations. Try not
|
|
|
|
|
# adding more of these. If the symbol is used in specific_ss,
|
|
|
|
|
# in particular, consider defining a preprocessor macro via
|
|
|
|
|
# Kconfig or configs/targets/.
|
|
|
|
|
stub_ss.add(files('dump.c'))
|
|
|
|
|
stub_ss.add(files('cmos.c'))
|
|
|
|
|
stub_ss.add(files('fw_cfg.c'))
|
|
|
|
|
stub_ss.add(files('igvm.c'))
|
|
|
|
|
stub_ss.add(files('target-get-monitor-def.c'))
|
|
|
|
|
stub_ss.add(files('target-monitor-defs.c'))
|
|
|
|
|
stub_ss.add(files('win32-kbd-hook.c'))
|
|
|
|
|
stub_ss.add(files('xen-hw-stub.c'))
|
|
|
|
|
stub_ss.add(files('monitor-arm-gic.c'))
|
|
|
|
|
stub_ss.add(files('monitor-i386-rtc.c'))
|
|
|
|
|
stub_ss.add(files('monitor-i386-sev.c'))
|
|
|
|
|
stub_ss.add(files('monitor-i386-sgx.c'))
|
|
|
|
|
stub_ss.add(files('monitor-i386-xen.c'))
|
|
|
|
|
stub_ss.add(files('monitor-cpu.c'))
|
|
|
|
|
stub_ss.add(files('monitor-cpu-s390x.c'))
|
|
|
|
|
stub_ss.add(files('monitor-cpu-s390x-kvm.c'))
|
|
|
|
|
endif
|
|
|
|
|
|
|
|
|
|
if have_system or have_user
|
|
|
|
|
stub_ss.add(files('gdbstub.c'))
|
|
|
|
|
|
|
|
|
|
# Also included in have_system for --disable-tcg builds
|
|
|
|
|
stub_ss.add(files('replay.c'))
|
|
|
|
|
|
|
|
|
|
# Also included in have_system for tests/unit/test-qdev-global-props
|
|
|
|
|
stub_ss.add(files('hotplug-stubs.c'))
|
|
|
|
|
stub_ss.add(files('sysbus.c'))
|
|
|
|
|
endif
|