diff --git a/exec.c b/exec.c
index b85508b..8dfa458 100644
--- a/exec.c
+++ b/exec.c
@@ -537,6 +537,12 @@ CPUArchState *cpu_copy(CPUArchState *env)
     CPUWatchpoint *wp;
 #endif
 
+#ifdef CONFIG_USER_ONLY
+#if defined(TARGET_I386) || defined(TARGET_SPARC) || defined(TARGET_PPC)
+    cpu_reset(ENV_GET_CPU(new_env));
+#endif
+#endif
+
     memcpy(new_env, env, sizeof(CPUArchState));
 
     /* Preserve chaining. */
diff --git a/linux-user/syscall.c b/linux-user/syscall.c
index 693e66f..6c254ba 100644
--- a/linux-user/syscall.c
+++ b/linux-user/syscall.c
@@ -4361,9 +4361,6 @@ static int do_fork(CPUArchState *env, unsigned int flags, abi_ulong newsp,
         init_task_state(ts);
         /* we create a new CPU instance. */
         new_env = cpu_copy(env);
-#if defined(TARGET_I386) || defined(TARGET_SPARC) || defined(TARGET_PPC)
-        cpu_reset(ENV_GET_CPU(new_env));
-#endif
         /* Init regs that differ from the parent.  */
         cpu_clone_regs(new_env, newsp);
         new_env->opaque = ts;
