diff options
author | Douglas Crosher | 2020-09-22 09:42:41 +0200 |
---|---|---|
committer | Richard Henderson | 2021-01-22 23:48:01 +0100 |
commit | bfff072c5035b8dfbdebeb6b9143f3ae8fe9f9f4 (patch) | |
tree | dcd2cde5658380681e509bc34457db6d87749408 /accel/tcg | |
parent | Merge remote-tracking branch 'remotes/vivier2/tags/linux-user-for-6.0-pull-re... (diff) | |
download | qemu-bfff072c5035b8dfbdebeb6b9143f3ae8fe9f9f4.tar.gz qemu-bfff072c5035b8dfbdebeb6b9143f3ae8fe9f9f4.tar.xz qemu-bfff072c5035b8dfbdebeb6b9143f3ae8fe9f9f4.zip |
tcg: update the cpu running flag in cpu_exec_step_atomic
The cpu_exec_step_atomic() function is called with the cpu->running
clear and proceeds to run target code without setting this flag. If
this target code generates an exception then handle_cpu_signal() will
unnecessarily abort. For example if atomic code generates a memory
protection fault.
This patch at least sets and clears this running flag, and adds some
assertions to help detect other cases.
Signed-off-by: Douglas Crosher <dtc-ubuntu@scieneer.com>
Message-Id: <a272c656-f7c5-019d-1cc0-499b8f80f2fc@scieneer.com>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Diffstat (limited to 'accel/tcg')
-rw-r--r-- | accel/tcg/cpu-exec.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/accel/tcg/cpu-exec.c b/accel/tcg/cpu-exec.c index e0df9b6a1d..8053aa3f11 100644 --- a/accel/tcg/cpu-exec.c +++ b/accel/tcg/cpu-exec.c @@ -285,6 +285,9 @@ void cpu_exec_step_atomic(CPUState *cpu) if (sigsetjmp(cpu->jmp_env, 0) == 0) { start_exclusive(); + g_assert(cpu == current_cpu); + g_assert(!cpu->running); + cpu->running = true; tb = tb_lookup__cpu_state(cpu, &pc, &cs_base, &flags, cf_mask); if (tb == NULL) { @@ -323,6 +326,7 @@ void cpu_exec_step_atomic(CPUState *cpu) */ g_assert(cpu_in_exclusive_context(cpu)); parallel_cpus = true; + cpu->running = false; end_exclusive(); } |