Adrian mentioned a few weeks ago that KCONFIG_ALLCONFIG is the way to go to ensure that things like allyes/allmod/allnoconfig work with a constrained set of symbols, with the implication that this holds true for randconfig as well. While allyes/mod/noconfigs do seem to work fine with KCONFIG_ALLCONFIG provisions, randconfig tramples all over the provided values at perhaps not surprisingly, random. Debugging this a bit, there seemed to be two issues: - SYMBOL_DEF and SYMBOL_DEF_USER overlap, which made def_sym->flags the same regardless of whether we came from an KCONFIG_ALLCONFIG path or not. - clobbering of the fixed value in conf_choice() by way of random() def assignment. While I don't pretend to have any idea what I'm doing in Kconfig, changing SYMBOL_DEF_USER to reuse the SYMBOL_DEF3 bit (and thereby separating it from SYMBOL_DEF) in addition to checking the def_sym flag before randomly assigning a new value ended up fixing things up. Signed-off-by: Paul Mundt <lethal@xxxxxxxxxxxx> --- scripts/kconfig/conf.c | 9 ++++++++- scripts/kconfig/expr.h | 3 +-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/scripts/kconfig/conf.c b/scripts/kconfig/conf.c index a38787a..61a61df 100644 --- a/scripts/kconfig/conf.c +++ b/scripts/kconfig/conf.c @@ -374,7 +374,14 @@ static int conf_choice(struct menu *menu) continue; break; case set_random: - def = (random() % cnt) + 1; + /* + * Defined symbols need to be honoured even in + * the randomization case, or else symbols set + * via the KCONFIG_ALLCONFIG path are clobbered. + * - PFM. + */ + if (!(def_sym->flags & SYMBOL_DEF)) + def = (random() % cnt) + 1; case set_default: case set_yes: case set_mod: diff --git a/scripts/kconfig/expr.h b/scripts/kconfig/expr.h index a195986..f5b4873 100644 --- a/scripts/kconfig/expr.h +++ b/scripts/kconfig/expr.h @@ -95,9 +95,8 @@ struct symbol { #define SYMBOL_CHECKED 0x2000 #define SYMBOL_WARNED 0x8000 #define SYMBOL_DEF 0x10000 -#define SYMBOL_DEF_USER 0x10000 #define SYMBOL_DEF_AUTO 0x20000 -#define SYMBOL_DEF3 0x40000 +#define SYMBOL_DEF_USER 0x40000 #define SYMBOL_DEF4 0x80000 #define SYMBOL_MAXLENGTH 256 - To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html