ALSA: hda: Fix assign invalid fixed slots pcm numbers to HDA_PCM_TYPE_HDMI in get_empty_pcm_device
PATCH 1/1 ALSA: hda: Fix assign invalid fixed slots pcm numbers to HDA_PCM_TYPE_HDMI in get_empty_pcm_device
The length of pcm_dev_bits in hda_bus is SNDRV_PCM_DEVICES, and the definiton of SNDRV_PCM_DEVICES is:
"
#if defined(CONFIG_SND_DYNAMIC_MINORS)
#define SNDRV_PCM_DEVICES (SNDRV_OS_MINORS-2)
#else
#define SNDRV_PCM_DEVICES 8
#endif
"
So the max valid fixed slots pcm number is 7, and the first non-fixed slot is 8.
--- sound/pci/hda/hda_codec.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
sound/pci/hda/hda_codec.c +2 -2
@@ -3118,7 +3118,7 @@ static int get_empty_pcm_device(struct hda_bus *bus, unsigned int type)static int audio_idx[HDA_PCM_NTYPES ][5 ] = { [HDA_PCM_TYPE_AUDIO ] = {0 ,2 ,4 ,5 ,-1 }, [HDA_PCM_TYPE_SPDIF ] = {1 ,-1 }, - [HDA_PCM_TYPE_HDMI ] = {3 ,7 ,8 ,9 ,-1 }, + [HDA_PCM_TYPE_HDMI ] = {3 ,7 ,-1 }, [HDA_PCM_TYPE_MODEM ] = {6 ,-1 }, };int i;
@@ -3139,7 +3139,7 @@ static int get_empty_pcm_device(struct hda_bus *bus, unsigned int type)#ifdef CONFIG_SND_DYNAMIC_MINORS /* non-fixed slots starting from 10 */ -for (i =10 ; i <32 ; i++) { +for (i =8 ; i <32 ; i++) {if (!test_and_set_bit (i, bus->pcm_dev_bits))return i; }
Signature · 1 line
1.8.5.6.2.g3d8a54e.dirty
Quoted 11 lines · Wang YanQing
The length of
pcm_dev_bitsinhda_busisSNDRV_PCM_DEVICES, and the definiton ofSNDRV_PCM_DEVICESis:
"
#ifdefined(CONFIG_SND_DYNAMIC_MINORS)
#defineSNDRV_PCM_DEVICES(SNDRV_OS_MINORS-2)
#else
#defineSNDRV_PCM_DEVICES8
#endif
"
Quoted 2 lines
So the max valid fixed slots pcm number is 7, and the first non-fixed slot is 8.
It's only when CONFIG_SND_DYNAMIC_MINORS=n, and that's already covered in the code in get_empty_pcm_device().
#ifndef CONFIG_SND_DYNAMIC_MINORS if (audio_idx[type][i] >= 8)
break;
#endif
For CONFIG_SND_DYNAMIC_MINORS=y, there is no such restriction, thus the non-fixed slot begins from 10 as in the current code.
thanks,
Takashi
Quoted 31 lines
Signed-off-by Wang YanQing <[email protected]>--- sound/pci/hda/hda_codec.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)sound/pci/hda/hda_codec.c +2
-2@@ -3118,7 +3118,7 @@ static int get_empty_pcm_device(struct hda_bus *bus, unsigned int type)static int audio_idx[HDA_PCM_NTYPES ][5 ] = { [HDA_PCM_TYPE_AUDIO ] = {0 ,2 ,4 ,5 ,-1 }, [HDA_PCM_TYPE_SPDIF ] = {1 ,-1 }, - [HDA_PCM_TYPE_HDMI ] = {3 ,7 ,8 ,9 ,-1 }, + [HDA_PCM_TYPE_HDMI ] = {3 ,7 ,-1 }, [HDA_PCM_TYPE_MODEM ] = {6 ,-1 }, };int i;@@ -3139,7 +3139,7 @@ static int get_empty_pcm_device(struct hda_bus *bus, unsigned int type)#ifdef CONFIG_SND_DYNAMIC_MINORS /* non-fixed slots starting from 10 */ -for (i =10 ; i <32 ; i++) { +for (i =8 ; i <32 ; i++) {if (!test_and_set_bit (i, bus->pcm_dev_bits))return i; }Signature · 1 line
1.8.5.6.2.g3d8a54e.dirty