Commit 90178c19 authored by Heiko Carstens's avatar Heiko Carstens

s390/mm: let vmalloc area size depend on physical memory size

To make sure that the vmalloc area size is for almost all cases large
enough let it depend on the (potential) physical memory size. There is
still the possibility to override this with the vmalloc kernel command
line parameter.
Reviewed-by: default avatarChristian Borntraeger <borntraeger@de.ibm.com>
Reviewed-by: default avatarClaudio Imbrenda <imbrenda@linux.ibm.com>
Reviewed-by: default avatarVasily Gorbik <gor@linux.ibm.com>
Signed-off-by: default avatarHeiko Carstens <hca@linux.ibm.com>
parent fc67c880
......@@ -14,6 +14,7 @@ void print_pgm_check_info(void);
unsigned long get_random_base(unsigned long safe_addr);
extern int kaslr_enabled;
extern int vmalloc_size_set;
extern const char kernel_version[];
unsigned long read_ipl_report(unsigned long safe_offset);
......
......@@ -21,6 +21,7 @@ unsigned long __bootdata(memory_end);
int __bootdata(memory_end_set);
int __bootdata(noexec_disabled);
int vmalloc_size_set;
int kaslr_enabled;
static inline int __diag308(unsigned long subcode, void *addr)
......@@ -242,8 +243,10 @@ void parse_boot_command_line(void)
memory_end_set = 1;
}
if (!strcmp(param, "vmalloc") && val)
if (!strcmp(param, "vmalloc") && val) {
vmalloc_size = round_up(memparse(val, NULL), PAGE_SIZE);
vmalloc_size_set = 1;
}
if (!strcmp(param, "dfltcc") && val) {
if (!strcmp(val, "off"))
......
......@@ -126,6 +126,21 @@ static void clear_bss_section(void)
memset((void *)vmlinux.default_lma + vmlinux.image_size, 0, vmlinux.bss_size);
}
/*
* Set vmalloc area size to an 8th of (potential) physical memory
* size, unless size has been set by kernel command line parameter.
*/
static void setup_vmalloc_size(void)
{
unsigned long size;
if (vmalloc_size_set)
return;
size = (memory_end ?: max_physmem_end) >> 3;
size = round_up(size, _SEGMENT_SIZE);
vmalloc_size = max(size, vmalloc_size);
}
void startup_kernel(void)
{
unsigned long random_lma;
......@@ -142,6 +157,7 @@ void startup_kernel(void)
parse_boot_command_line();
setup_memory_end();
detect_memory();
setup_vmalloc_size();
random_lma = __kaslr_offset = 0;
if (IS_ENABLED(CONFIG_RANDOMIZE_BASE) && kaslr_enabled) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment