[U-Boot] [PATCH v2 1/6] kconfig: re-sync with Linux 4.17-rc4

Masahiro Yamada yamada.masahiro at socionext.com
Wed May 16 01:59:49 UTC 2018


2018-05-13 2:13 GMT+09:00 Eugeniu Rosca <roscaeugeniu at gmail.com>:
> Align Kconfig to Linux 4.17-rc4 with minimal impact on non-kconfig files.
>
> Previous Kconfig sync was done by commit bf7ab1e70fd762 ("kconfig:
> re-sync with Linux 4.10") and it achieved almost perfect alignment with
> a few (intended) exceptions, caused by below U-boot commits:
>
> [A] v2015.04 5f9eb2207500 ("kbuild: remove scripts/multiconfig.sh")
> [B] v2015.07 20c20826efab ("Kconfig: Enable usage of escape char '\' in string values")
> [C] v2016.01 da58dec86616 ("Various Makefiles: Add SPDX-License-Identifier tags")
> [D] v2016.03 5b8031ccb4ed ("Add more SPDX-License-Identifier tags")
> [E] v2016.03 192bc6948b02 ("Fix GCC format-security errors and convert sprintfs.")
>
> Here is the list of Kconfig commits which followed the v4.10 alignment:
>
> [F] v2018.01 0931ed3c0d0f ("kconfig/symbol.c: use correct pointer type argument for sizeof")
> [G] v2018.03 1414e09b4f25 ("kconfig: revert change that was not needed for -Wformat-security")
> [H] v2018.05 83d290c56fab ("SPDX: Convert all of our single license tags to Linux Kernel style")
>
> Commit [F] was subsequently applied to Linux kernel as commit [I]
> with the same patch id, so it won't contribute to further misalignment.
>
> [I] v4.15-rc1 88127dae6ed9 ("kconfig/symbol.c: use correct pointer type argument for sizeof")
>
> Commit [G] is a Kconfig-specific revert of commit [E].
> Commit [H] relocated and reformatted the license doing no functional change.
>
> In summary, the only functional change that makes U-boot Kconfig
> diverge from Linux Kconfig is commit [B]. After a brief analysis,
> the purpose of [B] seems to be placing "\n" literals in string symbols
> like CONFIG_AUTOBOOT_PROMPT="autoboot in %d seconds\n" in order to pass
> them directly to printf and expect correct output at runtime. Currently,
> Linux doesn't seem to have this requirement, so for the moment [B] looks
> like a U-boot specific feature/fix. From point of view of further Kconfig
> alignment and backporting efforts, it is highly desired that commits
> like [B] are propagated to Linux and any Kconfig fixes/features are
> contributed to Linux kernel first. This specific Kconfig re-sync just
> keeps [B] in place.
>
> Contrary to 4.10 Kconfig re-sync (which achieves zero non-kconfig
> changes), 4.17-rc4 re-sync does some amount of updates in Kbuild
> (striving to keep them at minimum), due to a number of reasons:
> * Kbuild is affected by the removal of Kconfig "*shipped" files and now
>   requires flex and bison pre-installed on the host.
> * PYTHON{2,3} variables are defined in top-level Makefile as
>   prerequisite for running the newly developed Kconfig unit tests.
> * silentoldconfig becomes an "internal implementation detail" deprecated
>   for external use, being renamed to syncconfig.
>
> The exact non-kconfig files touched by this commit are:
>
> $ git show --format="" --stat -- ':!scripts/kconfig'
>  .gitignore             |  2 ++
>  Makefile               |  9 +++++++--
>  scripts/Makefile.build | 11 +++++++++++
>  scripts/Makefile.lib   | 41 ++++++++++++-----------------------------
>
> The imported Linux commits touching the above files are:
>
> c054be10ffdbd5   ("remove gperf left-overs from build system")
> 73a4f6dbe70a1b   ("kbuild: add LEX and YACC variables")
> 033dba2ec06c47   ("kbuild: prepare to remove C files pre-generated by flex and bison")
> eea199b445f64c   ("kbuild: remove unnecessary LEX_PREFIX and YACC_PREFIX")
> e71de5ee08dcb0   ("kbuild: remove remaining use of undefined YACC_PREFIX")
> d59fbbd09d5d6b   ("kbuild: replace hardcoded bison in cmd_bison_h with $(YACC)")
> 911a91c39cabcb H ("kconfig: rename silentoldconfig to syncconfig")
> 59889300274569   (".gitignore: move *.lex.c *.tab.[ch] patterns to the top-level .gitignore")
> 9a8dfb394c0467   ("kbuild: clean up *.lex.c and *.tab.[ch] patterns from top-level Makefile")
> 833e622459432e H ("genksyms: generate lexer and parser during build instead of shipping")
> b23d1a241f4eb4 H ("kbuild: add %.lex.c and %.tab.[ch] to 'targets' automatically")
> e9781b52d4e0e3 H ("kbuild: add PYTHON2 and PYTHON3 variables")
>
> The commits marked with 'H' are assessed as "hard" (build will fail)
> prerequisites and the rest of them are assessed as "soft" prerequisites
> for the re-sync. In spite of relatively high number of non-H commits,
> they belong to this Kconfig update topic-wise and decrease the number of
> cherry pick conflicts for many commits in this series. Additional effort
> can be put in eliminating the soft prerequisites, if really needed.
>
> The commits which contributed to this Kconfig re-sync are listed below.
> Whenever a conflict resolution has been performed (mostly by hand, but
> sometimes automatically by git), it is revealed by the '!' sign in the
> second column, which means a patch id mismatch between Linux and U-boot
> commits:
>
> 9be3213b14d44f   ("gconfig: remove misleading parentheses around a condition")
> ff85a1a80e0034   ("kconfig: Check for libncurses before menuconfig")
> ad8181060788c8   ("kconfig: fix sparse warnings in nconfig")
> cb77f0d623ff33 ! ("scripts: Switch to more portable Perl shebang")
> bb3290d91695bb ! ("Remove gperf usage from toolchain")
> c054be10ffdbd5   ("remove gperf left-overs from build system")
> b24413180f5600 ! ("License cleanup: add SPDX GPL-2.0 license identifier to files with no license")
> 9059a3493efea6 ! ("kconfig: fix relational operators for bool and tristate symbols")
> 2c37e08464a850   ("kconfig: Warn if choice default is not in choice")
> 33ca1a24866373   ("kconfig: Document the 'menu' struct")
> 52aede4ba5efd1   ("kconfig: Document the 'symbol' struct")
> c873443430ebd1   ("kconfig: Sync zconf.y with zconf.tab.c_shipped")
> 9a826842ff2fbd   ("kconfig: Rename menu_check_dep() to rewrite_m()")
> fa8cedaef814ce   ("kconfig: Clarify expression rewriting")
> f77850d3fe0c96   ("kconfig: Clean up modules handling and fix crash")
> e3b03bf29d6b99   ("kconfig: display recursive dependency resolution hint just once")
> 73a4f6dbe70a1b ! ("kbuild: add LEX and YACC variables")
> 033dba2ec06c47 ! ("kbuild: prepare to remove C files pre-generated by flex and bison")
> 29c833061c1d8c   ("kconfig: generate lexer and parser during build instead of shipping")
> 26e47a3c11a25c   ("kconfig: Don't leak symbol names during parsing")
> 24161a6711c945   ("kconfig: Don't leak 'source' filenames during parsing")
> bc28fe1d5ede88   ("kconfig: Don't leak 'option' arguments during parsing")
> 0724a7c32a54e3   ("kconfig: Don't leak main menus during parsing")
> ae7440ef0c8013   ("kconfig: Fix automatic menu creation mem leak")
> 5b1374b3b3c2fc   ("kconfig: Fix expr_free() E_NOT leak")
> 7cf33f88e29410   ("kconfig: Fix choice symbol expression leak")
> 05cccce580456d   ("kconfig: Document automatic submenu creation code")
> 0735f7e5def2ab   ("kconfig: Document important expression functions")
> df60f4b92d3d0b   ("kconfig: Remove menu_end_entry()")
> b92d804a51796b   ("kconfig: drop 'boolean' keyword")
> 6479f327dea60d   ("kconfig: Warn if there is more than one help text")
> 52e58a3caeba5d   ("kconfig: make input_mode static")
> 5a3dc717b3c785   ("kconfig: make xfgets() really static")
> 84dd95d4f87a0d   ("kconfig: make conf_unsaved a local variable of conf_read()")
> 765f4cdef6f80d   ("kconfig: use default 'yy' prefix for lexer and parser")
> eea199b445f64c   ("kbuild: remove unnecessary LEX_PREFIX and YACC_PREFIX")
> e71de5ee08dcb0   ("kbuild: remove remaining use of undefined YACC_PREFIX")
> d59fbbd09d5d6b ! ("kbuild: replace hardcoded bison in cmd_bison_h with $(YACC)")
> 3e41ba05b6d60c   ("kconfig: Document SYMBOL_OPTIONAL logic")
> d3465af60f4471   ("kconfig: Clarify choice dependency propagation")
> 9d1a9e8bc18bea   ("kconfig: Document 'if' flattening logic")
> b53688014e3325   ("kconfig: Clarify menu and 'if' dependency propagation")
> d0fd0428ecf04b   ("kconfig: fix make xconfig when gettext is missing")
> 312ee68752faaa   ("kconfig: announce removal of oldnoconfig if used")
> 1ccb27143360bd   ("kconfig: make "Selected by:" and "Implied by:" readable")
> cedd55d49dee94 ! ("kconfig: Remove silentoldconfig from help and docs; fix kconfig/conf's help")
> 1b9eda2e4892cb   ("kconfig: Warn if help text is blank")
> cb67ab2cd2b8ab   ("kconfig: do not write choice values when their dependency becomes n")
> 4f208f392103e8   ("kconfig: show '?' prompt even if no help text is available")
> cd58a91def2acc   ("kconfig: remove 'config*' pattern from .gitignnore")
> d2a04648a5dbc3   ("kconfig: remove check_stdin()")
> f3ff6fb5db68bc   ("kconfig: echo stdin to stdout if either is redirected")
> 9e3e10c725360b   ("kconfig: send error messages to stderr")
> d717f24d8c6808   ("kconfig: add xrealloc() helper")
> 523ca58b7db2e3   ("kconfig: remove const qualifier from sym_expand_string_value()")
> cd81fc82b93fa4   ("kconfig: add xstrdup() helper")
> f4bc1eefc1608e   ("kconfig: set SYMBOL_AUTO to the symbol marked with defconfig_list")
> bf0bbdcf100322   ("kconfig: Don't leak choice names during parsing")
> 1a90ce36c6eff6   ("kconfig: Update ncurses package names for menuconfig")
> 5ae6fcc4bb82bd   ("kconfig: fix line number in recursive inclusion error message")
> 07a422bb213adb ! ("kbuild: restore autoksyms.h touch to the top Makefile")
> 9a47ceec543bfb   ("kconfig: clean-up reverse dependency help implementation")
> d9119b5925a03b   ("kconfig: Print reverse dependencies in groups")
> f467c5640c29ad   ("kconfig: only write '# CONFIG_FOO is not set' for visible symbols")
> 59a80b5e892dde   ("kconfig: do not call check_conf() for olddefconfig")
> 4bb3a5b085cd6f   ("kconfig: remove unneeded input_mode test in conf()")
> 99f0b6578bab44   ("kconfig: remove redundant input_mode test for check_conf() loop")
> 2aad9b89621386   ("kconfig: hide irrelevant sub-menus for oldconfig")
> 81d2bc2273052e   ("kconfig: invoke oldconfig instead of silentoldconfig from local*config")
> 911a91c39cabcb ! ("kconfig: rename silentoldconfig to syncconfig")
> 2a61625835c7c8 ! ("kconfig: remove redundant streamline_config.pl prerequisite")
> 022a4bf6b59dfd   ("kconfig: tests: add framework for Kconfig unit testing")
> 1903c511905984   ("kconfig: tests: add basic choice tests")
> 49ac3c0c3aa3b7   ("kconfig: tests: test automatic submenu creation")
> b76960c0f6b25d   ("kconfig: tests: test if new symbols in choice are asked")
> 930c429a656fdb   ("kconfig: tests: check unneeded "is not set" with unmet dependency")
> ee236610653ede   ("kconfig: tests: check visibility of tristate choice values in y choice")
> beaaddb625400e   ("kconfig: tests: test defconfig when two choices interact")
> 3e4888c2e3d77d   ("kconfig: tests: test randconfig for choice in choice")
> 29c434f367ea7b   ("kconfig: tests: test if recursive dependencies are detected")
> e2c75e7667c737   ("kconfig: tests: test if recursive inclusion is detected")
> f622f827958162   ("kconfig: warn unmet direct dependency of tristate symbols selected by y")
> f8f69dc0b4e070   ("kconfig: make unmet dependency warnings readable")
> 26561514cc9def   ("kconfig: do not include both curses.h and ncurses.h for nconfig")
> 32a94b8b0c3e5a   ("kconfig: remove duplicated file name and lineno of recursive inclusion")
> 379a8eb8eb1a55   ("kconfig: detect recursive inclusion earlier")
> 18492685e479fd   ("kconfig: use yylineno option instead of manual lineno increments")
> 59889300274569 ! (".gitignore: move *.lex.c *.tab.[ch] patterns to the top-level .gitignore")
> 9a8dfb394c0467 ! ("kbuild: clean up *.lex.c and *.tab.[ch] patterns from top-level Makefile")
> 833e622459432e ! ("genksyms: generate lexer and parser during build instead of shipping")
> b23d1a241f4eb4 ! ("kbuild: add %.lex.c and %.tab.[ch] to 'targets' automatically")
> 17baab68d337a0   ("kconfig: extend output of 'listnewconfig'")
> e9781b52d4e0e3 ! ("kbuild: add PYTHON2 and PYTHON3 variables")
>
> The current Kconfig update generates below build-time warnings:
>   YACC    scripts/dtc/dtc-parser.tab.h
> scripts/dtc/dtc-parser.y: warning: 3 shift/reduce conflicts [-Wconflicts-sr]
>   YACC    scripts/dtc/dtc-parser.tab.c
> scripts/dtc/dtc-parser.y: warning: 3 shift/reduce conflicts [-Wconflicts-sr]
>
> This seems to happen because the Kbuild updates apparently didn't make
> room for both "*shipped"-based builds and flex/bison-based builds. A
> similar problem has been reported for genksyms parser in v4.17-rc1
> commit 833e622459432e ("genksyms: generate lexer and parser during build
> instead of shipping"). I have figured out empirically that the warnings
> are healed after updating the in-tree U-boot DTC to upstream v1.4.6-9,
> same as done by Linux v4.17-rc1 commit 9130ba88464032 ("scripts/dtc:
> Update to upstream version v1.4.6-9-gaadd0b65c987"). Whether fixing the
> DTC-related yacc warnings should be done together with the Kconfig
> re-sync, I would like to hear from community.
>
> My testing was limited to:
> - make defconfig all
> - make ARCH=arm CROSS_COMPILE=aarch64-linux-gnu- r8a7795_ulcb_defconfig all
> - comparing .config before and after the re-sync
> - running the newly imported Kconfig unit tests as seen below:
>
> $ make testconfig
>
> ============================= test session starts =============================
> scripts/kconfig/tests/auto_submenu/__init__.py::test PASSED             [  7%]
> scripts/kconfig/tests/choice/__init__.py::test_oldask0 PASSED           [ 14%]
> scripts/kconfig/tests/choice/__init__.py::test_oldask1 PASSED           [ 21%]
> scripts/kconfig/tests/choice/__init__.py::test_allyes PASSED            [ 28%]
> scripts/kconfig/tests/choice/__init__.py::test_allmod PASSED            [ 35%]
> scripts/kconfig/tests/choice/__init__.py::test_allno PASSED             [ 42%]
> scripts/kconfig/tests/choice/__init__.py::test_alldef PASSED            [ 50%]
> scripts/kconfig/tests/choice_value_with_m_dep/__init__.py::test PASSED  [ 57%]
> scripts/kconfig/tests/err_recursive_inc/__init__.py::test PASSED        [ 64%]
> scripts/kconfig/tests/inter_choice/__init__.py::test PASSED             [ 71%]
> scripts/kconfig/tests/new_choice_with_dep/__init__.py::test PASSED      [ 78%]
> scripts/kconfig/tests/no_write_if_dep_unmet/__init__.py::test PASSED    [ 85%]
> scripts/kconfig/tests/rand_nested_choice/__init__.py::test PASSED       [ 92%]
> scripts/kconfig/tests/warn_recursive_dep/__init__.py::test PASSED       [100%]
> ========================== 14 passed in 0.34 seconds ==========================
>
> Reviewed-by: Masahiro Yamada <yamada.masahiro at socionext.com>
> Signed-off-by: Eugeniu Rosca <erosca at de.adit-jv.com>
> ---
>
> v1->v2:
> * Re-picked v4.16-rc1 commit cedd55d49dee ("kconfig: Remove
>   silentoldconfig from help and docs; fix kconfig/conf's help") with
>   correct conflict resolution in scripts/kconfig/Makefile.
> * Added: Reviewed-by: Masahiro Yamada <yamada.masahiro at socionext.com
>


Reminder of Tom:

Patchwork is so confused that
it inserted Petr's Tested-by tag to a weird place.
If you take this patch from Patchwork,
please adjust the location of the tag.


-- 
Best Regards
Masahiro Yamada


More information about the U-Boot mailing list