diff options
author | Richard Henderson <richard.henderson@linaro.org> | 2023-09-14 08:36:11 -0700 |
---|---|---|
committer | Richard Henderson <richard.henderson@linaro.org> | 2023-09-28 10:08:03 -0700 |
commit | 200c1f904f46c209cb022e711a48b89e46512902 (patch) | |
tree | 21166bd67a2cf3bca58447df2a457cec6360ced7 /accel/tcg/tb-maint.c | |
parent | a2f99d484c54adda13e62bf75ba512618a3fe470 (diff) | |
download | qemu-200c1f904f46c209cb022e711a48b89e46512902.zip qemu-200c1f904f46c209cb022e711a48b89e46512902.tar.gz qemu-200c1f904f46c209cb022e711a48b89e46512902.tar.bz2 |
accel/tcg: Always set CF_LAST_IO with CF_NOIRQ
Without this we can get see loops through cpu_io_recompile,
in which the cpu makes no progress.
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Diffstat (limited to 'accel/tcg/tb-maint.c')
-rw-r--r-- | accel/tcg/tb-maint.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/accel/tcg/tb-maint.c b/accel/tcg/tb-maint.c index 32ae8af..0c3e227 100644 --- a/accel/tcg/tb-maint.c +++ b/accel/tcg/tb-maint.c @@ -1083,7 +1083,8 @@ bool tb_invalidate_phys_page_unwind(tb_page_addr_t addr, uintptr_t pc) if (current_tb_modified) { /* Force execution of one insn next time. */ CPUState *cpu = current_cpu; - cpu->cflags_next_tb = 1 | CF_NOIRQ | curr_cflags(current_cpu); + cpu->cflags_next_tb = + 1 | CF_LAST_IO | CF_NOIRQ | curr_cflags(current_cpu); return true; } return false; @@ -1153,7 +1154,8 @@ tb_invalidate_phys_page_range__locked(struct page_collection *pages, if (current_tb_modified) { page_collection_unlock(pages); /* Force execution of one insn next time. */ - current_cpu->cflags_next_tb = 1 | CF_NOIRQ | curr_cflags(current_cpu); + current_cpu->cflags_next_tb = + 1 | CF_LAST_IO | CF_NOIRQ | curr_cflags(current_cpu); mmap_unlock(); cpu_loop_exit_noexc(current_cpu); } |