[alsa-devel] [PATCH 08/13] ASoC: Add SoundWire stream programming interface

Takashi Iwai tiwai at suse.de
Tue Apr 3 14:03:06 CEST 2018


On Mon, 02 Apr 2018 08:26:35 +0200,
Takashi Sakamoto wrote:
> 
> Hi Greg,
> 
> I'm sorry for delay but I had a short trip.
> 
> On Mar 30 2018 15:03, Greg KH wrote:
> > On Fri, Mar 30, 2018 at 12:05:00PM +0900, Takashi Sakamoto wrote:
> >> Hi,
> >>
> >> On Mar 28 2018 18:38, Vinod Koul wrote:
> >>> diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c
> >>> index c0edac80df34..690e56a35237 100644
> >>> --- a/sound/soc/soc-core.c
> >>> +++ b/sound/soc/soc-core.c
> >>> @@ -2882,6 +2882,26 @@ int snd_soc_dai_set_tdm_slot(struct snd_soc_dai *dai,
> >>>    EXPORT_SYMBOL_GPL(snd_soc_dai_set_tdm_slot);
> >>>    /**
> >>> + * snd_soc_dai_set_sdw_stream() - Configures a DAI for SDW stream operation
> >>> + * @dai: DAI
> >>> + * @stream: STREAM
> >>> + * @direction: Stream direction(Playback/Capture)
> >>> + * SoundWire subsystem doesn't have a notion of direction and we reuse
> >>> + * the ASoC stream direction to configure sink/source ports.
> >>> + *
> >>> + * Returns 0 on success, a negative error code otherwise.
> >>> + */
> >>> +int snd_soc_dai_set_sdw_stream(struct snd_soc_dai *dai,
> >>> +				void *stream, int direction)
> >>> +{
> >>> +	if (dai->driver->ops->set_sdw_stream)
> >>> +		return dai->driver->ops->set_sdw_stream(dai, stream, direction);
> >>> +	else
> >>> +		return -ENOTSUPP;
> >>> +}
> >>> +EXPORT_SYMBOL_GPL(snd_soc_dai_set_sdw_stream);
> >>
> >> It's better for this kind of code to be incline function in any header. In
> >> general, new symbols increase maintenance cost of binary of kernel-related
> >> stuffs. It's preferable to avoid the addition if possible, IMO.
> >
> > I don't understand, functionally it's the same, there should not be any
> > increased maintenance either way.  Please explain how this makes things
> > "harder"?
> 
> Hm, if so it might be my misunderstanding to reasons for typical usage
> of inline functions in kernel source, sorry.
> 
> In my understanding, exported symbols are put into some sections of
> ELF binary. Addition of new symbols increases size of the
> section. Additionally, after linking vmlinux, kbuild scans built-in
> symbols and make a file with entries of them. The addition increases
> time of this step. Furthermore, at the end of building kernel, kmod is
> called to generate some map files for exported symbols in loadable
> module. In a view of distributors, these files are maintained by
> binary packages of any type carefully because some incompatibilities
> can be delivered such as version mismatch.
> 
> For these reasons, I think thing goes harder when people carelessly
> add new symbols for functions with a few codes; e.g. accessing to a
> member of structure, then simply check an return it. Actually I can
> see some examples in upstreamed headers.

The advantage of inline function isn't about the maintenance cost.
It's mostly for performance, as well as the binary size reduction.

Actually, when a kernel live-patching comes into play, an inline
function is worse from the maintenance POV.  Then we'd have to patch
every place that is expanded instead of a single place.

However, this doesn't discourage the use of inline function, either.
Overall, the performance is still the most important factor for major
cases.  So I agree with that this particular case can be well inlined,
supposing that no complex code is planned to be added in future.


thanks,

Takashi


More information about the Alsa-devel mailing list