| From 5c7426336e9a3df6682ed3ded767f16d3ea49c92 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Sat, 8 Feb 2025 03:41:55 +0900 |
| Subject: kconfig: do not clear SYMBOL_VALID when reading |
| include/config/auto.conf |
| |
| From: Masahiro Yamada <masahiroy@kernel.org> |
| |
| [ Upstream commit 226ac19c217f24f0927d0a73cf9ee613971a188d ] |
| |
| When conf_read_simple() is called with S_DEF_AUTO, it is meant to read |
| previous symbol values from include/config/auto.conf to determine which |
| include/config/* files should be touched. |
| |
| This process should not modify the current symbol status in any way. |
| However, conf_touch_deps() currently invalidates all symbol values and |
| recalculates them, which is totally unneeded. |
| |
| Signed-off-by: Masahiro Yamada <masahiroy@kernel.org> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| scripts/kconfig/confdata.c | 19 ++++++++++++------- |
| 1 file changed, 12 insertions(+), 7 deletions(-) |
| |
| diff --git a/scripts/kconfig/confdata.c b/scripts/kconfig/confdata.c |
| index 3b55e7a4131d9..ac95661a1c9dd 100644 |
| --- a/scripts/kconfig/confdata.c |
| +++ b/scripts/kconfig/confdata.c |
| @@ -385,7 +385,7 @@ int conf_read_simple(const char *name, int def) |
| |
| def_flags = SYMBOL_DEF << def; |
| for_all_symbols(sym) { |
| - sym->flags &= ~(def_flags|SYMBOL_VALID); |
| + sym->flags &= ~def_flags; |
| switch (sym->type) { |
| case S_INT: |
| case S_HEX: |
| @@ -398,7 +398,11 @@ int conf_read_simple(const char *name, int def) |
| } |
| } |
| |
| - expr_invalidate_all(); |
| + if (def == S_DEF_USER) { |
| + for_all_symbols(sym) |
| + sym->flags &= ~SYMBOL_VALID; |
| + expr_invalidate_all(); |
| + } |
| |
| while (getline_stripped(&line, &line_asize, in) != -1) { |
| struct menu *choice; |
| @@ -464,6 +468,9 @@ int conf_read_simple(const char *name, int def) |
| if (conf_set_sym_val(sym, def, def_flags, val)) |
| continue; |
| |
| + if (def != S_DEF_USER) |
| + continue; |
| + |
| /* |
| * If this is a choice member, give it the highest priority. |
| * If conflicting CONFIG options are given from an input file, |
| @@ -967,10 +974,8 @@ static int conf_touch_deps(void) |
| depfile_path[depfile_prefix_len] = 0; |
| |
| conf_read_simple(name, S_DEF_AUTO); |
| - sym_calc_value(modules_sym); |
| |
| for_all_symbols(sym) { |
| - sym_calc_value(sym); |
| if (sym_is_choice(sym)) |
| continue; |
| if (sym->flags & SYMBOL_WRITE) { |
| @@ -1084,12 +1089,12 @@ int conf_write_autoconf(int overwrite) |
| if (ret) |
| return -1; |
| |
| - if (conf_touch_deps()) |
| - return 1; |
| - |
| for_all_symbols(sym) |
| sym_calc_value(sym); |
| |
| + if (conf_touch_deps()) |
| + return 1; |
| + |
| ret = __conf_write_autoconf(conf_get_autoheader_name(), |
| print_symbol_for_c, |
| &comment_style_c); |
| -- |
| 2.39.5 |
| |