Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit eea8148c authored by Michael Ellerman's avatar Michael Ellerman
Browse files

powerpc/mm: Move register_process_table() out of ppc_md



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 7025776e "powerpc/mm:
Move hash table ops to a separate structure" due to conflicts with other
patches.

Fixes: 7025776e ("powerpc/mm: Move hash table ops to a separate structure")
Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
parent 1a058f16
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -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_ */
+0 −2
Original line number Diff line number Diff line
@@ -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);
+1 −1
Original line number Diff line number Diff line
@@ -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;
}
+3 −0
Original line number Diff line number Diff line
@@ -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
+2 −2
Original line number Diff line number Diff line
@@ -171,7 +171,7 @@ static void __init radix_init_pgtable(void)
	 * 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)