diff options
author | Christian Borntraeger <borntraeger@de.ibm.com> | 2008-01-26 08:11:00 -0500 |
---|---|---|
committer | Martin Schwidefsky <schwidefsky@de.ibm.com> | 2008-01-26 08:11:12 -0500 |
commit | 5fd9c6e214547a32d3da6ee4284c79004d667bc8 (patch) | |
tree | def2e218393c9867e9db939f1d379c005895a912 /include/asm-s390/pgtable.h | |
parent | 8ffd74a0924e4e04f6455eb2d2187a9564678d01 (diff) |
[S390] Change vmalloc defintions
Currently the vmalloc area starts at a dynamic address depending on
the memory size. There was also an 8MB security hole after the
physical memory to catch out-of-bounds accesses.
We can simplify the code by putting the vmalloc area explicitely at
the top of the kernel mapping and setting the vmalloc size to a fixed
value of 128MB/128GB for 31bit/64bit systems. Part of the vmalloc
area will be used for the vmem_map. This leaves an area of 96MB/1GB
for normal vmalloc allocations.
Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Diffstat (limited to 'include/asm-s390/pgtable.h')
-rw-r--r-- | include/asm-s390/pgtable.h | 46 |
1 files changed, 16 insertions, 30 deletions
diff --git a/include/asm-s390/pgtable.h b/include/asm-s390/pgtable.h index 1f530f8a6280..79b9eab1a0c7 100644 --- a/include/asm-s390/pgtable.h +++ b/include/asm-s390/pgtable.h | |||
@@ -104,41 +104,27 @@ extern char empty_zero_page[PAGE_SIZE]; | |||
104 | 104 | ||
105 | #ifndef __ASSEMBLY__ | 105 | #ifndef __ASSEMBLY__ |
106 | /* | 106 | /* |
107 | * Just any arbitrary offset to the start of the vmalloc VM area: the | 107 | * The vmalloc area will always be on the topmost area of the kernel |
108 | * current 8MB value just means that there will be a 8MB "hole" after the | 108 | * mapping. We reserve 96MB (31bit) / 1GB (64bit) for vmalloc, |
109 | * physical memory until the kernel virtual memory starts. That means that | 109 | * which should be enough for any sane case. |
110 | * any out-of-bounds memory accesses will hopefully be caught. | 110 | * By putting vmalloc at the top, we maximise the gap between physical |
111 | * The vmalloc() routines leaves a hole of 4kB between each vmalloced | 111 | * memory and vmalloc to catch misplaced memory accesses. As a side |
112 | * area for the same reason. ;) | 112 | * effect, this also makes sure that 64 bit module code cannot be used |
113 | * vmalloc area starts at 4GB to prevent syscall table entry exchanging | 113 | * as system call address. |
114 | * from modules. | ||
115 | */ | ||
116 | extern unsigned long vmalloc_end; | ||
117 | |||
118 | #ifdef CONFIG_64BIT | ||
119 | #define VMALLOC_ADDR (max(0x100000000UL, (unsigned long) high_memory)) | ||
120 | #else | ||
121 | #define VMALLOC_ADDR ((unsigned long) high_memory) | ||
122 | #endif | ||
123 | #define VMALLOC_OFFSET (8*1024*1024) | ||
124 | #define VMALLOC_START ((VMALLOC_ADDR + VMALLOC_OFFSET) & ~(VMALLOC_OFFSET-1)) | ||
125 | #define VMALLOC_END vmalloc_end | ||
126 | |||
127 | /* | ||
128 | * We need some free virtual space to be able to do vmalloc. | ||
129 | * VMALLOC_MIN_SIZE defines the minimum size of the vmalloc | ||
130 | * area. On a machine with 2GB memory we make sure that we | ||
131 | * have at least 128MB free space for vmalloc. On a machine | ||
132 | * with 4TB we make sure we have at least 128GB. | ||
133 | */ | 114 | */ |
134 | #ifndef __s390x__ | 115 | #ifndef __s390x__ |
135 | #define VMALLOC_MIN_SIZE 0x8000000UL | 116 | #define VMALLOC_START 0x78000000UL |
136 | #define VMALLOC_END_INIT 0x80000000UL | 117 | #define VMALLOC_END 0x7e000000UL |
118 | #define VMEM_MAP_MAX 0x80000000UL | ||
137 | #else /* __s390x__ */ | 119 | #else /* __s390x__ */ |
138 | #define VMALLOC_MIN_SIZE 0x2000000000UL | 120 | #define VMALLOC_START 0x3e000000000UL |
139 | #define VMALLOC_END_INIT 0x40000000000UL | 121 | #define VMALLOC_END 0x3e040000000UL |
122 | #define VMEM_MAP_MAX 0x40000000000UL | ||
140 | #endif /* __s390x__ */ | 123 | #endif /* __s390x__ */ |
141 | 124 | ||
125 | #define VMEM_MAP ((struct page *) VMALLOC_END) | ||
126 | #define VMEM_MAP_SIZE ((VMALLOC_START / PAGE_SIZE) * sizeof(struct page)) | ||
127 | |||
142 | /* | 128 | /* |
143 | * A 31 bit pagetable entry of S390 has following format: | 129 | * A 31 bit pagetable entry of S390 has following format: |
144 | * | PFRA | | OS | | 130 | * | PFRA | | OS | |