[alsa-devel] [PATCH] ALSA: hda - Do not assign streams in reverse order

Takashi Iwai tiwai at suse.de
Tue Apr 8 09:35:17 CEST 2014


At Mon,  7 Apr 2014 22:36:38 +0300,
Anssi Hannula wrote:
> 
> Currently stream numbers are assigned in reverse order.
> 
> Unfortunately commit 7546abfb8e1f9933b5 ("ALSA: hda - Increment
> default stream numbers for AMD HDMI controllers") assumed this was not
> the case (specifically, it had the "old cards had single device only"
> => "extra unused stream numbers do not matter" assumption), causing
> non-working audio regressions for AMD Radeon HDMI users on v3.14.
> 
> Change the stream numbers to be assigned in increasing order instead.
> 
> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=77002
> Reported-by: Christian Güdel <cg at dmesg.ch>
> Signed-off-by: Anssi Hannula <anssi.hannula at iki.fi>
> Tested-by: Christian Güdel <cg at dmesg.ch>
> Cc: Alex Deucher <alexander.deucher at amd.com>
> Cc: <stable at vger.kernel.org> # 3.14
> ---
> 
> Takashi, please check I didn't miss anything (I'm not that familiar
> with this low-level HDA code). :)

In that case, let's revert the commit instead.  There was a reason to
behave in that way, although I don't remember well.  That said, this
change might lead to another regression.  Thus, if a fix is needed for
stable, the revert would be the best choice as a first aid.  Of
course, this change is good to have, so let's implement this for 3.15
and see whether it works well for all nasty controllers.

Besides, this patch can't be applied any longer to the current code
base since it's been rewritten a lot; most of codes have been moved to
another file hda_controller.c.  Could you rebase the patch for the
latest tree?  Meanwhile I'll prepare a revert that is applied only to
3.14.x.


thanks,

Takashi

> 
> 
>  sound/pci/hda/hda_intel.c | 9 +++++----
>  1 file changed, 5 insertions(+), 4 deletions(-)
> 
> diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c
> index e354ab1ec20f..7a7b7b10dddf 100644
> --- a/sound/pci/hda/hda_intel.c
> +++ b/sound/pci/hda/hda_intel.c
> @@ -1856,13 +1856,14 @@ azx_assign_device(struct azx *chip, struct snd_pcm_substream *substream)
>  		struct azx_dev *azx_dev = &chip->azx_dev[dev];
>  		dsp_lock(azx_dev);
>  		if (!azx_dev->opened && !dsp_is_locked(azx_dev)) {
> -			res = azx_dev;
> -			if (res->assigned_key == key) {
> -				res->opened = 1;
> -				res->assigned_key = key;
> +			if (azx_dev->assigned_key == key) {
> +				azx_dev->opened = 1;
> +				azx_dev->assigned_key = key;
>  				dsp_unlock(azx_dev);
>  				return azx_dev;
>  			}
> +			if (!res)
> +				res = azx_dev;
>  		}
>  		dsp_unlock(azx_dev);
>  	}
> -- 
> 1.8.4.5
> 


More information about the Alsa-devel mailing list