diff options
Diffstat (limited to 'init/main.c')
| -rw-r--r-- | init/main.c | 37 | 
1 files changed, 30 insertions, 7 deletions
diff --git a/init/main.c b/init/main.c index 5dcf5274c09c..206acdde51f5 100644 --- a/init/main.c +++ b/init/main.c @@ -327,7 +327,7 @@ static int __init xbc_snprint_cmdline(char *buf, size_t size,  {  	struct xbc_node *knode, *vnode;  	char *end = buf + size; -	const char *val; +	const char *val, *q;  	int ret;  	xbc_node_for_each_key_value(root, knode, val) { @@ -345,8 +345,14 @@ static int __init xbc_snprint_cmdline(char *buf, size_t size,  			continue;  		}  		xbc_array_for_each_value(vnode, val) { -			ret = snprintf(buf, rest(buf, end), "%s=\"%s\" ", -				       xbc_namebuf, val); +			/* +			 * For prettier and more readable /proc/cmdline, only +			 * quote the value when necessary, i.e. when it contains +			 * whitespace. +			 */ +			q = strpbrk(val, " \t\r\n") ? "\"" : ""; +			ret = snprintf(buf, rest(buf, end), "%s=%s%s%s ", +				       xbc_namebuf, q, val, q);  			if (ret < 0)  				return ret;  			buf += ret; @@ -627,14 +633,16 @@ static void __init setup_command_line(char *command_line)  	if (extra_command_line)  		xlen = strlen(extra_command_line); -	if (extra_init_args) +	if (extra_init_args) { +		extra_init_args = strim(extra_init_args); /* remove trailing space */  		ilen = strlen(extra_init_args) + 4; /* for " -- " */ +	} -	len = xlen + strlen(boot_command_line) + 1; +	len = xlen + strlen(boot_command_line) + ilen + 1; -	saved_command_line = memblock_alloc(len + ilen, SMP_CACHE_BYTES); +	saved_command_line = memblock_alloc(len, SMP_CACHE_BYTES);  	if (!saved_command_line) -		panic("%s: Failed to allocate %zu bytes\n", __func__, len + ilen); +		panic("%s: Failed to allocate %zu bytes\n", __func__, len);  	len = xlen + strlen(command_line) + 1; @@ -878,6 +886,19 @@ static void __init print_unknown_bootoptions(void)  	memblock_free(unknown_options, len);  } +static void __init early_numa_node_init(void) +{ +#ifdef CONFIG_USE_PERCPU_NUMA_NODE_ID +#ifndef cpu_to_node +	int cpu; + +	/* The early_cpu_to_node() should be ready here. */ +	for_each_possible_cpu(cpu) +		set_cpu_numa_node(cpu, early_cpu_to_node(cpu)); +#endif +#endif +} +  asmlinkage __visible __init __no_sanitize_address __noreturn __no_stack_protector  void start_kernel(void)  { @@ -908,6 +929,7 @@ void start_kernel(void)  	setup_nr_cpu_ids();  	setup_per_cpu_areas();  	smp_prepare_boot_cpu();	/* arch-specific boot-cpu hooks */ +	early_numa_node_init();  	boot_cpu_hotplug_init();  	pr_notice("Kernel command line: %s\n", saved_command_line); @@ -1415,6 +1437,7 @@ static void mark_readonly(void)  		 * insecure pages which are W+X.  		 */  		flush_module_init_free_work(); +		jump_label_init_ro();  		mark_rodata_ro();  		debug_checkwx();  		rodata_test();  |