summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--arch/x86/machine/boot.c1
-rw-r--r--arch/x86/machine/pmap.c7
-rw-r--r--arch/x86/machine/pmap.h7
3 files changed, 13 insertions, 2 deletions
diff --git a/arch/x86/machine/boot.c b/arch/x86/machine/boot.c
index 3a4ab2be..27b07b29 100644
--- a/arch/x86/machine/boot.c
+++ b/arch/x86/machine/boot.c
@@ -274,6 +274,7 @@ void __init
boot_ap(void)
{
cpu_ap_setup();
+ pmap_ap_bootstrap();
cpu_info(cpu_current());
cpu_intr_enable();
diff --git a/arch/x86/machine/pmap.c b/arch/x86/machine/pmap.c
index 1b5e6c99..dafa6b70 100644
--- a/arch/x86/machine/pmap.c
+++ b/arch/x86/machine/pmap.c
@@ -342,6 +342,13 @@ pmap_bootstrap(void)
pmap_klimit = VM_MIN_KERNEL_ADDRESS;
}
+void __init
+pmap_ap_bootstrap(void)
+{
+ if (cpu_has_global_pages())
+ cpu_enable_global_pages();
+}
+
unsigned long __init
pmap_bootalloc(unsigned int nr_pages)
{
diff --git a/arch/x86/machine/pmap.h b/arch/x86/machine/pmap.h
index 694bc1a3..fcd8b617 100644
--- a/arch/x86/machine/pmap.h
+++ b/arch/x86/machine/pmap.h
@@ -138,8 +138,6 @@ pmap_pte_t * pmap_setup_paging(void);
/*
* This function is called by the AP bootstrap code before paging is enabled.
- * It merely returns the physical address of the already existing kernel root
- * page table.
*/
pmap_pte_t * pmap_ap_setup_paging(void);
@@ -149,6 +147,11 @@ pmap_pte_t * pmap_ap_setup_paging(void);
void pmap_bootstrap(void);
/*
+ * Early initialization of the MMU on APs.
+ */
+void pmap_ap_bootstrap(void);
+
+/*
* Allocate pure virtual memory.
*
* This memory is obtained from a very small pool of reserved pages located