regression caused by commit 8357b48549e17b3e4e402c7f977b65708922e60f

From: Felipe Balbi
Date: Thu Jun 27 2013 - 02:14:51 EST


Hi,

after commit 8357b48549e17b3e4e402c7f977b65708922e60f,
omap2plus_defconfig doesn't 'hold' the answer to USB Gadget Drivers
anymore. Everytime I run oldconfig, it asks me again and again what USB
Gadget Drivers should be (M/y/?).

That's certainly not expected considering it wasn't like that before.

Here's what happens:

$ make -j18 O=/home/build/arm ARCH=arm CONFIG_DEBUG_SECTION_MISMATCH=y CROSS_COMPILE="ccache arm-linux-" omap2plus_defconfig
GEN /home/build/arm/Makefile
#
# configuration written to .config
#
$ make -j18 O=/home/build/arm ARCH=arm CONFIG_DEBUG_SECTION_MISMATCH=y CROSS_COMPILE="ccache arm-linux-" oldconfig
GEN /home/build/arm/Makefile
scripts/kconfig/conf --oldconfig Kconfig
*
* Restart config...
*
*
* USB Gadget Support
*
USB Gadget Support (USB_GADGET) [Y/n/m/?] y
Debugging messages (DEVELOPMENT) (USB_GADGET_DEBUG) [Y/n/?] y
Debugging information files (DEVELOPMENT) (USB_GADGET_DEBUG_FILES) [Y/n/?] y
Debugging information files in debugfs (DEVELOPMENT) (USB_GADGET_DEBUG_FS) [Y/n/?] y
Maximum VBUS Power usage (2-500 mA) (USB_GADGET_VBUS_DRAW) [2] 2
Number of storage pipeline buffers (USB_GADGET_STORAGE_NUM_BUFFERS) [2] 2
*
* USB Peripheral Controller
*
Faraday FUSB300 USB Peripheral Controller (USB_FUSB300) [N/m/y/?] n
Faraday FOTG210 USB Peripheral Controller (USB_FOTG210_UDC) [N/m/y/?] n
Renesas R8A66597 USB Peripheral Controller (USB_R8A66597) [N/m/y/?] n
PXA 27x (USB_PXA27X) [N/m/y/?] n
Marvell USB2.0 Device Controller (USB_MV_UDC) [N/m/y/?] n
MARVELL PXA2128 USB 3.0 controller (USB_MV_U3D) [N/m/y/?] n
Renesas M66592 USB Peripheral Controller (USB_M66592) [N/m/y/?] n
PLX NET2272 (USB_NET2272) [N/m/y/?] n
Dummy HCD (DEVELOPMENT) (USB_DUMMY_HCD) [N/m/y/?] n
USB Gadget Drivers [M/y/?] (NEW) m
USB functions configurable through configfs (USB_CONFIGFS) [N/m/?] n
Gadget Zero (DEVELOPMENT) (USB_ZERO) [M/n/?] m
Audio Gadget (USB_AUDIO) [N/m/?] n
Ethernet Gadget (with CDC Ethernet support) (USB_ETH) [N/m/?] n
Network Control Model (NCM) support (USB_G_NCM) [N/m/?] n
Gadget Filesystem (USB_GADGETFS) [N/m/?] n
Function Filesystem (USB_FUNCTIONFS) [N/m/?] n
Mass Storage Gadget (USB_MASS_STORAGE) [N/m/?] n
Serial Gadget (with CDC ACM and CDC OBEX support) (USB_G_SERIAL) [N/m/?] n
MIDI Gadget (USB_MIDI_GADGET) [N/m/?] n
Printer Gadget (USB_G_PRINTER) [N/m/?] n
CDC Composite Device (Ethernet and ACM) (USB_CDC_COMPOSITE) [N/m/?] n
CDC Composite Device (ACM and mass storage) (USB_G_ACM_MS) [N/m/?] n
Multifunction Composite Gadget (USB_G_MULTI) [N/m/?] n
HID Gadget (USB_G_HID) [N/m/?] n
EHCI Debug Device Gadget (USB_G_DBGP) [N/m/?] n
#
# configuration written to .config
#
$ make -j18 O=/home/build/arm ARCH=arm CONFIG_DEBUG_SECTION_MISMATCH=y CROSS_COMPILE="ccache arm-linux-" oldconfig
GEN /home/build/arm/Makefile
scripts/kconfig/conf --oldconfig Kconfig
*
* Restart config...
*
*
* USB Gadget Support
*
USB Gadget Support (USB_GADGET) [Y/n/m/?] y
Debugging messages (DEVELOPMENT) (USB_GADGET_DEBUG) [Y/n/?] y
Debugging information files (DEVELOPMENT) (USB_GADGET_DEBUG_FILES) [Y/n/?] y
Debugging information files in debugfs (DEVELOPMENT) (USB_GADGET_DEBUG_FS) [Y/n/?] y
Maximum VBUS Power usage (2-500 mA) (USB_GADGET_VBUS_DRAW) [2] 2
Number of storage pipeline buffers (USB_GADGET_STORAGE_NUM_BUFFERS) [2] 2
*
* USB Peripheral Controller
*
Faraday FUSB300 USB Peripheral Controller (USB_FUSB300) [N/m/y/?] n
Faraday FOTG210 USB Peripheral Controller (USB_FOTG210_UDC) [N/m/y/?] n
Renesas R8A66597 USB Peripheral Controller (USB_R8A66597) [N/m/y/?] n
PXA 27x (USB_PXA27X) [N/m/y/?] n
Marvell USB2.0 Device Controller (USB_MV_UDC) [N/m/y/?] n
MARVELL PXA2128 USB 3.0 controller (USB_MV_U3D) [N/m/y/?] n
Renesas M66592 USB Peripheral Controller (USB_M66592) [N/m/y/?] n
PLX NET2272 (USB_NET2272) [N/m/y/?] n
Dummy HCD (DEVELOPMENT) (USB_DUMMY_HCD) [N/m/y/?] n
USB Gadget Drivers [M/y/?] (NEW) m
USB functions configurable through configfs (USB_CONFIGFS) [N/m/?] n
Gadget Zero (DEVELOPMENT) (USB_ZERO) [M/n/?] m
Audio Gadget (USB_AUDIO) [N/m/?] n
Ethernet Gadget (with CDC Ethernet support) (USB_ETH) [N/m/?] n
Network Control Model (NCM) support (USB_G_NCM) [N/m/?] n
Gadget Filesystem (USB_GADGETFS) [N/m/?] n
Function Filesystem (USB_FUNCTIONFS) [N/m/?] n
Mass Storage Gadget (USB_MASS_STORAGE) [N/m/?] n
Serial Gadget (with CDC ACM and CDC OBEX support) (USB_G_SERIAL) [N/m/?] n
MIDI Gadget (USB_MIDI_GADGET) [N/m/?] n
Printer Gadget (USB_G_PRINTER) [N/m/?] n
CDC Composite Device (Ethernet and ACM) (USB_CDC_COMPOSITE) [N/m/?] n
CDC Composite Device (ACM and mass storage) (USB_G_ACM_MS) [N/m/?] n
Multifunction Composite Gadget (USB_G_MULTI) [N/m/?] n
HID Gadget (USB_G_HID) [N/m/?] n
EHCI Debug Device Gadget (USB_G_DBGP) [N/m/?] n
#
# configuration written to .config
#

