ALSA: pcm: One more dependency for hw constraints
The fix for a long-standing USB-audio bug required one more dependency
variable to be added to the hw constraints. Unfortunately I didn't
realize at debugging that the new addition may result in the overflow
of the dependency array of each snd_pcm_hw_rule (up to three plus a
sentinel), because USB-audio driver adds one more dependency only for
a certain device and bus, hence it works as is for many devices. But
in a bad case, a simple open always results in -EINVAL (with kernel
WARNING if CONFIG_SND_DEBUG is set) no matter what is passed.
Since the dependencies are real and unavoidable (USB-audio restricts
the hw_params per looping over the format/rate/channels combos), the
only good solution seems to raise the bar for one more dependency for
snd_pcm_hw_rule -- so does this patch: now the hw constraint
dependencies can be up to four.
Fixes: 506c203cc3
("ALSA: usb-audio: Fix hw constraints dependencies")
Reported-by: Jamie Heilman <jamie@audible.transient.net>
Link: https://lore.kernel.org/r/20210123155730.22576-1-tiwai@suse.de
Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
Родитель
5de3b94302
Коммит
23b53d4417
|
@ -229,7 +229,7 @@ typedef int (*snd_pcm_hw_rule_func_t)(struct snd_pcm_hw_params *params,
|
||||||
struct snd_pcm_hw_rule {
|
struct snd_pcm_hw_rule {
|
||||||
unsigned int cond;
|
unsigned int cond;
|
||||||
int var;
|
int var;
|
||||||
int deps[4];
|
int deps[5];
|
||||||
|
|
||||||
snd_pcm_hw_rule_func_t func;
|
snd_pcm_hw_rule_func_t func;
|
||||||
void *private;
|
void *private;
|
||||||
|
|
|
@ -382,8 +382,8 @@ retry:
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The 'deps' array includes maximum three dependencies
|
* The 'deps' array includes maximum four dependencies
|
||||||
* to SNDRV_PCM_HW_PARAM_XXXs for this rule. The fourth
|
* to SNDRV_PCM_HW_PARAM_XXXs for this rule. The fifth
|
||||||
* member of this array is a sentinel and should be
|
* member of this array is a sentinel and should be
|
||||||
* negative value.
|
* negative value.
|
||||||
*
|
*
|
||||||
|
|
Загрузка…
Ссылка в новой задаче