Le 18/04/2019 à 08:51, Michael Ellerman a écrit :
From: Russell Currey <rus...@russell.cc>

Some platforms (i.e. Radix MMU) need per-CPU initialisation for KUP.

Any platforms that only want to do KUP initialisation once
globally can just check to see if they're running on the boot CPU, or
check if whatever setup they need has already been performed.

Note that this is only for 64-bit.

Signed-off-by: Russell Currey <rus...@russell.cc>
Signed-off-by: Michael Ellerman <m...@ellerman.id.au>
---

v6: setup_kup() can't be __init anymore.

As reported by the kbuild robot, then setup_kuap() and setup_kuep() can't be __init anymore in that case on the 8xx allthough the 8xx is not SMP. That is rather pitty since they are only used at init.

Why can't we keep setup_kup() __init ? Are secondary CPUs started after init section has been freed ?

Christophe

---
  arch/powerpc/kernel/setup_64.c | 3 +++
  arch/powerpc/mm/init-common.c  | 2 +-
  2 files changed, 4 insertions(+), 1 deletion(-)

diff --git a/arch/powerpc/kernel/setup_64.c b/arch/powerpc/kernel/setup_64.c
index 6179c4200339..684e34493bf5 100644
--- a/arch/powerpc/kernel/setup_64.c
+++ b/arch/powerpc/kernel/setup_64.c
@@ -390,6 +390,9 @@ void early_setup_secondary(void)
        /* Initialize the hash table or TLB handling */
        early_init_mmu_secondary();
+ /* Perform any KUP setup that is per-cpu */
+       setup_kup();
+
        /*
         * At this point, we can let interrupts switch to virtual mode
         * (the MMU has been setup), so adjust the MSR in the PACA to
diff --git a/arch/powerpc/mm/init-common.c b/arch/powerpc/mm/init-common.c
index ecaedfff9992..6ea5607fc564 100644
--- a/arch/powerpc/mm/init-common.c
+++ b/arch/powerpc/mm/init-common.c
@@ -45,7 +45,7 @@ static int __init parse_nosmap(char *p)
  }
  early_param("nosmap", parse_nosmap);
-void __init setup_kup(void)
+void setup_kup(void)
  {
        setup_kuep(disable_kuep);
        setup_kuap(disable_kuap);

Reply via email to