Reverting that patch alone on linux-next helps:

$ git show
commit ddbf0162837ce7ada497f9bf2143f20c73e96c20
Author: Stephen Rothwell <sfr@xxxxxxxxxxxxxxxx>
Date: Wed Jun 26 17:57:47 2013 +1000

Add linux-next specific files for 20130626

Signed-off-by: Stephen Rothwell <sfr@xxxxxxxxxxxxxxxx>

$ git revert 8357b48549e17b3e4e402c7f977b65708922e60f

$ make -j18 O=/home/build/arm ARCH=arm CONFIG_DEBUG_SECTION_MISMATCH=y CROSS_COMPILE="ccache arm-linux-" omap2plus_defconfig
GEN /home/build/arm/Makefile
HOSTCC scripts/kconfig/zconf.tab.o
HOSTLD scripts/kconfig/conf
#
# configuration written to .config
#
$ make -j18 O=/home/build/arm ARCH=arm CONFIG_DEBUG_SECTION_MISMATCH=y CROSS_COMPILE="ccache arm-linux-" oldconfig
GEN /home/build/arm/Makefile
scripts/kconfig/conf --oldconfig Kconfig
#
# configuration written to .config
#
$ make -j18 O=/home/build/arm ARCH=arm CONFIG_DEBUG_SECTION_MISMATCH=y CROSS_COMPILE="ccache arm-linux-" oldconfig
GEN /home/build/arm/Makefile
scripts/kconfig/conf --oldconfig Kconfig
#
# configuration written to .config
#

