Torsten Schenk wrote:
I'm working on the driver for the dmx 6fire usb. ... since Ubuntu 11.04, I get complaints about the card not working anymore,
I'd guess that would be commit 82d90313980b: | ALSA: USB: 6fire: signedness bug in usb6fire_pcm_prepare() | | rt->rate is an unsigned char so it's never equal to -1. It's not a huge | problem because the invalid rate is caught inside the call to | usb6fire_pcm_set_rate() which returns -EINVAL. But if we fix the test | then it prints out the correct error message so that's good. | | Signed-off-by: Dan Carpenter error27@gmail.com | | --- a/sound/usb/6fire/pcm.c | +++ b/sound/usb/6fire/pcm.c | @@ -493,13 +493,12 @@ static int usb6fire_pcm_prepare(struct snd_pcm_substream *alsa_sub) | sub->period_off = 0; | | if (rt->stream_state == STREAM_DISABLED) { | - rt->rate = -1; | for (i = 0; i < ARRAY_SIZE(rates); i++) | if (alsa_rt->rate == rates[i]) { | rt->rate = i; | break; | } | - if (rt->rate == -1) { | + if (i == ARRAY_SIZE(rates)) { | mutex_unlock(&rt->stream_mutex); | snd_printk("invalid rate %d in prepare.\n", | alsa_rt->rate);
This fixed not a bug but just a symptom of the actual bug, that rt->rate is not signed.
There are still "rt->rate = -1" initializations, and usb6fire_pcm_open() then does:
if (rt->rate >= 0) alsa_rt->hw.rates = rates_alsaid[rt->rate];
Regards, Clemens