tree c5d1ff785bda8fa11575ecb71453e53426b6e780
parent 989a0b248bbf32c89e60dc6f02219e446b320712
author Nishanth Aravamudan <[EMAIL PROTECTED]> Sat, 09 Jul 2005 10:54:37 +0200
committer Jaroslav Kysela <[EMAIL PROTECTED]> Thu, 28 Jul 2005 12:22:22 +0200

[ALSA] Fix-up sleeping in sound/usb

USB generic driver,USB USX2Y
Description: Fix-up sleeping in sound/usb. Replace big_mdelay() with
msleep() to guarantee the task delays as expected. This also involved
replacing/removing custom sleep functions.

Patch is compile-tested.

Signed-off-by: Nishanth Aravamudan <[EMAIL PROTECTED]>
Signed-off-by: Jaroslav Kysela <[EMAIL PROTECTED]>

 sound/usb/usbaudio.c            |    4 ++--
 sound/usb/usx2y/usX2Yhwdep.c    |    3 +--
 sound/usb/usx2y/usx2yhwdeppcm.c |    6 ++----
 3 files changed, 5 insertions(+), 8 deletions(-)

diff --git a/sound/usb/usbaudio.c b/sound/usb/usbaudio.c
--- a/sound/usb/usbaudio.c
+++ b/sound/usb/usbaudio.c
@@ -792,7 +792,7 @@ static int start_urbs(snd_usb_substream_
  */
 static int wait_clear_urbs(snd_usb_substream_t *subs)
 {
-       int timeout = HZ;
+       unsigned long end_time = jiffies + msecs_to_jiffies(1000);
        unsigned int i;
        int alive;
 
@@ -812,7 +812,7 @@ static int wait_clear_urbs(snd_usb_subst
                        break;
                set_current_state(TASK_UNINTERRUPTIBLE);
                schedule_timeout(1);
-       } while (--timeout > 0);
+       } while (time_before(jiffies, end_time));
        if (alive)
                snd_printk(KERN_ERR "timeout: still %d active urbs..\n", alive);
        return 0;
diff --git a/sound/usb/usx2y/usX2Yhwdep.c b/sound/usb/usx2y/usX2Yhwdep.c
--- a/sound/usb/usx2y/usX2Yhwdep.c
+++ b/sound/usb/usx2y/usX2Yhwdep.c
@@ -232,8 +232,7 @@ static int snd_usX2Y_hwdep_dsp_load(snd_
        if (err)
                return err;
        if (dsp->index == 1) {
-               set_current_state(TASK_UNINTERRUPTIBLE);
-               schedule_timeout(HZ/4);                 // give the device some 
time 
+               msleep(250);                            // give the device some 
time
                err = usX2Y_AsyncSeq04_init(priv);
                if (err) {
                        snd_printk("usX2Y_AsyncSeq04_init error \n");
diff --git a/sound/usb/usx2y/usx2yhwdeppcm.c b/sound/usb/usx2y/usx2yhwdeppcm.c
--- a/sound/usb/usx2y/usx2yhwdeppcm.c
+++ b/sound/usb/usx2y/usx2yhwdeppcm.c
@@ -50,6 +50,7 @@
    Currently rawusb dma pcm buffer transport (this file) is only available to 
snd-usb-usx2y. 
 */
 
+#include <linux/delay.h>
 #include "usbusx2yaudio.c"
 
 #if defined(USX2Y_NRPACKS_VARIABLE) || (!defined(USX2Y_NRPACKS_VARIABLE) &&  
USX2Y_NRPACKS == 1)
@@ -520,11 +521,8 @@ static int snd_usX2Y_usbpcm_prepare(snd_
                usX2Y->hwdep_pcm_shm->playback_iso_start = -1;
                if (atomic_read(&subs->state) < state_PREPARED) {
                        while (usX2Y_iso_frames_per_buffer(runtime, usX2Y) > 
usX2Y->hwdep_pcm_shm->captured_iso_frames) {
-                               signed long timeout;
                                snd_printd("Wait: 
iso_frames_per_buffer=%i,captured_iso_frames=%i\n", 
usX2Y_iso_frames_per_buffer(runtime, usX2Y), 
usX2Y->hwdep_pcm_shm->captured_iso_frames);
-                               set_current_state(TASK_INTERRUPTIBLE);
-                               timeout = schedule_timeout(HZ/100 + 1);
-                               if (signal_pending(current)) {
+                               if (msleep_interruptible(10)) {
                                        err = -ERESTARTSYS;
                                        goto up_prepare_mutex;
                                }
-
To unsubscribe from this list: send the line "unsubscribe bk-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to