aboutsummaryrefslogtreecommitdiffstats
path: root/arch/s390/mm
diff options
context:
space:
mode:
authorHeiko Carstens <heiko.carstens@de.ibm.com>2012-10-05 10:52:18 -0400
committerMartin Schwidefsky <schwidefsky@de.ibm.com>2012-10-09 08:17:01 -0400
commitc972cc60c23f5a6309292bfcc91a441743ba027e (patch)
tree04f8fc1d4e78979d28a897a90bba5c3321555967 /arch/s390/mm
parent021d48be48481821f6e3f53028915c0571874135 (diff)
s390/vmalloc: have separate modules area
Add a special module area on top of the vmalloc area, which may be only used for modules and bpf jit generated code. This makes sure that inter module branches will always happen without a trampoline and in addition having all the code within a 2GB frame is branch prediction unit friendly. Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Diffstat (limited to 'arch/s390/mm')
-rw-r--r--arch/s390/mm/dump_pagetables.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/arch/s390/mm/dump_pagetables.c b/arch/s390/mm/dump_pagetables.c
index cd1c62d160ed..cbc6668acb85 100644
--- a/arch/s390/mm/dump_pagetables.c
+++ b/arch/s390/mm/dump_pagetables.c
@@ -18,6 +18,9 @@ enum address_markers_idx {
18 KERNEL_END_NR, 18 KERNEL_END_NR,
19 VMEMMAP_NR, 19 VMEMMAP_NR,
20 VMALLOC_NR, 20 VMALLOC_NR,
21#ifdef CONFIG_64BIT
22 MODULES_NR,
23#endif
21}; 24};
22 25
23static struct addr_marker address_markers[] = { 26static struct addr_marker address_markers[] = {
@@ -26,6 +29,9 @@ static struct addr_marker address_markers[] = {
26 [KERNEL_END_NR] = {(unsigned long)&_end, "Kernel Image End"}, 29 [KERNEL_END_NR] = {(unsigned long)&_end, "Kernel Image End"},
27 [VMEMMAP_NR] = {0, "vmemmap Area"}, 30 [VMEMMAP_NR] = {0, "vmemmap Area"},
28 [VMALLOC_NR] = {0, "vmalloc Area"}, 31 [VMALLOC_NR] = {0, "vmalloc Area"},
32#ifdef CONFIG_64BIT
33 [MODULES_NR] = {0, "Modules Area"},
34#endif
29 { -1, NULL } 35 { -1, NULL }
30}; 36};
31 37
@@ -205,11 +211,12 @@ static int pt_dump_init(void)
205 * kernel ASCE. We need this to keep the page table walker functions 211 * kernel ASCE. We need this to keep the page table walker functions
206 * from accessing non-existent entries. 212 * from accessing non-existent entries.
207 */ 213 */
208#ifdef CONFIG_64BIT 214#ifdef CONFIG_32BIT
215 max_addr = 1UL << 31;
216#else
209 max_addr = (S390_lowcore.kernel_asce & _REGION_ENTRY_TYPE_MASK) >> 2; 217 max_addr = (S390_lowcore.kernel_asce & _REGION_ENTRY_TYPE_MASK) >> 2;
210 max_addr = 1UL << (max_addr * 11 + 31); 218 max_addr = 1UL << (max_addr * 11 + 31);
211#else 219 address_markers[MODULES_NR].start_address = MODULES_VADDR;
212 max_addr = 1UL << 31;
213#endif 220#endif
214 address_markers[VMEMMAP_NR].start_address = (unsigned long) vmemmap; 221 address_markers[VMEMMAP_NR].start_address = (unsigned long) vmemmap;
215 address_markers[VMALLOC_NR].start_address = VMALLOC_START; 222 address_markers[VMALLOC_NR].start_address = VMALLOC_START;