On 31/03/2015 13:41, Peter Maydell wrote:
>> >  static void __attribute__((__constructor__)) rcu_init(void)
>> >  {
>> >  #ifdef CONFIG_POSIX
>> > -    pthread_atfork(rcu_init_lock, rcu_init_unlock, rcu_init_child);
>> > +    pthread_atfork(rcu_init_lock, rcu_init_unlock, rcu_init_unlock);
>> >  #endif
>> >      rcu_init_complete();
>> >  }
> So this is changing the linux-user behaviour so we no
> longer do any init after fork; is that a problem?

Currently linux-user is not using RCU at all, so no.  Should I add an
rcu_after_fork there too?

diff --git a/linux-user/syscall.c b/linux-user/syscall.c
index 4bd9543..1622ad6 100644
--- a/linux-user/syscall.c
+++ b/linux-user/syscall.c
@@ -4572,6 +4572,7 @@ static int do_fork(CPUArchState *env, unsigned int flags, 
abi_ulong newsp,
         ret = fork();
         if (ret == 0) {
             /* Child Process.  */
+            rcu_after_fork();
             cpu_clone_regs(env, newsp);
             fork_end(1);
             /* There is a race condition here.  The parent process could

Paolo

Reply via email to