diff options
author | Richard Braun <rbraun@sceen.net> | 2014-05-14 21:08:51 +0200 |
---|---|---|
committer | Richard Braun <rbraun@sceen.net> | 2014-05-14 21:15:01 +0200 |
commit | a9a0eb0f6fb7d11b0be15fad729aad974a9b8932 (patch) | |
tree | b753bf68bfa7047994e6ff5e47b6a726fac0792d /arch | |
parent | 44602296bde615ac733f15e9f9f91d820b10e2d1 (diff) |
x86/pmap: fix allocation of reserved mappings
Diffstat (limited to 'arch')
-rw-r--r-- | arch/x86/machine/pmap.c | 18 |
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]); |