sound: usb-audio: fix queue length check for high speed devices
Clemens Ladisch [Mon, 2 Mar 2009 11:06:28 +0000 (12:06 +0100)]
When checking for the maximum queue length, we have to take into account
that MAX_QUEUE is measured in milliseconds (i.e., frames) while the unit
of urb_packs is whatever data packet interval the device uses (possibly
less than one frame when using high speed devices).

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Takashi Iwai <tiwai@suse.de>

sound/usb/usbaudio.c

index f853b62..defe991 100644 (file)
@@ -1095,9 +1095,8 @@ static int init_substream_urbs(struct snd_usb_substream *subs, unsigned int peri
                        total_packs = 2 * packs_per_ms;
                } else {
                        /* and we don't want too long a queue either */
-                       maxpacks = max((unsigned int)MAX_QUEUE, urb_packs * 2);
-                       if (total_packs > maxpacks * packs_per_ms)
-                               total_packs = maxpacks * packs_per_ms;
+                       maxpacks = max(MAX_QUEUE * packs_per_ms, urb_packs * 2);
+                       total_packs = min(total_packs, maxpacks);
                }
        } else {
                total_packs = MAX_URBS * urb_packs;