[alsa-devel] [PATCH v2 2/3] ASoC: topology: Add topology core

Lars-Peter Clausen lars at metafoo.de
Wed May 27 21:23:03 CEST 2015


On 05/27/2015 09:00 PM, Mark Brown wrote:
> On Mon, May 25, 2015 at 06:22:49PM +0100, Liam Girdwood wrote:
>
> This looks really nice at a high level, obviously it's a lot of code so
> there might be detail problems but I expect we can fix those up later.
>
>> @@ -564,6 +565,7 @@ struct snd_soc_dapm_widget {
>>   	int num_kcontrols;
>>   	const struct snd_kcontrol_new *kcontrol_news;
>>   	struct snd_kcontrol **kcontrols;
>> +	struct snd_soc_dobj dobj;
>>
>>   	/* widget input and outputs */
>>   	struct list_head sources;
>
> This adds the dynamic object (which isn't enormous but isn't tiny) to
> every widget which could add up a bit.  I don't know if it's worth
> making it a pointer to a dobj and allocating that separately?  OTOH it's
> really routes rather than widgets that are the big cost, and it depends
> on allocators being friendly and not putting lots of padding round
> dobjs.  Definitely fixable incrementally if it is an issue though.

Ideally we'd turn the dependency chain the other way around and have a 
snd_soc_dobj_widget struct which inherits snd_soc_dapm_widget and 
snd_soc_dobj. In the dobj callbacks you can then still use container_of to 
get it. This comes at the expense that we have to add a free() callback to 
snd_soc_dapm_widget. But it opens up the possibility to have other 
specialized widgets sub-classes. snd_soc_dapm_widget is already rather large 
given how many instance we have of it and quite a few of the fields are only 
used by a particular type of widget. Another good candidate for example 
would be the DAI link widget with all its params fields.



More information about the Alsa-devel mailing list