On Wed, Apr 8, 2020 at 10:38 PM Nicolas Pitre <nico@xxxxxxxxxxx> wrote: > On Wed, 8 Apr 2020, Arnd Bergmann wrote: > > I have created workarounds for the Kconfig files, which now stop using > > imply and do something else in each case. I don't know whether there was > > a bug in the kconfig changes that has led to allowing configurations that > > were not meant to be legal even with the new semantics, or if the Kconfig > > files have simply become incorrect now and the tool works as expected. > > In most cases it is the code that has to be fixed. It typically does: > > if (IS_ENABLED(CONFIG_FOO)) > foo_init(); > > Where it should rather do: > > if (IS_REACHABLE(CONFIG_FOO)) > foo_init(); > > A couple of such patches have been produced and queued in their > respective trees already. I try to use IS_REACHABLE() only as a last resort, as it tends to confuse users when a subsystem is built as a module and already loaded but something relying on that subsystem does not use it. In the six patches I made, I had to use IS_REACHABLE() once, for the others I tended to use a Kconfig dependency like 'depends on FOO || FOO=n' which avoids the case that IS_REACHABLE() works around badly. I did come up with the IS_REACHABLE() macro originally, but that doesn't mean I think it's a good idea to use it liberally ;-) Arnd