diff options
author | Minfei Huang <mnfhuang@gmail.com> | 2014-10-29 07:38:37 -0400 |
---|---|---|
committer | Thomas Gleixner <tglx@linutronix.de> | 2014-11-03 07:40:44 -0500 |
commit | 63e7b6d90c1ebdb73d82eedb945b62ceedc3f963 (patch) | |
tree | b70608ec34780769c93d7a3d261d625999be6327 /arch | |
parent | 96e70f83285676d8794f62f3c294d0247bef6b21 (diff) |
x86: mm: Re-use the early_ioremap fixed area
The temp fixed area is only used during boot for early_ioremap(), and
it is unused when ioremap() is functional. vmalloc/pkmap area become
available after early boot so the temp fixed area is available for
re-use.
The virtual address is more precious on i386, especially turning on
high memory. So we can re-use the virtual address space.
Remove the now unused defines FIXADDR_BOOT_START and FIXADDR_BOOT_SIZE.
Signed-off-by: Minfei Huang <mnfhuang@gmail.com>
Cc: pbonzini@redhat.com
Cc: bp@suse.de
Link: http://lkml.kernel.org/r/1414582717-32729-1-git-send-email-mnfhuang@gmail.com
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Diffstat (limited to 'arch')
-rw-r--r-- | arch/x86/include/asm/fixmap.h | 2 | ||||
-rw-r--r-- | arch/x86/include/asm/highmem.h | 25 | ||||
-rw-r--r-- | arch/x86/include/asm/pgtable_32_types.h | 4 |
3 files changed, 16 insertions, 15 deletions
diff --git a/arch/x86/include/asm/fixmap.h b/arch/x86/include/asm/fixmap.h index ffb1733ac91f..bf728e49c53c 100644 --- a/arch/x86/include/asm/fixmap.h +++ b/arch/x86/include/asm/fixmap.h | |||
@@ -136,9 +136,7 @@ enum fixed_addresses { | |||
136 | extern void reserve_top_address(unsigned long reserve); | 136 | extern void reserve_top_address(unsigned long reserve); |
137 | 137 | ||
138 | #define FIXADDR_SIZE (__end_of_permanent_fixed_addresses << PAGE_SHIFT) | 138 | #define FIXADDR_SIZE (__end_of_permanent_fixed_addresses << PAGE_SHIFT) |
139 | #define FIXADDR_BOOT_SIZE (__end_of_fixed_addresses << PAGE_SHIFT) | ||
140 | #define FIXADDR_START (FIXADDR_TOP - FIXADDR_SIZE) | 139 | #define FIXADDR_START (FIXADDR_TOP - FIXADDR_SIZE) |
141 | #define FIXADDR_BOOT_START (FIXADDR_TOP - FIXADDR_BOOT_SIZE) | ||
142 | 140 | ||
143 | extern int fixmaps_set; | 141 | extern int fixmaps_set; |
144 | 142 | ||
diff --git a/arch/x86/include/asm/highmem.h b/arch/x86/include/asm/highmem.h index 302a323b3f67..04e9d023168f 100644 --- a/arch/x86/include/asm/highmem.h +++ b/arch/x86/include/asm/highmem.h | |||
@@ -38,17 +38,20 @@ extern unsigned long highstart_pfn, highend_pfn; | |||
38 | /* | 38 | /* |
39 | * Ordering is: | 39 | * Ordering is: |
40 | * | 40 | * |
41 | * FIXADDR_TOP | 41 | * high memory on: high_memory off: |
42 | * fixed_addresses | 42 | * FIXADDR_TOP FIXADDR_TOP |
43 | * FIXADDR_START | 43 | * fixed addresses fixed addresses |
44 | * temp fixed addresses | 44 | * FIXADDR_START FIXADDR_START |
45 | * FIXADDR_BOOT_START | 45 | * temp fixed addresses/persistent kmap area VMALLOC_END |
46 | * Persistent kmap area | 46 | * PKMAP_BASE temp fixed addresses/vmalloc area |
47 | * PKMAP_BASE | 47 | * VMALLOC_END VMALLOC_START |
48 | * VMALLOC_END | 48 | * vmalloc area high_memory |
49 | * Vmalloc area | 49 | * VMALLOC_START |
50 | * VMALLOC_START | 50 | * high_memory |
51 | * high_memory | 51 | * |
52 | * The temp fixed area is only used during boot for early_ioremap(), and | ||
53 | * it is unused when the ioremap() is functional. vmalloc/pkmap area become | ||
54 | * available after early boot so the temp fixed area is available for re-use. | ||
52 | */ | 55 | */ |
53 | #define LAST_PKMAP_MASK (LAST_PKMAP-1) | 56 | #define LAST_PKMAP_MASK (LAST_PKMAP-1) |
54 | #define PKMAP_NR(virt) ((virt-PKMAP_BASE) >> PAGE_SHIFT) | 57 | #define PKMAP_NR(virt) ((virt-PKMAP_BASE) >> PAGE_SHIFT) |
diff --git a/arch/x86/include/asm/pgtable_32_types.h b/arch/x86/include/asm/pgtable_32_types.h index 2ac5fc86abb3..9fb2f2bc8245 100644 --- a/arch/x86/include/asm/pgtable_32_types.h +++ b/arch/x86/include/asm/pgtable_32_types.h | |||
@@ -37,13 +37,13 @@ extern bool __vmalloc_start_set; /* set once high_memory is set */ | |||
37 | #define LAST_PKMAP 1024 | 37 | #define LAST_PKMAP 1024 |
38 | #endif | 38 | #endif |
39 | 39 | ||
40 | #define PKMAP_BASE ((FIXADDR_BOOT_START - PAGE_SIZE * (LAST_PKMAP + 1)) \ | 40 | #define PKMAP_BASE ((FIXADDR_START - PAGE_SIZE * (LAST_PKMAP + 1)) \ |
41 | & PMD_MASK) | 41 | & PMD_MASK) |
42 | 42 | ||
43 | #ifdef CONFIG_HIGHMEM | 43 | #ifdef CONFIG_HIGHMEM |
44 | # define VMALLOC_END (PKMAP_BASE - 2 * PAGE_SIZE) | 44 | # define VMALLOC_END (PKMAP_BASE - 2 * PAGE_SIZE) |
45 | #else | 45 | #else |
46 | # define VMALLOC_END (FIXADDR_BOOT_START - 2 * PAGE_SIZE) | 46 | # define VMALLOC_END (FIXADDR_START - 2 * PAGE_SIZE) |
47 | #endif | 47 | #endif |
48 | 48 | ||
49 | #define MODULES_VADDR VMALLOC_START | 49 | #define MODULES_VADDR VMALLOC_START |