summaryrefslogtreecommitdiff
path: root/arch/x86/machine/pmap.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/x86/machine/pmap.c')
-rw-r--r--arch/x86/machine/pmap.c42
1 files changed, 29 insertions, 13 deletions
diff --git a/arch/x86/machine/pmap.c b/arch/x86/machine/pmap.c
index 93b68758..7ab70bfd 100644
--- a/arch/x86/machine/pmap.c
+++ b/arch/x86/machine/pmap.c
@@ -828,7 +828,7 @@ pmap_syncer_init(struct pmap_syncer *syncer, unsigned int cpu)
syscnt_register(&syncer->sc_update_protects, name);
}
-void __init
+static int __init
pmap_bootstrap(void)
{
struct pmap_cpu_table *cpu_table;
@@ -864,20 +864,17 @@ pmap_bootstrap(void)
if (cpu_has_global_pages()) {
pmap_setup_global_pages();
}
-}
-void __init
-pmap_ap_bootstrap(void)
-{
- cpu_local_assign(pmap_current_ptr, kernel_pmap);
-
- if (cpu_has_global_pages()) {
- cpu_enable_global_pages();
- } else {
- cpu_tlb_flush();
- }
+ return 0;
}
+INIT_OP_DEFINE(pmap_bootstrap,
+ INIT_OP_DEP(cpu_setup, true),
+ INIT_OP_DEP(mutex_setup, true),
+ INIT_OP_DEP(spinlock_setup, true),
+ INIT_OP_DEP(syscnt_setup, true),
+ INIT_OP_DEP(thread_bootstrap, true));
+
static void __init
pmap_setup_set_ptp_type(phys_addr_t ptp_pa, unsigned int index,
unsigned int level)
@@ -906,7 +903,7 @@ pmap_setup_fix_ptps(void)
pmap_setup_set_ptp_type);
}
-void __init
+static int __init
pmap_setup(void)
{
pmap_setup_fix_ptps();
@@ -914,6 +911,25 @@ pmap_setup(void)
kmem_cache_init(&pmap_update_oplist_cache, "pmap_update_oplist",
sizeof(struct pmap_update_oplist), CPU_L1_SIZE,
pmap_update_oplist_ctor, 0);
+ return 0;
+}
+
+INIT_OP_DEFINE(pmap_setup,
+ INIT_OP_DEP(kmem_setup, true),
+ INIT_OP_DEP(log_setup, true),
+ INIT_OP_DEP(pmap_bootstrap, true),
+ INIT_OP_DEP(vm_page_setup, true));
+
+void __init
+pmap_ap_setup(void)
+{
+ cpu_local_assign(pmap_current_ptr, kernel_pmap);
+
+ if (cpu_has_global_pages()) {
+ cpu_enable_global_pages();
+ } else {
+ cpu_tlb_flush();
+ }
}
static void __init