From: Nishanth Aravamudan <[EMAIL PROTECTED]>
Jaroslav, I realize that you are not the explicit maintainer for any of
these drivers, but I figured you would at least be able to {N,}ACK the
changes. I didn't find any entry in MAINTAINERS for usb-specific sound
drivers. If you would prefer split patches instead of the large
patchset, I can do that.
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]>
---
usbaudio.c | 4 ++--
usx2y/usX2Yhwdep.c | 3 +--
usx2y/usx2yhwdeppcm.c | 6 ++----
3 files changed, 5 insertions(+), 8 deletions(-)
diff -urpN 2.6.13-rc2-kj/sound/usb/usbaudio.c
2.6.13-rc2-kj-dev/sound/usb/usbaudio.c
--- 2.6.13-rc2-kj/sound/usb/usbaudio.c 2005-07-06 07:57:20.000000000 -0700
+++ 2.6.13-rc2-kj-dev/sound/usb/usbaudio.c 2005-07-08 12:33:55.000000000
-0700
@@ -790,7 +790,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;
@@ -810,7 +810,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 -urpN 2.6.13-rc2-kj/sound/usb/usx2y/usX2Yhwdep.c
2.6.13-rc2-kj-dev/sound/usb/usx2y/usX2Yhwdep.c
--- 2.6.13-rc2-kj/sound/usb/usx2y/usX2Yhwdep.c 2005-07-06 07:57:08.000000000
-0700
+++ 2.6.13-rc2-kj-dev/sound/usb/usx2y/usX2Yhwdep.c 2005-07-06
22:56:43.000000000 -0700
@@ -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 -urpN 2.6.13-rc2-kj/sound/usb/usx2y/usx2yhwdeppcm.c
2.6.13-rc2-kj-dev/sound/usb/usx2y/usx2yhwdeppcm.c
--- 2.6.13-rc2-kj/sound/usb/usx2y/usx2yhwdeppcm.c 2005-03-01
23:38:11.000000000 -0800
+++ 2.6.13-rc2-kj-dev/sound/usb/usx2y/usx2yhwdeppcm.c 2005-07-06
22:58:50.000000000 -0700
@@ -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 linux-sound" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at http://vger.kernel.org/majordomo-info.html