Here's bisection log:

8357b48549e17b3e4e402c7f977b65708922e60f is the first bad commit
commit 8357b48549e17b3e4e402c7f977b65708922e60f
Author: Yann E. MORIN <yann.morin.1998@xxxxxxx>
Date: Tue Jun 18 19:35:29 2013 +0200

kconfig: fix randomising choice entries in presence of KCONFIG_ALLCONFIG

Currently, randconfig does randomise choice entries, unless KCONFIG_ALLCONFIG
is specified.

For example, given those two files (Thomas' test-case):

---8<--- Config.test.in
config OPTIONA
bool "Option A"

choice
prompt "This is a choice"

config CHOICE_OPTIONA
bool "Choice Option A"

config CHOICE_OPTIONB
bool "Choice Option B"

endchoice

config OPTIONB
bool "Option B"
---8<--- Config.test.in

---8<--- config.defaults
CONFIG_OPTIONA=y
---8<--- config.defaults

And running:
./scripts/kconfig/conf --randconfig Config.test.in

does properly randomise the two choice symbols (and the two booleans).

However, running:
KCONFIG_ALLCONFIG=config.defaults \
./scripts/kconfig/conf --randconfig Config.test.in

does *not* reandomise the two choice entries, and only CHOICE_OPTIONA
will ever be selected. (OPTIONA will always be set (expected), and
OPTIONB will be be properly randomised (expected).)

This patch defers setting that a choice has a value until a symbol for
that choice is indeed set, so that choices are properly randomised when
KCONFIG_ALLCONFIG is set, but not if a symbol for that choice is set.

Reported-by: Thomas Petazzoni <thomas.petazzoni@xxxxxxxxxxxxxxxxxx>
Signed-off-by: "Yann E. MORIN" <yann.morin.1998@xxxxxxx>
Cc: Thomas Petazzoni <thomas.petazzoni@xxxxxxxxxxxxxxxxxx>
Cc: Michal Marek <mmarek@xxxxxxx>
Cc: Sam Ravnborg <sam@xxxxxxxxxxxx>
Cc: Sedat Dilek <sedat.dilek@xxxxxxxxx>
Cc: Arnd Bergmann <arnd@xxxxxxxx>
Cc: Stephen Rothwell <sfr@xxxxxxxxxxxxxxxx>

---
Changes v3 -> v4
- fix previous issue where some choices would not be set, which would
cause silentoldconfig to ask for them and was then breaking this
workflow (as reported by Arnd and Sedat):
KCONFIG_ALLCONFIG=foo.defconfig make randconfig
make silentoldconfig </dev/nullo
which I have tested (3h28min!) with:
touch defconfig
for(( i=0; i<10000; i++ )); do
KCONFIG_ALLCONFIG=$(pwd)/defconfig make randconfig >/dev/null 2>&1
make silentoldconfig </dev/null >/dev/null 2>&1 || break
done
which did not break at all.
- change done in v3 (below) is already fixed by a previous patch

Changes v2 -> v3
- ensure only one symbol is set in a choice

Changes v1 -> v2:
- further postpone setting that a choice has a value until
one is indeed set
- do not print symbols that are part of an invisible choice
:040000 040000 cf18e4740ade73c191d8905f35b2c97abdf4bfcf be417fef0c309c2301b671ca8c19ca5b27ce8486 M scripts


$ git bisect log
git bisect start
# good: [9e895ace5d82df8929b16f58e9f515f6d54ab82d] Linux 3.10-rc7
git bisect good 9e895ace5d82df8929b16f58e9f515f6d54ab82d
# bad: [ddbf0162837ce7ada497f9bf2143f20c73e96c20] Add linux-next specific files for 20130626
git bisect bad ddbf0162837ce7ada497f9bf2143f20c73e96c20
# bad: [68f1af44fb82f16925e50ef4f15998c9933759a2] Merge remote-tracking branch 'md/for-next'
git bisect bad 68f1af44fb82f16925e50ef4f15998c9933759a2
# bad: [dcef7c4c971c7f299f097cc78776b4845a7f5bb2] Merge remote-tracking branch 'slave-dma/next'
git bisect bad dcef7c4c971c7f299f097cc78776b4845a7f5bb2
# good: [5fafb18bbf542079abfaf91bf405a9ede33c511a] Merge remote-tracking branch 'vfs/for-next'
git bisect good 5fafb18bbf542079abfaf91bf405a9ede33c511a
# good: [563709c0f179278edfa4518e9b53ae3054d1cb36] Merge remote-tracking branch 'v4l-dvb/master'
git bisect good 563709c0f179278edfa4518e9b53ae3054d1cb36
# bad: [1e701aae3f0cbe714ee3e5feb84e830fc4688634] Merge remote-tracking branch 'pm/linux-next'
git bisect bad 1e701aae3f0cbe714ee3e5feb84e830fc4688634
# good: [414ca3e0fdfbb18b7871bf526fc94c3ca8220d6e] Merge branch 'fixes' into linux-next
git bisect good 414ca3e0fdfbb18b7871bf526fc94c3ca8220d6e
# good: [6c685e78be5ea91c7e938e29d7ba1fcaa77bd58f] Merge branch 'pm-cpufreq-next' into linux-next
git bisect good 6c685e78be5ea91c7e938e29d7ba1fcaa77bd58f
# good: [930ed52c88da2229040caabe975fc5f2e4350d22] Merge branch 'for-3.11' into for-next
git bisect good 930ed52c88da2229040caabe975fc5f2e4350d22
# bad: [8357b48549e17b3e4e402c7f977b65708922e60f] kconfig: fix randomising choice entries in presence of KCONFIG_ALLCONFIG
git bisect bad 8357b48549e17b3e4e402c7f977b65708922e60f
# good: [1278ebdbc3167883f32095491990fbdc7cdf8b5e] mconf/nconf: mark empty menus/menuconfigs different from non-empty ones
git bisect good 1278ebdbc3167883f32095491990fbdc7cdf8b5e
# good: [a5f6d795f5941e97e757b643a6482968a66c6150] kconfig/conf: print the seed used to initialise the RNG for randconfig
git bisect good a5f6d795f5941e97e757b643a6482968a66c6150
# good: [a1ce636f560336ba007bfabb15b167ff31b592cf] kconfig/[mn]conf: make it explicit in the search box that a regexp is possible
git bisect good a1ce636f560336ba007bfabb15b167ff31b592cf
# good: [3b9a19e08960e5cdad5253998637653e592a3c29] kconfig: loop as long as we changed some symbols in randconfig
git bisect good 3b9a19e08960e5cdad5253998637653e592a3c29

--
balbi

Attachment: signature.asc
Description: Digital signature