From 68cf9989a1fff78fe0700c051a202b6e2a7c9fe4 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Tue, 1 Feb 2022 12:17:34 +0100 Subject: [PATCH] Revert "ANDROID: Support CONFIG_CMDLINE_EXTEND" This reverts commit d9a2a3f2c2c41d0a550d8643aac683840f6e1843 which was not upstream as it is causing merge conflicts with 5.17-rc1. If this out-of-tree feature is still needed, it must be forward ported properly again. Bug: 120440972 Cc: Doug Anderson Cc: Colin Cross Cc: Amit Pundir Fixes: d9a2a3f2c2c4 ("ANDROID: of: Support CONFIG_CMDLINE_EXTEND config option") Signed-off-by: Greg Kroah-Hartman Change-Id: Id34ae0303eb943668418b9aab3f928a7d970ca97 --- arch/arm64/Kconfig | 6 --- arch/arm64/configs/gki_defconfig | 1 - arch/arm64/kernel/idreg-override.c | 5 +-- drivers/of/fdt.c | 72 ++++++++++-------------------- include/linux/of_fdt.h | 21 --------- 5 files changed, 25 insertions(+), 80 deletions(-) diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig index fd4b4f4c1da3..f6e333b59314 100644 --- a/arch/arm64/Kconfig +++ b/arch/arm64/Kconfig @@ -1989,12 +1989,6 @@ config CMDLINE_FROM_BOOTLOADER the boot loader doesn't provide any, the default kernel command string provided in CMDLINE will be used. -config CMDLINE_EXTEND - bool "Extend bootloader kernel arguments" - help - The command-line arguments provided by the boot loader will be - appended to the default kernel command string. - config CMDLINE_FORCE bool "Always use the default kernel command string" help diff --git a/arch/arm64/configs/gki_defconfig b/arch/arm64/configs/gki_defconfig index a1d7d4a8d609..c4db77fb35df 100644 --- a/arch/arm64/configs/gki_defconfig +++ b/arch/arm64/configs/gki_defconfig @@ -62,7 +62,6 @@ CONFIG_SETEND_EMULATION=y CONFIG_RANDOMIZE_BASE=y # CONFIG_RANDOMIZE_MODULE_REGION_FULL is not set CONFIG_CMDLINE="stack_depot_disable=on kasan.stacktrace=off cgroup_disable=pressure" -CONFIG_CMDLINE_EXTEND=y # CONFIG_DMI is not set CONFIG_PM_WAKELOCKS=y CONFIG_PM_WAKELOCKS_LIMIT=0 diff --git a/arch/arm64/kernel/idreg-override.c b/arch/arm64/kernel/idreg-override.c index c2b0bfe72839..d8e606fe3c21 100644 --- a/arch/arm64/kernel/idreg-override.c +++ b/arch/arm64/kernel/idreg-override.c @@ -214,11 +214,8 @@ static __init void parse_cmdline(void) { const u8 *prop = get_bootargs_cmdline(); - if (IS_ENABLED(CONFIG_CMDLINE_EXTEND) || - IS_ENABLED(CONFIG_CMDLINE_FORCE) || - !prop) { + if (IS_ENABLED(CONFIG_CMDLINE_FORCE) || !prop) __parse_cmdline(CONFIG_CMDLINE, true); - } if (!IS_ENABLED(CONFIG_CMDLINE_FORCE) && prop) __parse_cmdline(prop, true); diff --git a/drivers/of/fdt.c b/drivers/of/fdt.c index 41c144dfed2a..bdca35284ceb 100644 --- a/drivers/of/fdt.c +++ b/drivers/of/fdt.c @@ -1124,40 +1124,16 @@ int __init early_init_dt_scan_memory(unsigned long node, const char *uname, return 0; } -/* - * Convert configs to something easy to use in C code - */ -#if defined(CONFIG_CMDLINE_FORCE) -static const int overwrite_incoming_cmdline = 1; -static const int read_dt_cmdline; -static const int concat_cmdline; -#elif defined(CONFIG_CMDLINE_EXTEND) -static const int overwrite_incoming_cmdline; -static const int read_dt_cmdline = 1; -static const int concat_cmdline = 1; -#else /* CMDLINE_FROM_BOOTLOADER */ -static const int overwrite_incoming_cmdline; -static const int read_dt_cmdline = 1; -static const int concat_cmdline; -#endif - -#ifdef CONFIG_CMDLINE -static const char *config_cmdline = CONFIG_CMDLINE; -#else -static const char *config_cmdline = ""; -#endif - int __init early_init_dt_scan_chosen(unsigned long node, const char *uname, int depth, void *data) { - int l = 0; - const char *p = NULL; + int l; + const char *p; const void *rng_seed; - char *cmdline = data; pr_debug("search \"chosen\", depth: %d, uname: %s\n", depth, uname); - if (depth != 1 || !cmdline || + if (depth != 1 || !data || (strcmp(uname, "chosen") != 0 && strcmp(uname, "chosen@0") != 0)) return 0; @@ -1165,28 +1141,28 @@ int __init early_init_dt_scan_chosen(unsigned long node, const char *uname, early_init_dt_check_for_elfcorehdr(node); early_init_dt_check_for_usable_mem_range(node); - /* Put CONFIG_CMDLINE in if forced or if data had nothing in it to start */ - if (overwrite_incoming_cmdline || !cmdline[0]) - strlcpy(cmdline, config_cmdline, COMMAND_LINE_SIZE); + /* Retrieve command line */ + p = of_get_flat_dt_prop(node, "bootargs", &l); + if (p != NULL && l > 0) + strlcpy(data, p, min(l, COMMAND_LINE_SIZE)); - /* Retrieve command line unless forcing */ - if (read_dt_cmdline) - p = of_get_flat_dt_prop(node, "bootargs", &l); - - if (p != NULL && l > 0) { - if (concat_cmdline) { - int cmdline_len; - int copy_len; - strlcat(cmdline, " ", COMMAND_LINE_SIZE); - cmdline_len = strlen(cmdline); - copy_len = COMMAND_LINE_SIZE - cmdline_len - 1; - copy_len = min((int)l, copy_len); - strncpy(cmdline + cmdline_len, p, copy_len); - cmdline[cmdline_len + copy_len] = '\0'; - } else { - strlcpy(cmdline, p, min(l, COMMAND_LINE_SIZE)); - } - } + /* + * CONFIG_CMDLINE is meant to be a default in case nothing else + * managed to set the command line, unless CONFIG_CMDLINE_FORCE + * is set in which case we override whatever was found earlier. + */ +#ifdef CONFIG_CMDLINE +#if defined(CONFIG_CMDLINE_EXTEND) + strlcat(data, " ", COMMAND_LINE_SIZE); + strlcat(data, CONFIG_CMDLINE, COMMAND_LINE_SIZE); +#elif defined(CONFIG_CMDLINE_FORCE) + strlcpy(data, CONFIG_CMDLINE, COMMAND_LINE_SIZE); +#else + /* No arguments from boot loader, use kernel's cmdl*/ + if (!((char *)data)[0]) + strlcpy(data, CONFIG_CMDLINE, COMMAND_LINE_SIZE); +#endif +#endif /* CONFIG_CMDLINE */ pr_debug("Command line is: %s\n", (char *)data); diff --git a/include/linux/of_fdt.h b/include/linux/of_fdt.h index 7e0e2d8f9f8d..cf48983d3c86 100644 --- a/include/linux/of_fdt.h +++ b/include/linux/of_fdt.h @@ -58,27 +58,6 @@ extern int of_flat_dt_is_compatible(unsigned long node, const char *name); extern unsigned long of_get_flat_dt_root(void); extern uint32_t of_get_flat_dt_phandle(unsigned long node); -/* - * early_init_dt_scan_chosen - scan the device tree for ramdisk and bootargs - * - * The boot arguments will be placed into the memory pointed to by @data. - * That memory should be COMMAND_LINE_SIZE big and initialized to be a valid - * (possibly empty) string. Logic for what will be in @data after this - * function finishes: - * - * - CONFIG_CMDLINE_FORCE=true - * CONFIG_CMDLINE - * - CONFIG_CMDLINE_EXTEND=true, @data is non-empty string - * @data + dt bootargs (even if dt bootargs are empty) - * - CONFIG_CMDLINE_EXTEND=true, @data is empty string - * CONFIG_CMDLINE + dt bootargs (even if dt bootargs are empty) - * - CMDLINE_FROM_BOOTLOADER=true, dt bootargs=non-empty: - * dt bootargs - * - CMDLINE_FROM_BOOTLOADER=true, dt bootargs=empty, @data is non-empty string - * @data is left unchanged - * - CMDLINE_FROM_BOOTLOADER=true, dt bootargs=empty, @data is empty string - * CONFIG_CMDLINE (or "" if that's not defined) - */ extern int early_init_dt_scan_chosen(unsigned long node, const char *uname, int depth, void *data); extern int early_init_dt_scan_memory(unsigned long node, const char *uname,