On Tue, Nov 7, 2023 at 11:00 PM Nathan Chancellor <nathan@xxxxxxxxxx> wrote: > > On Sun, Nov 05, 2023 at 04:55:57PM +0900, Masahiro Yamada wrote: > > On Sun, Nov 5, 2023 at 7:27 AM Yoann Congal <yoann.congal@xxxxxxxx> wrote: > > > > > > Exit on error when asking for value and reading stdin returns an error > > > (mainly if it has reached EOF or is closed). > > > > > > This infinite loop happens in particular for hex/int configs without an > > > explicit default value. > > > > > > Previously, this case would loop: > > > * oldconfig prompts for the value but stdin has reached EOF > > > * It gets the global default value : an empty string > > > * This is not a valid hex/int value so it prompts again, hence the > > > infinite loop. > > > > > > This case happens with a configuration like this (a hex config without a > > > valid default value): > > > config TEST_KCONFIG > > > hex "Test KConfig" > > > # default 0x0 > > > > > > And using: > > > make oldconfig < /dev/null > > > > > > This was discovered when working on Yocto bug[0] on a downstream > > > kconfig user (U-boot) > > > > > > [0]: https://bugzilla.yoctoproject.org/show_bug.cgi?id=14136 > > > > > > CC: Brandon Maier <brandon.maier@xxxxxxxxxxx> > > > Signed-off-by: Yoann Congal <yoann.congal@xxxxxxxx> > > > > Applied to linux-kbuild. > > Thanks. > > For what it's worth, this change breaks our continuous integration [1] > because tuxmake explicitly uses /dev/null as stdin to make for > non-interactive commands (I think it does this as basically the > equivalent of "yes '' | make" in Python), so the error will always > occur. > > Before: > > $ curl -LSso .config https://gitlab.archlinux.org/archlinux/packaging/packages/linux/-/raw/main/config > > # Same as 'make < /dev/null' but still > $ python3 -c "import subprocess; subprocess.run(['make', '-j128'], stdin=subprocess.DEVNULL)" > SYNC include/config/auto.conf > HOSTCC scripts/basic/fixdep > HOSTCC scripts/kconfig/conf.o > HOSTCC scripts/kconfig/confdata.o > HOSTCC scripts/kconfig/expr.o > LEX scripts/kconfig/lexer.lex.c > YACC scripts/kconfig/parser.tab.[ch] > HOSTCC scripts/kconfig/menu.o > HOSTCC scripts/kconfig/preprocess.o > HOSTCC scripts/kconfig/symbol.o > HOSTCC scripts/kconfig/util.o > HOSTCC scripts/kconfig/lexer.lex.o > HOSTCC scripts/kconfig/parser.tab.o > HOSTLD scripts/kconfig/conf > * > * Restart config... > * > ... > Error in reading or end of file. > > GEN arch/x86/include/generated/asm/orc_hash.h > WRAP arch/x86/include/generated/uapi/asm/bpf_perf_event.h > WRAP arch/x86/include/generated/uapi/asm/errno.h > ... > > After: > > $ curl -LSso .config https://gitlab.archlinux.org/archlinux/packaging/packages/linux/-/raw/main/config > > $ python3 -c "import subprocess; subprocess.run(['make', '-j128'], stdin=subprocess.DEVNULL)" > SYNC include/config/auto.conf > HOSTCC scripts/basic/fixdep > HOSTCC scripts/kconfig/conf.o > HOSTCC scripts/kconfig/confdata.o > HOSTCC scripts/kconfig/expr.o > LEX scripts/kconfig/lexer.lex.c > YACC scripts/kconfig/parser.tab.[ch] > HOSTCC scripts/kconfig/menu.o > HOSTCC scripts/kconfig/preprocess.o > HOSTCC scripts/kconfig/symbol.o > HOSTCC scripts/kconfig/util.o > HOSTCC scripts/kconfig/lexer.lex.o > HOSTCC scripts/kconfig/parser.tab.o > HOSTLD scripts/kconfig/conf > * > * Restart config... > * > ... > Error in reading or end of file. > make[3]: *** [scripts/kconfig/Makefile:77: syncconfig] Error 1 > ... > > We have been doing this for some time and never run across an infinite > loop in syncconfig. Can this be improved? In Linux, most int/hex entries have a default, hence there is no practical issue. I will drop this for now. I will send an alternative solution. -- Best Regards Masahiro Yamada