[alsa-devel] Is this bug ? dpcm_prune_paths()

Kuninori Morimoto kuninori.morimoto.gx at renesas.com
Tue Oct 8 08:53:30 CEST 2019


Hi ALSA ML.

I'm checking soc-pcm.c, and I noticed strange code at
dpcm_prune_paths().

	static int dpcm_prune_paths(...)
	{
		...
		/* Destroy any old FE <--> BE connections */
(1)		for_each_dpcm_be(fe, stream, dpcm) {
			unsigned int i;

 -			/* is there a valid CPU DAI widget for this BE */
 |			widget = dai_get_widget(dpcm->be->cpu_dai, stream);
 |
(A)			/* prune the BE if it's no longer in our active list */
 |			if (widget && widget_in_list(list, widget))
 |(a)				continue;
 -
 |			/* is there a valid CODEC DAI widget for this BE */
 |(2)			for_each_rtd_codec_dai(dpcm->be, i, dai) {
 |				widget = dai_get_widget(dai, stream);
(B)
 |				/* prune the BE if it's no longer in our active list */
 |				if (widget && widget_in_list(list, widget))
 |(b)					continue;
 -			}

 -			...
 |			dpcm->state = ...
(C)			dpcm->be->dpcm[stream].runtime_update = ...
 |			prune++;
 -		}
		...
	}

In my understanding, (A) part is for CPU, and (B) part is for Codec.
Guessing from (a), I think it want to skip setup (C) if CPU widget
exist and matches to list.
If so, I guess (b) is maybe bug ?
This continue is for (2) loop, thus, it is totally do nothing now.
But maybe it want to be continue for (1) loop ?

Thank you for your help !!
Best regards
---
Kuninori Morimoto


More information about the Alsa-devel mailing list