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 <c...@braap.org>
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 > --