powerpc/mm: Move register_process_table() out of ppc_md
authorMichael Ellerman <mpe@ellerman.id.au>
Thu, 4 Aug 2016 05:32:06 +0000 (15:32 +1000)
committerMichael Ellerman <mpe@ellerman.id.au>
Thu, 4 Aug 2016 10:22:34 +0000 (20:22 +1000)
We want to initialise register_process_table() before ppc_md is setup,
so that it can be called as part of MMU init (at least on Radix ATM).

That no longer works because probe_machine() requires that ppc_md be
empty before it's called, and we now do probe_machine() much later.

So make register_process_table a global for now. It will probably move
into a mmu_radix_ops struct at some point in the future.

This was broken by me when applying commit 7025776ed1eb "powerpc/mm:
Move hash table ops to a separate structure" due to conflicts with other
patches.

Fixes: 7025776ed1eb ("powerpc/mm: Move hash table ops to a separate structure")
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
arch/powerpc/include/asm/book3s/64/mmu.h
arch/powerpc/include/asm/machdep.h
arch/powerpc/mm/hash_native_64.c
arch/powerpc/mm/pgtable-book3s64.c
arch/powerpc/mm/pgtable-radix.c

index 0cbde6a6750bd5f2f9875bb80aed833fa619b057..8afb0e00f7d9835baaeb7022102f46abdbe11a91 100644 (file)
@@ -134,5 +134,9 @@ static inline void setup_initial_memory_limit(phys_addr_t first_memblock_base,
        return hash__setup_initial_memory_limit(first_memblock_base,
                                           first_memblock_size);
 }
+
+extern int (*register_process_table)(unsigned long base, unsigned long page_size,
+                                    unsigned long tbl_size);
+
 #endif /* __ASSEMBLY__ */
 #endif /* _ASM_POWERPC_BOOK3S_64_MMU_H_ */
index 76f5398e7152e7e6a0e9d77c39e543d8f892c68a..0420b388dd8327d1ba2682a235342f67b22a3f2d 100644 (file)
@@ -219,8 +219,6 @@ struct machdep_calls {
 #ifdef CONFIG_ARCH_RANDOM
        int (*get_random_seed)(unsigned long *v);
 #endif
-       int (*register_process_table)(unsigned long base, unsigned long page_size,
-                                     unsigned long tbl_size);
 };
 
 extern void e500_idle(void);
index d2d8efd79cbfd2173979b6f5ed6b26f2d54338f0..0e4e9654bd2c1fdc07e265d3a7c35b1ab2917dff 100644 (file)
@@ -747,5 +747,5 @@ void __init hpte_init_native(void)
        mmu_hash_ops.hugepage_invalidate   = native_hugepage_invalidate;
 
        if (cpu_has_feature(CPU_FTR_ARCH_300))
-               ppc_md.register_process_table = native_register_proc_table;
+               register_process_table = native_register_proc_table;
 }
index 7bb8acffe876b4f8dd1f8d2012a782a648c4cdb0..34079302cc17488e151c96c121247d2bfb0f1a1f 100644 (file)
@@ -14,6 +14,9 @@
 #include "mmu_decl.h"
 #include <trace/events/thp.h>
 
+int (*register_process_table)(unsigned long base, unsigned long page_size,
+                             unsigned long tbl_size);
+
 #ifdef CONFIG_TRANSPARENT_HUGEPAGE
 /*
  * This is called when relaxing access to a hugepage. It's also called in the page
index f34ccdbe0fbdf354853fd74d31874ec7a58306dc..af897d91d09f4929c06b09aadf5b67d829f13ea9 100644 (file)
@@ -171,7 +171,7 @@ redo:
         * of process table here. But our linear mapping also enable us to use
         * physical address here.
         */
-       ppc_md.register_process_table(__pa(process_tb), 0, PRTB_SIZE_SHIFT - 12);
+       register_process_table(__pa(process_tb), 0, PRTB_SIZE_SHIFT - 12);
        pr_info("Process table %p and radix root for kernel: %p\n", process_tb, init_mm.pgd);
 }
 
@@ -198,7 +198,7 @@ static void __init radix_init_partition_table(void)
 
 void __init radix_init_native(void)
 {
-       ppc_md.register_process_table = native_register_process_table;
+       register_process_table = native_register_process_table;
 }
 
 static int __init get_idx_from_shift(unsigned int shift)