linux/Documentation
Masahiro Yamada fde192511b kconfig: remove tristate choice support
I previously submitted a fix for a bug in the choice feature [1], where
I mentioned, "Another (much cleaner) approach would be to remove the
tristate choice support entirely".

There are more issues in the tristate choice feature. For example, you
can observe a couple of bugs in the following test code.

[Test Code]

    config MODULES
            def_bool y
            modules

    choice
            prompt "tristate choice"
            default A

    config A
            tristate "A"

    config B
            tristate "B"

    endchoice

Bug 1: the 'default' property is not correctly processed

'make alldefconfig' produces:

    CONFIG_MODULES=y
    # CONFIG_A is not set
    # CONFIG_B is not set

However, the correct output should be:

    CONFIG_MODULES=y
    CONFIG_A=y
    # CONFIG_B is not set

The unit test file, scripts/kconfig/tests/choice/alldef_expected_config,
is wrong as well.

Bug 2: choice members never get 'y' with randconfig

For the test code above, the following combinations are possible:

               A    B
        (1)    y    n
        (2)    n    y
        (3)    m    m
        (4)    m    n
        (5)    n    m
        (6)    n    n

'make randconfig' never produces (1) or (2).

These bugs are fixable, but a more critical problem is the lack of a
sensible syntax to specify the default for the tristate choice.
The default for the choice must be one of the choice members, which
cannot specify any of the patterns (3) through (6) above.

In addition, I have never seen it being used in a useful way.

The following commits removed unnecessary use of tristate choices:

 - df8df5e4bc ("usb: get rid of 'choice' for legacy gadget drivers")
 - bfb57ef054 ("rapidio: remove choice for enumeration")

This commit removes the tristate choice support entirely, which allows
me to delete a lot of code, making further refactoring easier.

Note:
This includes the revert of commit fa64e5f6a3 ("kconfig/symbol.c:
handle choice_values that depend on 'm' symbols"). It was suspicious
because it did not address the root cause but introduced inconsistency
in visibility between choice members and other symbols.

[1]: https://lore.kernel.org/linux-kbuild/20240427104231.2728905-1-masahiroy@kernel.org/T/#m0a1bb6992581462ceca861b409bb33cb8fd7dbae

Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
Reviewed-by: Nicolas Schier <nicolas@fjasle.eu>
2024-07-16 01:08:36 +09:00
..
ABI Char/Misc and other driver subsystem changes for 6.10-rc1 2024-05-22 12:26:46 -07:00
accel
accounting
admin-guide TTY/Serial/Console fixes for 6.10-rc6 2024-06-30 08:57:43 -07:00
arch documentation: Fix riscv cmodx example 2024-07-01 10:50:18 -07:00
block
bpf bpf, docs: Fix the description of 'src' in ALU instructions 2024-05-15 09:34:54 -07:00
cdrom scsi: sr: Fix unintentional arithmetic wraparound 2024-05-15 10:05:24 -04:00
core-api Documentation/core-api: correct reference to SWIOTLB_DYNAMIC 2024-05-27 16:52:09 +02:00
cpu-freq
crypto
dev-tools Mainly singleton patches, documented in their respective changelogs. 2024-05-19 14:02:03 -07:00
devicetree Including fixes from can, bpf and netfilter. 2024-06-27 10:05:35 -07:00
doc-guide
driver-api cxl: documentation: add missing files to cxl driver-api 2024-06-25 14:45:27 -07:00
fault-injection
fb
features
filesystems /proc/pid/smaps: add mseal info for vma 2024-06-24 20:52:09 -07:00
firmware_class
firmware-guide Documentation: firmware-guide: ACPI: Fix namespace typo 2024-04-26 18:58:13 +02:00
fpga
gpu
hid Merge branch 'for-6.10/intel-ish' into for-linus 2024-05-14 13:53:15 +02:00
hwmon hwmon: (emc1403) Add support for EMC1428 and EMC1438. 2024-05-12 09:02:00 -07:00
i2c docs: i2c: summary: be clearer with 'controller/target' and 'adapter/client' pairs 2024-06-22 10:11:56 +02:00
iio docs: iio: ad7944: add documentation for chain mode 2024-04-29 20:53:25 +01:00
images
infiniband
input
isdn
kbuild kconfig: remove tristate choice support 2024-07-16 01:08:36 +09:00
kernel-hacking
leds
litmus-tests Documentation/litmus-tests: Make cmpxchg() tests safe for klitmus 2024-05-06 14:29:21 -07:00
livepatch
locking
maintainer
mhi
misc-devices
mm The usual shower of singleton fixes and minor series all over MM, 2024-05-19 09:21:03 -07:00
netlabel
netlink Including fixes from can, bpf and netfilter. 2024-06-27 10:05:35 -07:00
networking Revert "xsk: Document ability to redirect to any socket bound to the same umem" 2024-06-05 09:43:05 +02:00
nvdimm
nvme
PCI Merge branch 'pci/enumeration' 2024-05-16 18:14:10 -05:00
pcmcia
peci
power
process docs: netdev: Fix typo in Signed-off-by tag 2024-05-27 17:15:22 -07:00
RCU
rust RISC-V Patches for the 6.10 Merge Window, Part 1 2024-05-22 09:56:00 -07:00
scheduler
scsi
security Another not-too-busy cycle for documentation, including: 2024-05-13 10:51:53 -07:00
sound Documentation: sound: Fix trailing whitespaces 2024-05-16 16:00:30 +02:00
sphinx docs: kernel_include.py: Cope with docutils 0.21 2024-05-02 09:50:59 -06:00
sphinx-static
spi spi: pxa2xx: Drop the stale entry in documentation TOC 2024-05-07 23:53:21 +09:00
staging
target
tee
timers sched/isolation: Prevent boot crash when the boot CPU is nohz_full 2024-04-28 10:07:12 +02:00
tools rtla: Documentation: Fix -t, --trace 2024-05-16 16:52:16 +02:00
trace Char/Misc and other driver subsystem changes for 6.10-rc1 2024-05-22 12:26:46 -07:00
translations pci-v6.10-changes 2024-05-21 10:09:28 -07:00
usb
userspace-api tracing: Have memmapped ring buffer use ioctl of "R" range 0x20-2F 2024-07-03 16:40:45 -04:00
virt Documentation: hyperv: Improve synic and interrupt handling description 2024-05-28 05:28:42 +00:00
w1
watchdog
wmi platform/x86: wmi: Add MSI WMI Platform driver 2024-04-29 12:06:21 +02:00
.gitignore
atomic_bitops.txt
atomic_t.txt Documentation/atomic_t: Emphasize that failed atomic operations give no ordering 2024-05-06 14:29:04 -07:00
Changes
CodingStyle
conf.py
docutils.conf
dontdiff
index.rst
Kconfig
Makefile Kbuild updates for v6.10 2024-05-18 12:39:20 -07:00
memory-barriers.txt
SubmittingPatches
subsystem-apis.rst