#include <asm/book3s/64/hash-pkey.h>
 
 extern u64 __ro_after_init default_uamor;
+extern u64 __ro_after_init default_amr;
+extern u64 __ro_after_init default_iamr;
 
 static inline u64 vmflag_to_pte_pkey_bits(u64 vm_flags)
 {
 
                struct pt_regs *regs = task_stack_page(current) + THREAD_SIZE;
                current->thread.regs = regs - 1;
        }
+
+#ifdef CONFIG_PPC_MEM_KEYS
+       current->thread.regs->amr  = default_amr;
+       current->thread.regs->iamr  = default_iamr;
+#endif
 }
 
 #ifdef CONFIG_PPC64
        current->thread.load_tm = 0;
 #endif /* CONFIG_PPC_TRANSACTIONAL_MEM */
 
-       thread_pkey_regs_init(¤t->thread);
 }
 EXPORT_SYMBOL(start_thread);
 
 
  * Even if we allocate keys with sys_pkey_alloc(), we need to make sure
  * other thread still find the access denied using the same keys.
  */
-static u64 default_amr = ~0x0UL;
-static u64 default_iamr = 0x5555555555555555UL;
+u64 default_amr __ro_after_init  = ~0x0UL;
+u64 default_iamr __ro_after_init = 0x5555555555555555UL;
 u64 default_uamor __ro_after_init;
 /*
  * Key used to implement PROT_EXEC mmap. Denies READ/WRITE
                write_iamr(new_thread->iamr);
 }
 
-void thread_pkey_regs_init(struct thread_struct *thread)
-{
-       if (!mmu_has_feature(MMU_FTR_PKEY))
-               return;
-
-       thread->amr   = default_amr;
-       thread->iamr  = default_iamr;
-
-       write_amr(default_amr);
-       write_iamr(default_iamr);
-}
-
 int execute_only_pkey(struct mm_struct *mm)
 {
        return mm->context.execute_only_pkey;