#
77a92660 |
| 03-Jun-2024 |
Masahiro Yamada <masahiroy@kernel.org> |
kconfig: remove wrong expr_trans_bool()
expr_trans_bool() performs an incorrect transformation.
[Test Code]
config MODULES def_bool y modules
config A
kconfig: remove wrong expr_trans_bool()
expr_trans_bool() performs an incorrect transformation.
[Test Code]
config MODULES def_bool y modules
config A def_bool y select C if B != n
config B def_tristate m
config C tristate
[Result]
CONFIG_MODULES=y CONFIG_A=y CONFIG_B=m CONFIG_C=m
This output is incorrect because CONFIG_C=y is expected.
Documentation/kbuild/kconfig-language.rst clearly explains the function of the '!=' operator:
If the values of both symbols are equal, it returns 'n', otherwise 'y'.
Therefore, the statement:
select C if B != n
should be equivalent to:
select C if y
Or, more simply:
select C
Hence, the symbol C should be selected by the value of A, which is 'y'.
However, expr_trans_bool() wrongly transforms it to:
select C if B
Therefore, the symbol C is selected by (A && B), which is 'm'.
The comment block of expr_trans_bool() correctly explains its intention:
* bool FOO!=n => FOO ^^^^
If FOO is bool, FOO!=n can be simplified into FOO. This is correct.
However, the actual code performs this transformation when FOO is tristate:
if (e->left.sym->type == S_TRISTATE) { ^^^^^^^^^^
While it can be fixed to S_BOOLEAN, there is no point in doing so because expr_tranform() already transforms FOO!=n to FOO when FOO is bool. (see the "case E_UNEQUAL" part)
expr_trans_bool() is wrong and unnecessary.
Signed-off-by: Masahiro Yamada <masahiroy@kernel.org> Acked-by: Randy Dunlap <rdunlap@infradead.org>
show more ...
|
#
a607468b |
| 19-May-2024 |
Masahiro Yamada <masahiroy@kernel.org> |
kconfig: remove unused expr_is_no()
This has not been used since commit e911503085ae ("Kconfig: Remove bad inference rules expr_eliminate_dups2()").
Signed-off-by: Masahiro Yamada <masahiroy@kernel
kconfig: remove unused expr_is_no()
This has not been used since commit e911503085ae ("Kconfig: Remove bad inference rules expr_eliminate_dups2()").
Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
show more ...
|
#
a7c79cf3 |
| 27-Apr-2024 |
Masahiro Yamada <masahiroy@kernel.org> |
kconfig: remove SYMBOL_NO_WRITE flag
This flag is set to symbols that are not intended to be written to the .config file.
Since commit b75b0a819af9 ("kconfig: change defconfig_list option to enviro
kconfig: remove SYMBOL_NO_WRITE flag
This flag is set to symbols that are not intended to be written to the .config file.
Since commit b75b0a819af9 ("kconfig: change defconfig_list option to environment variable"), SYMBOL_NO_WRITE is only set to choices.
Therefore, (sym->flags & SYMBOL_NO_WRITE) is equivalent to sym_is_choice(sym). This flag is no longer necessary.
Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
show more ...
|
#
6a121588 |
| 22-Apr-2024 |
Masahiro Yamada <masahiroy@kernel.org> |
kconfig: remove 'optional' property support
The 'choice' statement is primarily used to exclusively select one option, but the 'optional' property allows all entries to be disabled.
In the followin
kconfig: remove 'optional' property support
The 'choice' statement is primarily used to exclusively select one option, but the 'optional' property allows all entries to be disabled.
In the following example, both A and B can be disabled simultaneously:
choice prompt "choose A, B, or nothing" optional
config A bool "A"
config B bool "B"
endchoice
You can achieve the equivalent outcome by other means.
A common solution is to add another option to guard the choice block. In the following example, you can set ENABLE_A_B_CHOICE=n to disable the entire choice block:
choice prompt "choose A or B" depends on ENABLE_A_B_CHOICE
config A bool "A"
config B bool "B"
endchoice
Another approach is to insert one more entry:
choice prompt "choose A, B, or disable both"
config A bool "A"
config B bool "B"
config DISABLE_A_AND_B bool "choose this to disable both A and B"
endchoice
Some real examples are DEBUG_INFO_NONE, INITRAMFS_COMPRESSION_NONE, LTO_NONE, etc.
The 'optional' property is even more unnecessary for a tristate choice.
Without the 'optional' property, you can disable A and B; you can set 'm' in the choice prompt, and disable A and B individually:
choice prompt "choose one built-in or make them modular"
config A tristate "A"
config B tristate "B"
endchoice
In conclusion, the 'optional' property was unneeded.
Signed-off-by: Masahiro Yamada <masahiroy@kernel.org> Reviewed-by: Nicolas Schier <n.schier@avm.de>
show more ...
|
#
1da251c6 |
| 22-Apr-2024 |
Masahiro Yamada <masahiroy@kernel.org> |
kconfig: remove SYMBOL_CHOICE flag
All symbols except choices have a name.
Previously, choices were allowed to have a name, but commit c83f020973bc ("kconfig: remove named choice support") eliminat
kconfig: remove SYMBOL_CHOICE flag
All symbols except choices have a name.
Previously, choices were allowed to have a name, but commit c83f020973bc ("kconfig: remove named choice support") eliminated that possibility.
Now, it is easy to distinguish choices from normal symbols; if the name is NULL, it is a choice.
Signed-off-by: Masahiro Yamada <masahiroy@kernel.org> Reviewed-by: Nicolas Schier <n.schier@avm.de>
show more ...
|
#
e0492219 |
| 03-Mar-2024 |
Masahiro Yamada <masahiroy@kernel.org> |
kconfig: link menus to a symbol
Currently, there is no direct link from (struct symbol) to (struct menu).
It is still possible to access associated menus through the P_SYMBOL property, because prop
kconfig: link menus to a symbol
Currently, there is no direct link from (struct symbol) to (struct menu).
It is still possible to access associated menus through the P_SYMBOL property, because property::menu is the relevant menu entry, but it results in complex code, as seen in get_symbol_str().
Use a linked list for simpler traversal of relevant menus.
Signed-off-by: Masahiro Yamada <masahiroy@kernel.org> Reviewed-by: Nicolas Schier <nicolas@fjasle.eu>
show more ...
|
#
91b69454 |
| 11-Feb-2024 |
Masahiro Yamada <masahiroy@kernel.org> |
kconfig: use generic macros to implement symbol hashtable
Use helper macros in hashtable.h for generic hashtable implementation.
We can git rid of the hash head index of for_all_symbols().
Signed-
kconfig: use generic macros to implement symbol hashtable
Use helper macros in hashtable.h for generic hashtable implementation.
We can git rid of the hash head index of for_all_symbols().
Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
show more ...
|
#
4dae9cf5 |
| 02-Feb-2024 |
Masahiro Yamada <masahiroy@kernel.org> |
kconfig: split list_head into a separate header
The struct list_head is often embedded in other structures, while other code is used in C functions.
By separating struct list_head into its own head
kconfig: split list_head into a separate header
The struct list_head is often embedded in other structures, while other code is used in C functions.
By separating struct list_head into its own header, other headers are no longer required to include the entire list.h.
This is similar to the kernel space, where struct list_head is defined in <linux/types.h> instead of <linux/list.h>.
Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
show more ...
|
#
5b058034 |
| 02-Feb-2024 |
Masahiro Yamada <masahiroy@kernel.org> |
kconfig: change file_lookup() to return the file name
Currently, file_lookup() returns a pointer to (struct file), but the callers use only file->name.
Make it return the ->name member directly.
T
kconfig: change file_lookup() to return the file name
Currently, file_lookup() returns a pointer to (struct file), but the callers use only file->name.
Make it return the ->name member directly.
This adjustment encapsulates struct file and file_list as internal implementation.
Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
show more ...
|
#
6676c5bc |
| 02-Feb-2024 |
Masahiro Yamada <masahiroy@kernel.org> |
kconfig: make file::name a flexible array member
Call malloc() just once to allocate needed memory.
Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
|
#
8facc5f3 |
| 02-Feb-2024 |
Masahiro Yamada <masahiroy@kernel.org> |
kconfig: move the file and lineno in struct file to struct buffer
struct file has two link nodes, 'next' and 'parent'.
The former is used to link files in the 'file_list' linked list, which manages
kconfig: move the file and lineno in struct file to struct buffer
struct file has two link nodes, 'next' and 'parent'.
The former is used to link files in the 'file_list' linked list, which manages the list of Kconfig files seen so far.
The latter is used to link files in the 'current_file' linked list, which manages the inclusion ("source") tree.
The latter should be tracked together with the lexer state.
Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
show more ...
|
#
1a90b0cd |
| 02-Feb-2024 |
Masahiro Yamada <masahiroy@kernel.org> |
kconfig: associate struct property with file name directly
struct property is linked to struct file for diagnostic purposes. It is always used to retrieve the file name through prop->file->name.
As
kconfig: associate struct property with file name directly
struct property is linked to struct file for diagnostic purposes. It is always used to retrieve the file name through prop->file->name.
Associate struct property with the file name directly.
Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
show more ...
|
#
40bab83a |
| 02-Feb-2024 |
Masahiro Yamada <masahiroy@kernel.org> |
kconfig: associate struct menu with file name directly
struct menu is linked to struct file for diagnostic purposes. It is always used to retrieve the file name through menu->file->name.
Associate
kconfig: associate struct menu with file name directly
struct menu is linked to struct file for diagnostic purposes. It is always used to retrieve the file name through menu->file->name.
Associate struct menu with the file name directly.
Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
show more ...
|
#
17787468 |
| 02-Feb-2024 |
Masahiro Yamada <masahiroy@kernel.org> |
kconfig: remove orphan lookup_file() declaration
There is no definition, no caller for lookup_file().
Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
|
#
356f0cb7 |
| 16-Jul-2023 |
Masahiro Yamada <masahiroy@kernel.org> |
kconfig: menuconfig: remove jump_key::index
You do not need to remember the index of each jump key because you can count it up after a key is pressed.
Signed-off-by: Masahiro Yamada <masahiroy@kern
kconfig: menuconfig: remove jump_key::index
You do not need to remember the index of each jump key because you can count it up after a key is pressed.
Signed-off-by: Masahiro Yamada <masahiroy@kernel.org> Reviewed-by: Jesse Taube <Mr.Bossman075@gmail.com>
show more ...
|
#
ab838577 |
| 13-Mar-2021 |
Masahiro Yamada <masahiroy@kernel.org> |
kconfig: remove allnoconfig_y option
Now that the only user, CONFIG_EMBEDDED has stopped using this option, remove it entirely.
Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
|
#
b75b0a81 |
| 13-Mar-2021 |
Masahiro Yamada <masahiroy@kernel.org> |
kconfig: change defconfig_list option to environment variable
"defconfig_list" is a weird option that defines a static symbol that declares the list of base config files in case the .config does not
kconfig: change defconfig_list option to environment variable
"defconfig_list" is a weird option that defines a static symbol that declares the list of base config files in case the .config does not exist yet.
This is quite different from other normal symbols; we just abused the "string" type and the "default" properties to list out the input files. They must be fixed values since these are searched for and loaded in the parse stage.
It is an ugly hack, and should not exist in the first place. Providing this feature as an environment variable is a saner approach.
Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
show more ...
|
#
40661621 |
| 13-Mar-2021 |
Masahiro Yamada <masahiroy@kernel.org> |
kconfig: move JUMP_NB to mconf.c
This macro is only used in mconf.c.
Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
|
#
3460d0bc |
| 17-Dec-2019 |
Thomas Hebb <tommyhebb@gmail.com> |
kconfig: distinguish between dependencies and visibility in help text
Kconfig makes a distinction between dependencies (defined by "depends on" expressions and enclosing "if" blocks) and visibility
kconfig: distinguish between dependencies and visibility in help text
Kconfig makes a distinction between dependencies (defined by "depends on" expressions and enclosing "if" blocks) and visibility (which includes all dependencies, but also includes inline "if" expressions of individual properties as well as, for prompts, "visible if" expressions of enclosing menus).
Before commit bcdedcc1afd6 ("menuconfig: print more info for symbol without prompts"), the "Depends on" lines of a symbol's help text indicated the visibility of the prompt property they appeared under. After bcdedcc1afd, there was always only a single "Depends on" line, which indicated the visibility of the first P_SYMBOL property of the symbol. Since P_SYMBOLs never have inline if expressions, this was in effect the same as the dependencies of the menu item that the P_SYMBOL was attached to.
Neither of these situations accurately conveyed the dependencies of a symbol--the first because it was actually the visibility, and the second because it only showed the dependencies from a single definition.
With this series, we are back to printing separate dependencies for each definition, but we print the actual dependencies (rather than the visibility) in the "Depends on" line. However, it can still be useful to know the visibility of a prompt, so this patch adds a "Visible if" line that shows the visibility only if the visibility is different from the dependencies (which it isn't for most prompts in Linux).
Before:
Symbol: THUMB2_KERNEL [=n] Type : bool Defined at arch/arm/Kconfig:1417 Prompt: Compile the kernel in Thumb-2 mode Depends on: (CPU_V7 [=y] || CPU_V7M [=n]) && !CPU_V6 [=n] && !CPU_V6K [=n] Location: -> Kernel Features Selects: ARM_UNWIND [=n]
After:
Symbol: THUMB2_KERNEL [=n] Type : bool Defined at arch/arm/Kconfig:1417 Prompt: Compile the kernel in Thumb-2 mode Depends on: (CPU_V7 [=y] || CPU_V7M [=n]) && !CPU_V6 [=n] && !CPU_V6K [=n] Visible if: (CPU_V7 [=y] || CPU_V7M [=n]) && !CPU_V6 [=n] && !CPU_V6K [=n] && !CPU_THUMBONLY [=n] Location: -> Kernel Features Selects: ARM_UNWIND [=n]
Signed-off-by: Thomas Hebb <tommyhebb@gmail.com> Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
show more ...
|
#
6397d96b |
| 17-Dec-2019 |
Masahiro Yamada <masahiroy@kernel.org> |
kconfig: remove sym from struct property
struct property can reference to the symbol that it is associated with by prop->menu->sym.
Fix up the one usage of prop->sym, and remove sym from struct pro
kconfig: remove sym from struct property
struct property can reference to the symbol that it is associated with by prop->menu->sym.
Fix up the one usage of prop->sym, and remove sym from struct property.
Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
show more ...
|
#
8e2442a5 |
| 12-Jul-2019 |
Masahiro Yamada <yamada.masahiro@socionext.com> |
kconfig: fix missing choice values in auto.conf
Since commit 00c864f8903d ("kconfig: allow all config targets to write auto.conf if missing"), Kconfig creates include/config/auto.conf in the defconf
kconfig: fix missing choice values in auto.conf
Since commit 00c864f8903d ("kconfig: allow all config targets to write auto.conf if missing"), Kconfig creates include/config/auto.conf in the defconfig stage when it is missing.
Joonas Kylmälä reported incorrect auto.conf generation under some circumstances.
To reproduce it, apply the following diff:
| --- a/arch/arm/configs/imx_v6_v7_defconfig | +++ b/arch/arm/configs/imx_v6_v7_defconfig | @@ -345,14 +345,7 @@ CONFIG_USB_CONFIGFS_F_MIDI=y | CONFIG_USB_CONFIGFS_F_HID=y | CONFIG_USB_CONFIGFS_F_UVC=y | CONFIG_USB_CONFIGFS_F_PRINTER=y | -CONFIG_USB_ZERO=m | -CONFIG_USB_AUDIO=m | -CONFIG_USB_ETH=m | -CONFIG_USB_G_NCM=m | -CONFIG_USB_GADGETFS=m | -CONFIG_USB_FUNCTIONFS=m | -CONFIG_USB_MASS_STORAGE=m | -CONFIG_USB_G_SERIAL=m | +CONFIG_USB_FUNCTIONFS=y | CONFIG_MMC=y | CONFIG_MMC_SDHCI=y | CONFIG_MMC_SDHCI_PLTFM=y
And then, run:
$ make ARCH=arm mrproper imx_v6_v7_defconfig
You will see CONFIG_USB_FUNCTIONFS=y is correctly contained in the .config, but not in the auto.conf.
Please note drivers/usb/gadget/legacy/Kconfig is included from a choice block in drivers/usb/gadget/Kconfig. So USB_FUNCTIONFS is a choice value.
This is probably a similar situation described in commit beaaddb62540 ("kconfig: tests: test defconfig when two choices interact").
When sym_calc_choice() is called, the choice symbol forgets the SYMBOL_DEF_USER unless all of its choice values are explicitly set by the user.
The choice symbol is given just one chance to recall it because set_all_choice_values() is called if SYMBOL_NEED_SET_CHOICE_VALUES is set.
When sym_calc_choice() is called again, the choice symbol forgets it forever, since SYMBOL_NEED_SET_CHOICE_VALUES is a one-time aid. Hence, we cannot call sym_clear_all_valid() again and again.
It is crazy to repeat set and unset of internal flags. However, we cannot simply get rid of "sym->flags &= flags | ~SYMBOL_DEF_USER;" Doing so would re-introduce the problem solved by commit 5d09598d488f ("kconfig: fix new choices being skipped upon config update").
To work around the issue, conf_write_autoconf() stopped calling sym_clear_all_valid().
conf_write() must be changed accordingly. Currently, it clears SYMBOL_WRITE after the symbol is written into the .config file. This is needed to prevent it from writing the same symbol multiple times in case the symbol is declared in two or more locations. I added the new flag SYMBOL_WRITTEN, to track the symbols that have been written.
Anyway, this is a cheesy workaround in order to suppress the issue as far as defconfig is concerned.
Handling of choices is totally broken. sym_clear_all_valid() is called every time a user touches a symbol from the GUI interface. To reproduce it, just add a new symbol drivers/usb/gadget/legacy/Kconfig, then touch around unrelated symbols from menuconfig. USB_FUNCTIONFS will disappear from the .config file.
I added the Fixes tag since it is more fatal than before. But, this has been broken since long long time before, and still it is. We should take a closer look to fix this correctly somehow.
Fixes: 00c864f8903d ("kconfig: allow all config targets to write auto.conf if missing") Cc: linux-stable <stable@vger.kernel.org> # 4.19+ Reported-by: Joonas Kylmälä <joonas.kylmala@iki.fi> Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com> Tested-by: Joonas Kylmälä <joonas.kylmala@iki.fi>
show more ...
|
#
769a1c02 |
| 24-Jan-2019 |
Masahiro Yamada <yamada.masahiro@socionext.com> |
kconfig: rename zconf.y to parser.y
Use a more logical name.
Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
|
#
0c874100 |
| 18-Dec-2018 |
Masahiro Yamada <yamada.masahiro@socionext.com> |
kconfig: convert to SPDX License Identifier
All files in lxdialog/ are licensed under GPL-2.0+, and the rest are under GPL-2.0. I added GPL-2.0 tags to test scripts in tests/.
Documentation/process
kconfig: convert to SPDX License Identifier
All files in lxdialog/ are licensed under GPL-2.0+, and the rest are under GPL-2.0. I added GPL-2.0 tags to test scripts in tests/.
Documentation/process/license-rules.rst does not suggest anything about the flex/bison files. Because flex does not accept the C++ comment style at the very top of a file, I used the C style for zconf.l, and so for zconf.y for consistency.
Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
show more ...
|
#
2aabbed6 |
| 30-Nov-2018 |
Masahiro Yamada <yamada.masahiro@socionext.com> |
kconfig: remove S_OTHER symbol type and correct dependency tracking
The S_OTHER type could be set only when conf_read_simple() is reading include/config/auto.conf file.
For example, CONFIG_FOO=y ex
kconfig: remove S_OTHER symbol type and correct dependency tracking
The S_OTHER type could be set only when conf_read_simple() is reading include/config/auto.conf file.
For example, CONFIG_FOO=y exists in include/config/auto.conf but it is missing from the currently parsed Kconfig files, sym_lookup() allocates a new symbol, and sets its type to S_OTHER.
Strangely, it will be set to S_STRING by conf_set_sym_val() a few lines below while it is obviously bool or tristate type. On the other hand, when CONFIG_BAR="bar" is being dropped from include/config/auto.conf, its type remains S_OTHER. Because for_all_symbols() omits S_OTHER symbols, conf_touch_deps() misses to touch include/config/bar.h
This behavior has been a pretty mystery for me, and digging the git histroy did not help. At least, touching depfiles is broken for string type symbols.
I removed S_OTHER entirely, and reimplemented it more simply.
If CONFIG_FOO was visible in the previous syncconfig, but is missing now, what we want to do is quite simple; just call conf_touch_dep() to touch include/config/foo.h instead of allocating a new symbol data.
Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
show more ...
|
#
18808612 |
| 13-Aug-2018 |
Masahiro Yamada <yamada.masahiro@socionext.com> |
kconfig: remove P_ENV property type
This property is not set by anyone since commit 104daea149c4 ("kconfig: reference environment variables directly and remove 'option env='").
Signed-off-by: Masah
kconfig: remove P_ENV property type
This property is not set by anyone since commit 104daea149c4 ("kconfig: reference environment variables directly and remove 'option env='").
Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com> Acked-by: Sam Ravnborg <sam@ravnborg.org>
show more ...
|