/* how to get the thread information struct from C */
 extern int arch_dup_task_struct(struct task_struct *dst, struct task_struct *src);
 
-#ifdef CONFIG_PPC_BOOK3S_64
 void arch_setup_new_exec(void);
 #define arch_setup_new_exec arch_setup_new_exec
-#endif
 
 #endif /* __ASSEMBLY__ */
 
 
 #endif /* CONFIG_HAVE_HW_BREAKPOINT */
 }
 
-#ifdef CONFIG_PPC_BOOK3S_64
 void arch_setup_new_exec(void)
 {
-       if (radix_enabled())
-               return;
-       hash__setup_new_exec();
-}
+
+#ifdef CONFIG_PPC_BOOK3S_64
+       if (!radix_enabled())
+               hash__setup_new_exec();
 #endif
+       /*
+        * If we exec out of a kernel thread then thread.regs will not be
+        * set.  Do it now.
+        */
+       if (!current->thread.regs) {
+               struct pt_regs *regs = task_stack_page(current) + THREAD_SIZE;
+               current->thread.regs = regs - 1;
+       }
+}
 
 #ifdef CONFIG_PPC64
 /**
                preload_new_slb_context(start, sp);
 #endif
 
-       /*
-        * If we exec out of a kernel thread then thread.regs will not be
-        * set.  Do it now.
-        */
-       if (!current->thread.regs) {
-               struct pt_regs *regs = task_stack_page(current) + THREAD_SIZE;
-               current->thread.regs = regs - 1;
-       }
-
 #ifdef CONFIG_PPC_TRANSACTIONAL_MEM
        /*
         * Clear any transactional state, we're exec()ing. The cause is