Share the setjmp cleanup between cpu_exec_step_atomic
and cpu_exec_setjmp.
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
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
On 6/7/23 19:05, Richard Henderson wrote: > Share the setjmp cleanup between cpu_exec_step_atomic > and cpu_exec_setjmp. > > Signed-off-by: Richard Henderson <richard.henderson@linaro.org> > --- > accel/tcg/cpu-exec.c | 43 +++++++++++++++++++------------------------ > 1 file changed, 19 insertions(+), 24 deletions(-) Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
On 7/7/23 09:09, Philippe Mathieu-Daudé wrote: > On 6/7/23 19:05, Richard Henderson wrote: >> Share the setjmp cleanup between cpu_exec_step_atomic >> and cpu_exec_setjmp. >> >> Signed-off-by: Richard Henderson <richard.henderson@linaro.org> >> --- >> accel/tcg/cpu-exec.c | 43 +++++++++++++++++++------------------------ >> 1 file changed, 19 insertions(+), 24 deletions(-) > > Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org> > Sorry, Phil, missed applying this this morning before sending v2. I'll update the branch now. r~
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 <richard.henderson@linaro.org>
Reviewed-by: Richard W.M. Jones <rjones@redhat.com>
(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
© 2016 - 2025 Red Hat, Inc.