On Fri, Jan 22, 2021 at 4:38 PM Pierre-Louis Bossart <pierre-louis.bossart@xxxxxxxxxxxxxxx> wrote: > >> The sof-pci-dev driver fails to link when built into the kernel > >> and CONFIG_SND_INTEL_DSP_CONFIG is set to =m: > >> > >> arm-linux-gnueabi-ld: sound/soc/sof/sof-pci-dev.o: in function `sof_pci_probe': > >> sof-pci-dev.c:(.text+0x1c): undefined reference to `snd_intel_dsp_driver_probe' > >> > >> As a temporary fix, use IS_REACHABLE to prevent the problem from > >> happening. A more complete solution is to move this code to > >> Intel-specific parts, restructure the drivers and Kconfig as discussed > >> with Arnd Bergmann and Takashi Iwai. > >> > >> Fixes: 82d9d54a6c0e ("ALSA: hda: add Intel DSP configuration / probe code") > >> Reported-by: Arnd Bergmann <arnd@xxxxxxxx> > >> Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@xxxxxxxxxxxxxxx> > > > > This might not be good enough. The code may still refer to the > > snd_intel_dsp_probe() symbol even if IS_REACHABLE() is false > > (although, practically seen, gcc should optimize it out). > > > > You need #if IS_REACHABLE() instead of the plain if. > > Then you don't need to change the indentation, and the patch will be > > eventually smaller, too :) > > I used the if() on purpose since in the past you mentioned #if/#endif > are ugly. There are plenty of other cases in the kernel code where if( > IF_REACHABLE(CONFIG_XYZ)) is used... Dead-code-elimination in both gcc and clang is reliable for all supported versions (there were problems in gcc-4.1 and before), and generally the "if (IS_ENABLED())" form is nicer than the "#if IS_ENABLED()" form because it produces better compile-time coverage. Arnd