Re: [PATCH 2/2] ASoC: SOF: SND_INTEL_DSP_CONFIG dependency

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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



[Index of Archives]     [ALSA User]     [Linux Audio Users]     [Pulse Audio]     [Kernel Archive]     [Asterisk PBX]     [Photo Sharing]     [Linux Sound]     [Video 4 Linux]     [Gimp]     [Yosemite News]

  Powered by Linux