On 25/08/2015 02:41, Emilio G. Cota wrote:
> Note that the right place to call rcu_register_thread() is
> do_cpu_loop() and not just in clone_func(), since the
> original 'main' thread needs to call rcu_register_thread()
> as well.
>
> Signed-off-by: Emilio G. Cota <[email protected]>
It doesn't actually, see rcu_init in util/rcu.c. I'm still queueing the
original patch.
Paolo
> ---
> linux-user/qemu.h | 1 +
> linux-user/syscall.c | 1 +
> 2 files changed, 2 insertions(+)
>
> diff --git a/linux-user/qemu.h b/linux-user/qemu.h
> index 8af5e01..08e6609 100644
> --- a/linux-user/qemu.h
> +++ b/linux-user/qemu.h
> @@ -203,6 +203,7 @@ void fork_end(int child);
>
> static inline void do_cpu_loop(CPUArchState *env)
> {
> + rcu_register_thread();
> current_cpu = ENV_GET_CPU(env);
> cpu_loop(env);
> }
> diff --git a/linux-user/syscall.c b/linux-user/syscall.c
> index 701c8fa..84909b4 100644
> --- a/linux-user/syscall.c
> +++ b/linux-user/syscall.c
> @@ -5614,6 +5614,7 @@ abi_long do_syscall(void *cpu_env, int num, abi_long
> arg1,
> thread_cpu = NULL;
> object_unref(OBJECT(cpu));
> g_free(ts);
> + rcu_unregister_thread();
> pthread_exit(NULL);
> }
> #ifdef TARGET_GPROF
> --