mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-01 06:33:07 +00:00
s390/boot: always align vmalloc area on segment boundary
[ Upstream commit 65f8780e2d
]
The size of vmalloc area depends from various factors
on boot and could be set to:
1. Default size as determined by VMALLOC_DEFAULT_SIZE macro;
2. One half of the virtual address space not occupied by
modules and fixed mappings;
3. The size provided by user with vmalloc= kernel command
line parameter;
In cases [1] and [2] the vmalloc area base address is aligned
on Region3 table type boundary, while in case [3] in might get
aligned on page boundary.
Limit the waste of page tables and always align vmalloc area
size and base address on segment boundary.
Acked-by: Heiko Carstens <hca@linux.ibm.com>
Signed-off-by: Alexander Gordeev <agordeev@linux.ibm.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
5a66601391
commit
b5a35d12e7
2 changed files with 3 additions and 2 deletions
|
@ -274,7 +274,7 @@ void parse_boot_command_line(void)
|
|||
memory_limit = round_down(memparse(val, NULL), PAGE_SIZE);
|
||||
|
||||
if (!strcmp(param, "vmalloc") && val) {
|
||||
vmalloc_size = round_up(memparse(val, NULL), PAGE_SIZE);
|
||||
vmalloc_size = round_up(memparse(val, NULL), _SEGMENT_SIZE);
|
||||
vmalloc_size_set = 1;
|
||||
}
|
||||
|
||||
|
|
|
@ -255,7 +255,8 @@ static unsigned long setup_kernel_memory_layout(void)
|
|||
VMALLOC_END = MODULES_VADDR;
|
||||
|
||||
/* allow vmalloc area to occupy up to about 1/2 of the rest virtual space left */
|
||||
vmalloc_size = min(vmalloc_size, round_down(VMALLOC_END / 2, _REGION3_SIZE));
|
||||
vsize = round_down(VMALLOC_END / 2, _SEGMENT_SIZE);
|
||||
vmalloc_size = min(vmalloc_size, vsize);
|
||||
VMALLOC_START = VMALLOC_END - vmalloc_size;
|
||||
|
||||
/* split remaining virtual space between 1:1 mapping & vmemmap array */
|
||||
|
|
Loading…
Reference in a new issue