On Thu, Jul 06, 2023 at 06:05:36PM +0100, Richard Henderson wrote: > Share the setjmp cleanup between cpu_exec_step_atomic > and cpu_exec_setjmp. > > Signed-off-by: Richard Henderson <[email protected]>
Reviewed-by: Richard W.M. Jones <[email protected]> (I'm still testing the other one, but already up to 600 iterations) Rich. > --- > accel/tcg/cpu-exec.c | 43 +++++++++++++++++++------------------------ > 1 file changed, 19 insertions(+), 24 deletions(-) > > diff --git a/accel/tcg/cpu-exec.c b/accel/tcg/cpu-exec.c > index ba1890a373..31aa320513 100644 > --- a/accel/tcg/cpu-exec.c > +++ b/accel/tcg/cpu-exec.c > @@ -526,6 +526,23 @@ static void cpu_exec_exit(CPUState *cpu) > } > } > > +static void cpu_exec_longjmp_cleanup(CPUState *cpu) > +{ > + /* Non-buggy compilers preserve this; assert the correct value. */ > + g_assert(cpu == current_cpu); > + > +#ifdef CONFIG_USER_ONLY > + clear_helper_retaddr(); > + if (have_mmap_lock()) { > + mmap_unlock(); > + } > +#endif > + if (qemu_mutex_iothread_locked()) { > + qemu_mutex_unlock_iothread(); > + } > + assert_no_pages_locked(); > +} > + > void cpu_exec_step_atomic(CPUState *cpu) > { > CPUArchState *env = cpu->env_ptr; > @@ -568,16 +585,7 @@ void cpu_exec_step_atomic(CPUState *cpu) > cpu_tb_exec(cpu, tb, &tb_exit); > cpu_exec_exit(cpu); > } else { > -#ifdef CONFIG_USER_ONLY > - clear_helper_retaddr(); > - if (have_mmap_lock()) { > - mmap_unlock(); > - } > -#endif > - if (qemu_mutex_iothread_locked()) { > - qemu_mutex_unlock_iothread(); > - } > - assert_no_pages_locked(); > + cpu_exec_longjmp_cleanup(cpu); > } > > /* > @@ -1023,20 +1031,7 @@ static int cpu_exec_setjmp(CPUState *cpu, SyncClocks > *sc) > { > /* Prepare setjmp context for exception handling. */ > if (unlikely(sigsetjmp(cpu->jmp_env, 0) != 0)) { > - /* Non-buggy compilers preserve this; assert the correct value. */ > - g_assert(cpu == current_cpu); > - > -#ifdef CONFIG_USER_ONLY > - clear_helper_retaddr(); > - if (have_mmap_lock()) { > - mmap_unlock(); > - } > -#endif > - if (qemu_mutex_iothread_locked()) { > - qemu_mutex_unlock_iothread(); > - } > - > - assert_no_pages_locked(); > + cpu_exec_longjmp_cleanup(cpu); > } > > return cpu_exec_loop(cpu, sc); > -- > 2.34.1 -- Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones Read my programming and virtualization blog: http://rwmj.wordpress.com virt-builder quickly builds VMs from scratch http://libguestfs.org/virt-builder.1.html
