qemu/accel/tcg
Paolo Bonzini d157e540ed cpu-exec: simplify jump cache management
Unless I'm missing something egregious, the jmp cache is only every
populated with a valid entry by the same thread that reads the cache.
Therefore, the contents of any valid entry are always consistent and
there is no need for any acquire/release magic.

Indeed ->tb has to be accessed with atomics, because concurrent
invalidations would otherwise cause data races.  But ->pc is only ever
accessed by one thread, and accesses to ->tb and ->pc within tb_lookup
can never race with another tb_lookup.  While the TranslationBlock
(especially the flags) could be modified by a concurrent invalidation,
store-release and load-acquire operations on the cache entry would
not add any additional ordering beyond what you get from performing
the accesses within a single thread.

Because of this, there is really nothing to win in splitting the CF_PCREL
and !CF_PCREL paths.  It is easier to just always use the ->pc field in
the jump cache.

I noticed this while working on splitting commit 8ed558ec0c
("accel/tcg: Introduce TARGET_TB_PCREL", 2022-10-04) into multiple
pieces, for the sake of finding a more fine-grained bisection
result for https://gitlab.com/qemu-project/qemu/-/issues/2092.
It does not (and does not intend to) fix that issue; therefore
it may make sense to not commit it until the root cause
of issue #2092 is found.

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Tested-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Message-Id: <20240122153409.351959-1-pbonzini@redhat.com>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
2024-01-29 07:06:03 +10:00
..
atomic_common.c.inc tcg: Use HAVE_CMPXCHG128 instead of CONFIG_CMPXCHG128 2023-07-15 08:02:49 +01:00
atomic_template.h accel/tcg: Modify atomic_mmu_lookup() to use CPUState 2023-10-04 11:03:54 -07:00
cpu-exec-common.c accel/tcg: Make cpu-exec-common.c a target agnostic unit 2023-10-04 11:03:54 -07:00
cpu-exec.c cpu-exec: simplify jump cache management 2024-01-29 07:06:03 +10:00
cputlb.c Replace "iothread lock" with "BQL" in comments 2024-01-08 10:45:43 -05:00
debuginfo.c accel/tcg: Add debuginfo support 2023-01-16 10:14:12 -10:00
debuginfo.h coroutine: Split qemu/coroutine-core.h off qemu/coroutine.h 2023-01-20 07:21:46 +01:00
icount-common.c util/async: Only call icount_notify_exit() if icount is enabled 2024-01-19 12:28:59 +01:00
internal-common.h accel/tcg: Move HMP info jit and info opcount code 2023-11-06 08:27:21 -08:00
internal-target.h accel/tcg: Make cpu-exec-common.c a target agnostic unit 2023-10-04 11:03:54 -07:00
ldst_atomicity.c.inc accel/tcg: Fix condition for store_atom_insert_al16 2023-11-06 08:27:21 -08:00
ldst_common.c.inc accel/tcg: move ld/st helpers to ldst_common.c.inc 2023-10-04 11:03:54 -07:00
meson.build system/watchpoint: Move TCG specific code to accel/tcg/ 2024-01-19 12:28:59 +01:00
monitor.c accel/tcg: Move HMP info jit and info opcount code 2023-11-06 08:27:21 -08:00
perf.c accel/tcg: Unmap perf_marker 2023-06-05 12:06:49 -07:00
perf.h tcg: add perfmap and jitdump 2023-01-16 10:14:12 -10:00
plugin-gen.c plugins: Remove an extra parameter 2023-10-31 14:10:21 +00:00
plugin-helpers.h tcg: exclude non-memory effecting helpers from instrumentation 2023-02-02 11:48:20 +00:00
tb-context.h tcg: Move tb_phys_invalidate_count to tb_ctx 2021-07-09 09:38:33 -07:00
tb-hash.h accel/tcg: Widen pc to vaddr in CPUJumpCache 2023-06-26 17:32:59 +02:00
tb-jmp-cache.h cpu-exec: simplify jump cache management 2024-01-29 07:06:03 +10:00
tb-maint.c accel/tcg: Remove tb_invalidate_phys_page() from system emulation 2024-01-19 12:28:59 +01:00
tcg-accel-ops-icount.c Replace "iothread lock" with "BQL" in comments 2024-01-08 10:45:43 -05:00
tcg-accel-ops-icount.h accel/tcg/tcg-accel-ops-rr: ensure fairness with icount 2023-05-11 09:53:41 +01:00
tcg-accel-ops-mttcg.c system/cpus: rename qemu_mutex_lock_iothread() to bql_lock() 2024-01-08 10:45:43 -05:00
tcg-accel-ops-mttcg.h Clean up header guards that don't match their file name 2022-05-11 16:49:06 +02:00
tcg-accel-ops-rr.c Pull request 2024-01-09 10:32:23 +00:00
tcg-accel-ops-rr.h Clean up header guards that don't match their file name 2022-05-11 16:49:06 +02:00
tcg-accel-ops.c system/cpus: rename qemu_mutex_lock_iothread() to bql_lock() 2024-01-08 10:45:43 -05:00
tcg-accel-ops.h Clean up header guards that don't match their file name 2022-05-11 16:49:06 +02:00
tcg-all.c tcg: Split out tcg init functions to tcg/startup.h 2023-10-04 11:03:54 -07:00
tcg-runtime-gvec.c tcg: Add gvec compare with immediate and scalar operand 2023-09-16 14:57:15 +00:00
tcg-runtime.c tcg: Split helper-proto.h 2023-06-05 12:04:29 -07:00
tcg-runtime.h tcg: Add gvec compare with immediate and scalar operand 2023-09-16 14:57:15 +00:00
trace-events accel/tcg: Remove trace events from trace-root.h 2022-12-20 17:11:12 -08:00
trace.h trace: switch position of headers to what Meson requires 2020-08-21 06:18:24 -04:00
translate-all.c system/cpus: rename qemu_mutex_lock_iothread() to bql_lock() 2024-01-08 10:45:43 -05:00
translator.c accel/tcg: Remove CF_LAST_IO 2023-11-14 10:40:54 -08:00
user-exec-stub.c accel: Introduce cpu_exec_reset_hold() 2023-11-07 12:13:27 +01:00
user-exec.c tcg: Correct invalid mentions of 'softmmu' by 'system-mode' 2023-10-07 19:02:33 +02:00
watchpoint.c system/watchpoint: Move TCG specific code to accel/tcg/ 2024-01-19 12:28:59 +01:00