On 13/05/2024 11.03, Yoann Congal wrote: > > > Le 13/05/2024 à 10:28, Rasmus Villemoes a écrit : >> On 07/05/2024 19.23, Tom Rini wrote: >>> On Tue, May 07, 2024 at 09:17:46AM +0200, Yoann Congal wrote:
>>>> But, my more general use case is the Yocto dev trying to change the U-Boot >>>> (or any kconfig based software) config and accidentally trigger this. >>>> In Yocto, what they will see is a do_configure task taking a very long >>>> time but they won't see the looping logs the detect the problem (This is >>>> caught later by filing the RAM and the build process is killed by OOM, or >>>> the disk run out of space filed multi-GB log files). >>>> >>>> I'm sadly aware that defining a default value for this kind of config >>>> (fixed addresses) is not really sensible but the build time infinite loop >>>> is not good either. >>> >>> Exactly, but to me it's worse to cover up the build issue and introduce >>> a runtime issue instead. Something builds but then crashes at run time >>> is worse to me than builds fail / get stuck. Using your example, >>> CMD_PSTORE_MEM_ADDR depends on CMD_PSTORE and so if someone enables >>> CMD_PSTORE in a config fragment but doesn't define the address, the >>> build should not complete. Using 0x0 means that oops, now it fails to >>> work and might not be obvious why either. >> >> I agree with Tom. Yes, we've also hit those yocto failures with a >> multi-GB do_configure log file, and that's pretty annoying when one just >> starts a build cooking over night and then the next day one's laptop has >> a filled disk. So clearly there is/was a problem to solve. >> >> However, blindly adding a "default default" of 0 is not the right thing >> to do. It seems much better that, when there's no configured default and >> kconfig gets EOF when asking the user for input (as in the 'make >> oldconfig < /dev/null' case), kconfig should exit with an error >> explicitly saying "no value given for CONFIG_XYZ which also doesn't have >> a default value". That stops the build, and leaves precisely an >> indication what the problem is. Then the developer must either provide a >> value for CONFIG_XYZ in the fragments, or send a patch to add a >> reasonable default when that is at all possible (not so for e.g. PSTORE). > > > Agreed, that was the spirit of my first attempt at a fix[0] which was then > made broader[1] and finally rejected from "-next" because it triggered a > build failure[2]. > > I still think my first approach (exit with an error instead of starting the > infinite loop) was the right one (at least for U-Boot). The problem is that > this approach was rejected by the Linux kconfig maintainer (Masahiro Yamada > CC'd). I'm willing to clean it up for U-boot but this would diverge from > linux kconfig... Is that acceptable? > > [0]: > https://lore.kernel.org/all/20231031111647.111093-1-yoann.con...@smile.fr/ > [1]: > https://lore.kernel.org/all/20231104222715.3967791-1-yoann.con...@smile.fr/ > [2]: > https://lore.kernel.org/all/20231107210004.GA2065849@dev-arch.thelio-3990X/ Thanks for the pointers to the previous discussions. I see that we arrived at more or less the same patch in at least one of your versions. Masahiro, can you reconsider that "default default". Even if "most int/hex items" in linux usually have a default, one could still hit cases where they don't (usually some arch/soc/board specific physical address, e.g. for an early console, but naturally a bootloader is more prone to have those kinds of kconfig options). And if it really is not a problem for linux itself, the "default default" is a no-op for linux, but does cause unwanted behaviour for downstream users of kconfig. In https://lore.kernel.org/lkml/CAK7LNAS8a=8n9r7kqrltppkwqxg1d1sd0wjj8pqhoxhxxns...@mail.gmail.com/, which was a reply to a patch almost identical to the one I arrived at, you said It is strange (and consistent) to bail out only for particular types. [assume you meant inconsistent], but AFAICT, bool/tristate values always have (and always have had) a default, so this isn't really inconsistent as the bail out is only applicable to int/hex types (and maybe string? dunno if they default default to ""). Rasmus