summaryrefslogtreecommitdiff
path: root/arch
diff options
context:
space:
mode:
authorRichard Braun <rbraun@sceen.net>2014-05-14 21:08:51 +0200
committerRichard Braun <rbraun@sceen.net>2014-05-14 21:15:01 +0200
commita9a0eb0f6fb7d11b0be15fad729aad974a9b8932 (patch)
treeb753bf68bfa7047994e6ff5e47b6a726fac0792d /arch
parent44602296bde615ac733f15e9f9f91d820b10e2d1 (diff)
x86/pmap: fix allocation of reserved mappings
Diffstat (limited to 'arch')
-rw-r--r--arch/x86/machine/pmap.c18
1 files changed, 11 insertions, 7 deletions
diff --git a/arch/x86/machine/pmap.c b/arch/x86/machine/pmap.c
index 95290be..7869ee0 100644
--- a/arch/x86/machine/pmap.c
+++ b/arch/x86/machine/pmap.c
@@ -94,13 +94,11 @@ static struct pmap_pt_level pmap_pt_levels[] __read_mostly = {
* before the VM system is initialized.
*
* List of users :
- * - pmap_zero_mapping (1 page per CPU)
- * - pmap_ptp_mapping (PMAP_NR_RPTPS pages per CPU)
+ * - pmap_zero_mapping (1 page)
+ * - pmap_ptp_mapping (PMAP_NR_RPTPS pages)
* - CGA video memory (1 page)
*/
-#define PMAP_RESERVED_PAGES (MAX_CPUS \
- + (PMAP_NR_RPTPS * MAX_CPUS) \
- + 1)
+#define PMAP_RESERVED_PAGES (1 + PMAP_NR_RPTPS + 1)
/*
* Addresses reserved for temporary mappings.
@@ -654,12 +652,18 @@ pmap_bootstrap(void)
pmap_prot_table[VM_PROT_EXECUTE | VM_PROT_WRITE] = PMAP_PTE_RW;
pmap_prot_table[VM_PROT_ALL] = PMAP_PTE_RW;
+ va = pmap_bootalloc(1);
+
for (cpu = 0; cpu < MAX_CPUS; cpu++) {
mutex_init(&pmap_zero_mappings[cpu].lock);
- pmap_zero_mappings[cpu].va = pmap_bootalloc(1);
+ pmap_zero_mappings[cpu].va = va;
+ }
+ va = pmap_bootalloc(PMAP_NR_RPTPS);
+
+ for (cpu = 0; cpu < MAX_CPUS; cpu++) {
mutex_init(&pmap_ptp_mappings[cpu].lock);
- pmap_ptp_mappings[cpu].va = pmap_bootalloc(PMAP_NR_RPTPS);
+ pmap_ptp_mappings[cpu].va = va;
}
pmap_syncer_init(&pmap_syncers[0]);