Le 26/11/2020 à 08:38, Aneesh Kumar K.V a écrit :
Christophe Leroy <christophe.le...@csgroup.eu> writes:

Le 25/11/2020 à 06:16, Aneesh Kumar K.V a écrit :
....

+++ b/arch/powerpc/kernel/process.c
@@ -1530,10 +1530,32 @@ void flush_thread(void)
   #ifdef CONFIG_PPC_BOOK3S_64
   void arch_setup_new_exec(void)
   {
-       if (radix_enabled())
-               return;
-       hash__setup_new_exec();
+       if (!radix_enabled())
+               hash__setup_new_exec();
+
+       /*
+        * 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;
+       }
+
+}
+#else
+void arch_setup_new_exec(void)
+{
+       /*
+        * 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;
+       }
   }
+
   #endif

No need to duplicate arch_setup_new_exec() I think. radix_enabled() is defined 
at all time so the
first function should be valid at all time.


arch/powerpc/kernel/process.c: In function ‘arch_setup_new_exec’:
arch/powerpc/kernel/process.c:1529:3: error: implicit declaration of function 
‘hash__setup_new_exec’; did you mean ‘arch_setup_new_exec’? 
[-Werror=implicit-function-declaration]
  1529 |   hash__setup_new_exec();
       |   ^~~~~~~~~~~~~~~~~~~~
       |   arch_setup_new_exec


That requires us to have hash__setup_new_exec prototype for all platforms.

Yes indeed.

So maybe, just enclose that part in the #ifdef instead of duplicating the 
common part ?

Christophe

Reply via email to