* [KJ] [PATCH] sound/cs4231_lib: replace schedule_timeout() with
@ 2004-11-02 19:29 Nishanth Aravamudan
2004-11-03 9:22 ` [PATCH] sound/cs4231_lib: replace schedule_timeout() with msleep() Clemens Ladisch
2004-11-03 9:22 ` [KJ] Re: [Alsa-devel] [PATCH] sound/cs4231_lib: replace Clemens Ladisch
0 siblings, 2 replies; 12+ messages in thread
From: Nishanth Aravamudan @ 2004-11-02 19:29 UTC (permalink / raw)
To: kernel-janitors
[-- Attachment #1: Type: text/plain, Size: 3788 bytes --]
On Tue, Nov 02, 2004 at 01:20:04PM +0100, Clemens Ladisch wrote:
> Nishanth Aravamudan wrote:
> > sound/isa/cs423x/cs4231_lib.c
> >
> > which contains the following code:
> >
> > timeout = HZ / 4 / 2;
> > time = 2;
> > while (snd_cs4231_in(chip, CS4231_TEST_INIT) & CS4231_CALIB_IN_PROGRESS) {
> > set_current_state(TASK_INTERRUPTIBLE);
> > time = schedule_timeout(time);
> > if (time > 0)
> > continue;
> > time = 2;
> > if (--timeout < 0) {
> > snd_printk("mce_down - auto calibration time out (2)\n");
> > return;
> > }
> > }
> >
> > This code seems pretty strange, as the delay is in terms of time, which
> > seems to mean the loop (as long as the condition is true, of course)
> > sleeps for 2 jiffies, then sleeps for another 2, about HZ / 4 / 2 (HZ /
> > 8) times. This results in a maximal delay of HZ / 4 jiffies...
>
> This code was introduced in revision 1.29:
> http://cvs.sourceforge.net/viewcvs.py/alsa/alsa-kernel/isa/cs423x/cs4231_lib.c?rev=HEAD&view=log#rev1.29
>
> Originally, there was a single timeout of 250 ms, but it had to be
> split up into several waits to be able to check the chip status more
> frequently.
>
> There is no reason to use 2 jiffies -- the code was written assuming
> HZ=100 (for 20ms waits), but now this isn't the case anyway.
>
> BTW: Using TASK_INTERRUPTIBLE isn't quite correct because we don't
> check for signals here.
Ok, great! Thanks for the information! How about the following patch? I
tried to follow the information you gave me as well as what I saw as the
original intent of the code. Of course, I am open to changes... Also,
there is similar code in sound/sparc/cs4231.c. Can similar changes be
made there? It seems like it should be possible, as long as I keep the
irq_* functions in place.
Finally, I used TASK_UNINTERRUPTIBLE (i.e. msleep()). This, though, will
guarantee that the task sleeps *at least* the requested time (20 ms per
iteration). This may lead to a longer delay than desired, for instance,
if perhaps the condition should be checked after each signal. I can make
this change, of course, and use msleep_interruptible() instead, which to
me makes a little more sense...
-Nish
Description: Uses msleep() instead of schedule_timeout() to guarantee
the task delays as expected. This lead to several related changes, as
the current code assumes the value of HZ is 100. Use timeout as an
iteration variable to count out how many 20ms delays should be used.
Signed-off-by: Nishanth Aravamudan <nacc@us.ibm.com>
--- 2.6.10-rc1-vanilla/sound/isa/cs423x/cs4231_lib.c 2004-10-30 15:34:19.000000000 -0700
+++ 2.6.10-rc1/sound/isa/cs423x/cs4231_lib.c 2004-11-02 11:27:40.000000000 -0800
@@ -390,34 +390,26 @@ void snd_cs4231_mce_down(cs4231_t *chip)
#if 0
printk("(2) timeout = %i, jiffies = %li\n", timeout, jiffies);
#endif
- timeout = HZ / 4 / 2;
- time = 2;
+ /* in 20 ms increments, check condition, up to 260 ms */
+ timeout = 8;
while (snd_cs4231_in(chip, CS4231_TEST_INIT) & CS4231_CALIB_IN_PROGRESS) {
- set_current_state(TASK_INTERRUPTIBLE);
- time = schedule_timeout(time);
- if (time > 0)
- continue;
- time = 2;
if (--timeout < 0) {
snd_printk("mce_down - auto calibration time out (2)\n");
return;
}
+ msleep(20);
}
#if 0
printk("(3) jiffies = %li\n", jiffies);
#endif
- timeout = HZ / 10 / 2;
- time = 2;
+ /* in 20 ms increments, check condition, up to 100 ms */
+ timeout = 5;
while (cs4231_inb(chip, CS4231P(REGSEL)) & CS4231_INIT) {
- set_current_state(TASK_INTERRUPTIBLE);
- time = schedule_timeout(time);
- if (time > 0)
- continue;
- time = 2;
if (--timeout < 0) {
snd_printk(KERN_ERR "mce_down - auto calibration time out (3)\n");
return;
}
+ msleep(20);
}
#if 0
printk("(4) jiffies = %li\n", jiffies);
[-- Attachment #2: Type: text/plain, Size: 167 bytes --]
_______________________________________________
Kernel-janitors mailing list
Kernel-janitors@lists.osdl.org
http://lists.osdl.org/mailman/listinfo/kernel-janitors
^ permalink raw reply [flat|nested] 12+ messages in thread
* [KJ] [PATCH] sound/cs4231: replace schedule_timeout() with
@ 2004-11-02 19:40 Nishanth Aravamudan
2004-11-03 9:31 ` [PATCH] sound/cs4231: replace schedule_timeout() with msleep_interruptible() Clemens Ladisch
0 siblings, 1 reply; 12+ messages in thread
From: Nishanth Aravamudan @ 2004-11-02 19:40 UTC (permalink / raw)
To: kernel-janitors
[-- Attachment #1: Type: text/plain, Size: 1686 bytes --]
Description: Uses msleep_interruptible() instead of schedule_timeout()
to guarantee the task delays as expected. Changes the type of time to
match the return value of msleep_interruptible().
Signed-off-by: Nishanth Aravamudan <nacc@us.ibm.com>
--- 2.6.10-rc1-vanilla/sound/sparc/cs4231.c 2004-10-30 15:34:20.000000000 -0700
+++ 2.6.10-rc1/sound/sparc/cs4231.c 2004-11-02 11:35:00.000000000 -0800
@@ -560,7 +560,7 @@ static void snd_cs4231_mce_down(cs4231_t
{
unsigned long flags;
int timeout;
- signed long time;
+ unsigned long time;
spin_lock_irqsave(&chip->lock, flags);
snd_cs4231_busy_wait(chip);
@@ -594,29 +594,27 @@ static void snd_cs4231_mce_down(cs4231_t
#if 0
printk("(2) timeout = %i, jiffies = %li\n", timeout, jiffies);
#endif
- time = HZ / 4;
+ time = 250;
while (snd_cs4231_in(chip, CS4231_TEST_INIT) & CS4231_CALIB_IN_PROGRESS) {
spin_unlock_irqrestore(&chip->lock, flags);
if (time <= 0) {
snd_printk("mce_down - auto calibration time out (2)\n");
return;
}
- set_current_state(TASK_INTERRUPTIBLE);
- time = schedule_timeout(time);
+ time = msleep_interruptible(time);
spin_lock_irqsave(&chip->lock, flags);
}
#if 0
printk("(3) jiffies = %li\n", jiffies);
#endif
- time = HZ / 10;
+ time = 100;
while (__cs4231_readb(chip, CS4231P(chip, REGSEL)) & CS4231_INIT) {
spin_unlock_irqrestore(&chip->lock, flags);
if (time <= 0) {
snd_printk("mce_down - auto calibration time out (3)\n");
return;
}
- set_current_state(TASK_INTERRUPTIBLE);
- time = schedule_timeout(time);
+ time = msleep_interruptible(time);
spin_lock_irqsave(&chip->lock, flags);
}
spin_unlock_irqrestore(&chip->lock, flags);
[-- Attachment #2: Type: text/plain, Size: 167 bytes --]
_______________________________________________
Kernel-janitors mailing list
Kernel-janitors@lists.osdl.org
http://lists.osdl.org/mailman/listinfo/kernel-janitors
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH] sound/cs4231_lib: replace schedule_timeout() with msleep()
2004-11-02 19:29 [KJ] [PATCH] sound/cs4231_lib: replace schedule_timeout() with Nishanth Aravamudan
@ 2004-11-03 9:22 ` Clemens Ladisch
2004-11-03 9:22 ` [KJ] Re: [Alsa-devel] [PATCH] sound/cs4231_lib: replace Clemens Ladisch
1 sibling, 0 replies; 12+ messages in thread
From: Clemens Ladisch @ 2004-11-03 9:22 UTC (permalink / raw)
To: Nishanth Aravamudan; +Cc: perex, alsa-devel, kernel-janitors
Nishanth Aravamudan wrote:
> [...]
> How about the following patch?
Applied, with some changes (see below).
> I used TASK_UNINTERRUPTIBLE (i.e. msleep()). This, though, will
> guarantee that the task sleeps *at least* the requested time (20
> ms per iteration). This may lead to a longer delay than desired,
> for instance, if perhaps the condition should be checked after
> each signal.
This code was never intended to handle signals; using
TASK_INTERRUPTIBLE was a bug.
20 ms happens to be the usual calibration time of the original CS4231
chip (so it was expected to stop after the first iteration), but there
are many clones that might need a slightly different time, so I
changed it to 10 ms. However, this doesn't really matter. :)
Finally, I removed the time variable because it wasn't used anymore.
Clemens
Index: alsa-kernel/isa/cs423x/cs4231_lib.c
===================================================================
RCS file: /cvsroot/alsa/alsa-kernel/isa/cs423x/cs4231_lib.c,v
retrieving revision 1.43
retrieving revision 1.44
diff -u -r1.43 -r1.44
--- alsa-kernel/isa/cs423x/cs4231_lib.c 20 Jul 2004 15:54:22 -0000 1.43
+++ alsa-kernel/isa/cs423x/cs4231_lib.c 3 Nov 2004 09:10:40 -0000 1.44
@@ -356,7 +356,6 @@
{
unsigned long flags;
int timeout;
- signed long time;
snd_cs4231_busy_wait(chip);
#if 0
@@ -390,34 +389,26 @@
#if 0
printk("(2) timeout = %i, jiffies = %li\n", timeout, jiffies);
#endif
- timeout = HZ / 4 / 2;
- time = 2;
+ /* in 10 ms increments, check condition, up to 250 ms */
+ timeout = 25;
while (snd_cs4231_in(chip, CS4231_TEST_INIT) & CS4231_CALIB_IN_PROGRESS) {
- set_current_state(TASK_INTERRUPTIBLE);
- time = schedule_timeout(time);
- if (time > 0)
- continue;
- time = 2;
if (--timeout < 0) {
snd_printk("mce_down - auto calibration time out (2)\n");
return;
}
+ msleep(10);
}
#if 0
printk("(3) jiffies = %li\n", jiffies);
#endif
- timeout = HZ / 10 / 2;
- time = 2;
+ /* in 10 ms increments, check condition, up to 100 ms */
+ timeout = 10;
while (cs4231_inb(chip, CS4231P(REGSEL)) & CS4231_INIT) {
- set_current_state(TASK_INTERRUPTIBLE);
- time = schedule_timeout(time);
- if (time > 0)
- continue;
- time = 2;
if (--timeout < 0) {
snd_printk(KERN_ERR "mce_down - auto calibration time out (3)\n");
return;
}
+ msleep(10);
}
#if 0
printk("(4) jiffies = %li\n", jiffies);
-------------------------------------------------------
This SF.Net email is sponsored by:
Sybase ASE Linux Express Edition - download now for FREE
LinuxWorld Reader's Choice Award Winner for best database on Linux.
http://ads.osdn.com/?ad_id=5588&alloc_id=12065&op=click
^ permalink raw reply [flat|nested] 12+ messages in thread
* [KJ] Re: [Alsa-devel] [PATCH] sound/cs4231_lib: replace
@ 2004-11-03 9:22 ` Clemens Ladisch
2004-11-03 9:31 ` [KJ] Re: [Alsa-devel] [PATCH] sound/cs4231: replace Clemens Ladisch
` (4 more replies)
0 siblings, 5 replies; 12+ messages in thread
From: Clemens Ladisch @ 2004-11-03 9:22 UTC (permalink / raw)
To: kernel-janitors
[-- Attachment #1: Type: TEXT/PLAIN, Size: 2394 bytes --]
Nishanth Aravamudan wrote:
> [...]
> How about the following patch?
Applied, with some changes (see below).
> I used TASK_UNINTERRUPTIBLE (i.e. msleep()). This, though, will
> guarantee that the task sleeps *at least* the requested time (20
> ms per iteration). This may lead to a longer delay than desired,
> for instance, if perhaps the condition should be checked after
> each signal.
This code was never intended to handle signals; using
TASK_INTERRUPTIBLE was a bug.
20 ms happens to be the usual calibration time of the original CS4231
chip (so it was expected to stop after the first iteration), but there
are many clones that might need a slightly different time, so I
changed it to 10 ms. However, this doesn't really matter. :)
Finally, I removed the time variable because it wasn't used anymore.
Clemens
Index: alsa-kernel/isa/cs423x/cs4231_lib.c
===================================================================
RCS file: /cvsroot/alsa/alsa-kernel/isa/cs423x/cs4231_lib.c,v
retrieving revision 1.43
retrieving revision 1.44
diff -u -r1.43 -r1.44
--- alsa-kernel/isa/cs423x/cs4231_lib.c 20 Jul 2004 15:54:22 -0000 1.43
+++ alsa-kernel/isa/cs423x/cs4231_lib.c 3 Nov 2004 09:10:40 -0000 1.44
@@ -356,7 +356,6 @@
{
unsigned long flags;
int timeout;
- signed long time;
snd_cs4231_busy_wait(chip);
#if 0
@@ -390,34 +389,26 @@
#if 0
printk("(2) timeout = %i, jiffies = %li\n", timeout, jiffies);
#endif
- timeout = HZ / 4 / 2;
- time = 2;
+ /* in 10 ms increments, check condition, up to 250 ms */
+ timeout = 25;
while (snd_cs4231_in(chip, CS4231_TEST_INIT) & CS4231_CALIB_IN_PROGRESS) {
- set_current_state(TASK_INTERRUPTIBLE);
- time = schedule_timeout(time);
- if (time > 0)
- continue;
- time = 2;
if (--timeout < 0) {
snd_printk("mce_down - auto calibration time out (2)\n");
return;
}
+ msleep(10);
}
#if 0
printk("(3) jiffies = %li\n", jiffies);
#endif
- timeout = HZ / 10 / 2;
- time = 2;
+ /* in 10 ms increments, check condition, up to 100 ms */
+ timeout = 10;
while (cs4231_inb(chip, CS4231P(REGSEL)) & CS4231_INIT) {
- set_current_state(TASK_INTERRUPTIBLE);
- time = schedule_timeout(time);
- if (time > 0)
- continue;
- time = 2;
if (--timeout < 0) {
snd_printk(KERN_ERR "mce_down - auto calibration time out (3)\n");
return;
}
+ msleep(10);
}
#if 0
printk("(4) jiffies = %li\n", jiffies);
[-- Attachment #2: Type: text/plain, Size: 167 bytes --]
_______________________________________________
Kernel-janitors mailing list
Kernel-janitors@lists.osdl.org
http://lists.osdl.org/mailman/listinfo/kernel-janitors
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH] sound/cs4231: replace schedule_timeout() with msleep_interruptible()
2004-11-02 19:40 [KJ] [PATCH] sound/cs4231: replace schedule_timeout() with Nishanth Aravamudan
@ 2004-11-03 9:31 ` Clemens Ladisch
0 siblings, 0 replies; 12+ messages in thread
From: Clemens Ladisch @ 2004-11-03 9:31 UTC (permalink / raw)
To: Nishanth Aravamudan; +Cc: perex, kernel-janitors, alsa-devel
Nishanth Aravamudan wrote:
> + time = 250;
> while (snd_cs4231_in(chip, CS4231_TEST_INIT) & CS4231_CALIB_IN_PROGRESS) {
> spin_unlock_irqrestore(&chip->lock, flags);
> if (time <= 0) {
> snd_printk("mce_down - auto calibration time out (2)\n");
> return;
> }
> - set_current_state(TASK_INTERRUPTIBLE);
> - time = schedule_timeout(time);
> + time = msleep_interruptible(time);
> spin_lock_irqsave(&chip->lock, flags);
> }
>
> Description: Uses msleep_interruptible() instead of schedule_timeout()
> to guarantee the task delays as expected.
The SPARC driver originated as a copy of the ISA driver and still has
the problem that was fixed there, i.e., it uses a single 250 ms wait
(which results in a delay of several seconds if OSS programs try to
enumerate sample rates).
Like the ISA driver, this driver should check the hardware status more
often so that the wait can be aborted as soon as the calibration has
finished.
And this driver doesn't expect do receive signals; using msleep()
would be just fine.
Clemens
-------------------------------------------------------
This SF.Net email is sponsored by:
Sybase ASE Linux Express Edition - download now for FREE
LinuxWorld Reader's Choice Award Winner for best database on Linux.
http://ads.osdn.com/?ad_id=5588&alloc_id=12065&op=click
^ permalink raw reply [flat|nested] 12+ messages in thread
* [KJ] Re: [Alsa-devel] [PATCH] sound/cs4231: replace
2004-11-03 9:22 ` [KJ] Re: [Alsa-devel] [PATCH] sound/cs4231_lib: replace Clemens Ladisch
@ 2004-11-03 9:31 ` Clemens Ladisch
2004-11-03 18:03 ` [PATCH] sound/cs4231: replace schedule_timeout() with msleep_interruptible() Nishanth Aravamudan
2004-11-03 17:56 ` [KJ] Re: [Alsa-devel] [PATCH] sound/cs4231_lib: replace Nishanth Aravamudan
` (3 subsequent siblings)
4 siblings, 1 reply; 12+ messages in thread
From: Clemens Ladisch @ 2004-11-03 9:31 UTC (permalink / raw)
To: kernel-janitors
[-- Attachment #1: Type: TEXT/PLAIN, Size: 1049 bytes --]
Nishanth Aravamudan wrote:
> + time = 250;
> while (snd_cs4231_in(chip, CS4231_TEST_INIT) & CS4231_CALIB_IN_PROGRESS) {
> spin_unlock_irqrestore(&chip->lock, flags);
> if (time <= 0) {
> snd_printk("mce_down - auto calibration time out (2)\n");
> return;
> }
> - set_current_state(TASK_INTERRUPTIBLE);
> - time = schedule_timeout(time);
> + time = msleep_interruptible(time);
> spin_lock_irqsave(&chip->lock, flags);
> }
>
> Description: Uses msleep_interruptible() instead of schedule_timeout()
> to guarantee the task delays as expected.
The SPARC driver originated as a copy of the ISA driver and still has
the problem that was fixed there, i.e., it uses a single 250 ms wait
(which results in a delay of several seconds if OSS programs try to
enumerate sample rates).
Like the ISA driver, this driver should check the hardware status more
often so that the wait can be aborted as soon as the calibration has
finished.
And this driver doesn't expect do receive signals; using msleep()
would be just fine.
Clemens
[-- Attachment #2: Type: text/plain, Size: 167 bytes --]
_______________________________________________
Kernel-janitors mailing list
Kernel-janitors@lists.osdl.org
http://lists.osdl.org/mailman/listinfo/kernel-janitors
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH] sound/cs4231_lib: replace schedule_timeout() with msleep()
2004-11-03 9:22 ` [KJ] Re: [Alsa-devel] [PATCH] sound/cs4231_lib: replace Clemens Ladisch
2004-11-03 9:31 ` [KJ] Re: [Alsa-devel] [PATCH] sound/cs4231: replace Clemens Ladisch
2004-11-03 17:56 ` [KJ] Re: [Alsa-devel] [PATCH] sound/cs4231_lib: replace Nishanth Aravamudan
@ 2004-11-03 17:56 ` Nishanth Aravamudan
2004-11-03 18:03 ` [KJ] Re: [Alsa-devel] [PATCH] sound/cs4231: replace Nishanth Aravamudan
2004-11-04 7:58 ` [KJ] Re: [Alsa-devel] [PATCH] sound/cs4231: replace Clemens Ladisch
4 siblings, 0 replies; 12+ messages in thread
From: Nishanth Aravamudan @ 2004-11-03 17:56 UTC (permalink / raw)
To: Clemens Ladisch; +Cc: perex, alsa-devel, kernel-janitors
On Wed, Nov 03, 2004 at 10:22:34AM +0100, Clemens Ladisch wrote:
> Nishanth Aravamudan wrote:
> > [...]
> > How about the following patch?
>
> Applied, with some changes (see below).
>
> > I used TASK_UNINTERRUPTIBLE (i.e. msleep()). This, though, will
> > guarantee that the task sleeps *at least* the requested time (20
> > ms per iteration). This may lead to a longer delay than desired,
> > for instance, if perhaps the condition should be checked after
> > each signal.
>
> This code was never intended to handle signals; using
> TASK_INTERRUPTIBLE was a bug.
>
> 20 ms happens to be the usual calibration time of the original CS4231
> chip (so it was expected to stop after the first iteration), but there
> are many clones that might need a slightly different time, so I
> changed it to 10 ms. However, this doesn't really matter. :)
>
> Finally, I removed the time variable because it wasn't used anymore.
Great,i
Acked-by: Nishanth Aravamudan <nacc@us.ibm.com>
I will resend the sparc patch now.
-Nish
-------------------------------------------------------
This SF.Net email is sponsored by:
Sybase ASE Linux Express Edition - download now for FREE
LinuxWorld Reader's Choice Award Winner for best database on Linux.
http://ads.osdn.com/?ad_id=5588&alloc_id=12065&op=click
^ permalink raw reply [flat|nested] 12+ messages in thread
* [KJ] Re: [Alsa-devel] [PATCH] sound/cs4231_lib: replace
2004-11-03 9:22 ` [KJ] Re: [Alsa-devel] [PATCH] sound/cs4231_lib: replace Clemens Ladisch
2004-11-03 9:31 ` [KJ] Re: [Alsa-devel] [PATCH] sound/cs4231: replace Clemens Ladisch
@ 2004-11-03 17:56 ` Nishanth Aravamudan
2004-11-03 17:56 ` [PATCH] sound/cs4231_lib: replace schedule_timeout() with msleep() Nishanth Aravamudan
` (2 subsequent siblings)
4 siblings, 0 replies; 12+ messages in thread
From: Nishanth Aravamudan @ 2004-11-03 17:56 UTC (permalink / raw)
To: kernel-janitors
[-- Attachment #1: Type: text/plain, Size: 1021 bytes --]
On Wed, Nov 03, 2004 at 10:22:34AM +0100, Clemens Ladisch wrote:
> Nishanth Aravamudan wrote:
> > [...]
> > How about the following patch?
>
> Applied, with some changes (see below).
>
> > I used TASK_UNINTERRUPTIBLE (i.e. msleep()). This, though, will
> > guarantee that the task sleeps *at least* the requested time (20
> > ms per iteration). This may lead to a longer delay than desired,
> > for instance, if perhaps the condition should be checked after
> > each signal.
>
> This code was never intended to handle signals; using
> TASK_INTERRUPTIBLE was a bug.
>
> 20 ms happens to be the usual calibration time of the original CS4231
> chip (so it was expected to stop after the first iteration), but there
> are many clones that might need a slightly different time, so I
> changed it to 10 ms. However, this doesn't really matter. :)
>
> Finally, I removed the time variable because it wasn't used anymore.
Great,i
Acked-by: Nishanth Aravamudan <nacc@us.ibm.com>
I will resend the sparc patch now.
-Nish
[-- Attachment #2: Type: text/plain, Size: 167 bytes --]
_______________________________________________
Kernel-janitors mailing list
Kernel-janitors@lists.osdl.org
http://lists.osdl.org/mailman/listinfo/kernel-janitors
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH] sound/cs4231: replace schedule_timeout() with msleep_interruptible()
2004-11-03 9:31 ` [KJ] Re: [Alsa-devel] [PATCH] sound/cs4231: replace Clemens Ladisch
@ 2004-11-03 18:03 ` Nishanth Aravamudan
0 siblings, 0 replies; 12+ messages in thread
From: Nishanth Aravamudan @ 2004-11-03 18:03 UTC (permalink / raw)
To: Clemens Ladisch; +Cc: perex, kernel-janitors, alsa-devel
On Wed, Nov 03, 2004 at 10:31:42AM +0100, Clemens Ladisch wrote:
> Nishanth Aravamudan wrote:
> > + time = 250;
> > while (snd_cs4231_in(chip, CS4231_TEST_INIT) & CS4231_CALIB_IN_PROGRESS) {
> > spin_unlock_irqrestore(&chip->lock, flags);
> > if (time <= 0) {
> > snd_printk("mce_down - auto calibration time out (2)\n");
> > return;
> > }
> > - set_current_state(TASK_INTERRUPTIBLE);
> > - time = schedule_timeout(time);
> > + time = msleep_interruptible(time);
> > spin_lock_irqsave(&chip->lock, flags);
> > }
> >
> > Description: Uses msleep_interruptible() instead of schedule_timeout()
> > to guarantee the task delays as expected.
>
> The SPARC driver originated as a copy of the ISA driver and still has
> the problem that was fixed there, i.e., it uses a single 250 ms wait
> (which results in a delay of several seconds if OSS programs try to
> enumerate sample rates).
>
> Like the ISA driver, this driver should check the hardware status more
> often so that the wait can be aborted as soon as the calibration has
> finished.
>
> And this driver doesn't expect do receive signals; using msleep()
> would be just fine.
These changes have been made in the following patch. Does it look better
now?
-Nish
Description: Uses msleep_interruptible() instead of schedule_timeout()
to guarantee the task delays as expected. Changes the type of time to
match the return value of msleep_interruptible().
Signed-off-by: Nishanth Aravamudan <nacc@us.ibm.com>
--- 2.6.10-rc1-vanilla/sound/sparc/cs4231.c 2004-10-30 15:34:20.000000000 -0700
+++ 2.6.10-rc1/sound/sparc/cs4231.c 2004-11-03 10:01:47.000000000 -0800
@@ -560,7 +560,6 @@ static void snd_cs4231_mce_down(cs4231_t
{
unsigned long flags;
int timeout;
- signed long time;
spin_lock_irqsave(&chip->lock, flags);
snd_cs4231_busy_wait(chip);
@@ -594,29 +593,29 @@ static void snd_cs4231_mce_down(cs4231_t
#if 0
printk("(2) timeout = %i, jiffies = %li\n", timeout, jiffies);
#endif
- time = HZ / 4;
+ /* in 10ms increments, check condition, up to 250ms */
+ timeout = 25;
while (snd_cs4231_in(chip, CS4231_TEST_INIT) & CS4231_CALIB_IN_PROGRESS) {
spin_unlock_irqrestore(&chip->lock, flags);
- if (time <= 0) {
+ if (--timeout < 0) {
snd_printk("mce_down - auto calibration time out (2)\n");
return;
}
- set_current_state(TASK_INTERRUPTIBLE);
- time = schedule_timeout(time);
+ msleep(10);
spin_lock_irqsave(&chip->lock, flags);
}
#if 0
printk("(3) jiffies = %li\n", jiffies);
#endif
- time = HZ / 10;
+ /* in 10ms increments, check condition, up to 100ms */
+ timeout = 10;
while (__cs4231_readb(chip, CS4231P(chip, REGSEL)) & CS4231_INIT) {
spin_unlock_irqrestore(&chip->lock, flags);
- if (time <= 0) {
+ if (--timeout < 0) {
snd_printk("mce_down - auto calibration time out (3)\n");
return;
}
- set_current_state(TASK_INTERRUPTIBLE);
- time = schedule_timeout(time);
+ msleep(10);
spin_lock_irqsave(&chip->lock, flags);
}
spin_unlock_irqrestore(&chip->lock, flags);
-------------------------------------------------------
This SF.Net email is sponsored by:
Sybase ASE Linux Express Edition - download now for FREE
LinuxWorld Reader's Choice Award Winner for best database on Linux.
http://ads.osdn.com/?ad_id=5588&alloc_id=12065&op=click
^ permalink raw reply [flat|nested] 12+ messages in thread
* [KJ] Re: [Alsa-devel] [PATCH] sound/cs4231: replace
2004-11-03 9:22 ` [KJ] Re: [Alsa-devel] [PATCH] sound/cs4231_lib: replace Clemens Ladisch
` (2 preceding siblings ...)
2004-11-03 17:56 ` [PATCH] sound/cs4231_lib: replace schedule_timeout() with msleep() Nishanth Aravamudan
@ 2004-11-03 18:03 ` Nishanth Aravamudan
2004-11-04 7:58 ` [PATCH] sound/cs4231: replace schedule_timeout() with msleep_interruptible() Clemens Ladisch
2004-11-04 7:58 ` [KJ] Re: [Alsa-devel] [PATCH] sound/cs4231: replace Clemens Ladisch
4 siblings, 1 reply; 12+ messages in thread
From: Nishanth Aravamudan @ 2004-11-03 18:03 UTC (permalink / raw)
To: kernel-janitors
[-- Attachment #1: Type: text/plain, Size: 3030 bytes --]
On Wed, Nov 03, 2004 at 10:31:42AM +0100, Clemens Ladisch wrote:
> Nishanth Aravamudan wrote:
> > + time = 250;
> > while (snd_cs4231_in(chip, CS4231_TEST_INIT) & CS4231_CALIB_IN_PROGRESS) {
> > spin_unlock_irqrestore(&chip->lock, flags);
> > if (time <= 0) {
> > snd_printk("mce_down - auto calibration time out (2)\n");
> > return;
> > }
> > - set_current_state(TASK_INTERRUPTIBLE);
> > - time = schedule_timeout(time);
> > + time = msleep_interruptible(time);
> > spin_lock_irqsave(&chip->lock, flags);
> > }
> >
> > Description: Uses msleep_interruptible() instead of schedule_timeout()
> > to guarantee the task delays as expected.
>
> The SPARC driver originated as a copy of the ISA driver and still has
> the problem that was fixed there, i.e., it uses a single 250 ms wait
> (which results in a delay of several seconds if OSS programs try to
> enumerate sample rates).
>
> Like the ISA driver, this driver should check the hardware status more
> often so that the wait can be aborted as soon as the calibration has
> finished.
>
> And this driver doesn't expect do receive signals; using msleep()
> would be just fine.
These changes have been made in the following patch. Does it look better
now?
-Nish
Description: Uses msleep_interruptible() instead of schedule_timeout()
to guarantee the task delays as expected. Changes the type of time to
match the return value of msleep_interruptible().
Signed-off-by: Nishanth Aravamudan <nacc@us.ibm.com>
--- 2.6.10-rc1-vanilla/sound/sparc/cs4231.c 2004-10-30 15:34:20.000000000 -0700
+++ 2.6.10-rc1/sound/sparc/cs4231.c 2004-11-03 10:01:47.000000000 -0800
@@ -560,7 +560,6 @@ static void snd_cs4231_mce_down(cs4231_t
{
unsigned long flags;
int timeout;
- signed long time;
spin_lock_irqsave(&chip->lock, flags);
snd_cs4231_busy_wait(chip);
@@ -594,29 +593,29 @@ static void snd_cs4231_mce_down(cs4231_t
#if 0
printk("(2) timeout = %i, jiffies = %li\n", timeout, jiffies);
#endif
- time = HZ / 4;
+ /* in 10ms increments, check condition, up to 250ms */
+ timeout = 25;
while (snd_cs4231_in(chip, CS4231_TEST_INIT) & CS4231_CALIB_IN_PROGRESS) {
spin_unlock_irqrestore(&chip->lock, flags);
- if (time <= 0) {
+ if (--timeout < 0) {
snd_printk("mce_down - auto calibration time out (2)\n");
return;
}
- set_current_state(TASK_INTERRUPTIBLE);
- time = schedule_timeout(time);
+ msleep(10);
spin_lock_irqsave(&chip->lock, flags);
}
#if 0
printk("(3) jiffies = %li\n", jiffies);
#endif
- time = HZ / 10;
+ /* in 10ms increments, check condition, up to 100ms */
+ timeout = 10;
while (__cs4231_readb(chip, CS4231P(chip, REGSEL)) & CS4231_INIT) {
spin_unlock_irqrestore(&chip->lock, flags);
- if (time <= 0) {
+ if (--timeout < 0) {
snd_printk("mce_down - auto calibration time out (3)\n");
return;
}
- set_current_state(TASK_INTERRUPTIBLE);
- time = schedule_timeout(time);
+ msleep(10);
spin_lock_irqsave(&chip->lock, flags);
}
spin_unlock_irqrestore(&chip->lock, flags);
[-- Attachment #2: Type: text/plain, Size: 167 bytes --]
_______________________________________________
Kernel-janitors mailing list
Kernel-janitors@lists.osdl.org
http://lists.osdl.org/mailman/listinfo/kernel-janitors
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH] sound/cs4231: replace schedule_timeout() with msleep_interruptible()
2004-11-03 18:03 ` [KJ] Re: [Alsa-devel] [PATCH] sound/cs4231: replace Nishanth Aravamudan
@ 2004-11-04 7:58 ` Clemens Ladisch
0 siblings, 0 replies; 12+ messages in thread
From: Clemens Ladisch @ 2004-11-04 7:58 UTC (permalink / raw)
To: Nishanth Aravamudan; +Cc: perex, kernel-janitors, alsa-devel
Nishanth Aravamudan wrote:
> [...]
> These changes have been made in the following patch. Does it look better
> now?
Yes. Applied.
Thanks!
Clemens
-------------------------------------------------------
This SF.Net email is sponsored by:
Sybase ASE Linux Express Edition - download now for FREE
LinuxWorld Reader's Choice Award Winner for best database on Linux.
http://ads.osdn.com/?ad_id=5588&alloc_id=12065&op=click
^ permalink raw reply [flat|nested] 12+ messages in thread
* [KJ] Re: [Alsa-devel] [PATCH] sound/cs4231: replace
2004-11-03 9:22 ` [KJ] Re: [Alsa-devel] [PATCH] sound/cs4231_lib: replace Clemens Ladisch
` (3 preceding siblings ...)
2004-11-03 18:03 ` [KJ] Re: [Alsa-devel] [PATCH] sound/cs4231: replace Nishanth Aravamudan
@ 2004-11-04 7:58 ` Clemens Ladisch
4 siblings, 0 replies; 12+ messages in thread
From: Clemens Ladisch @ 2004-11-04 7:58 UTC (permalink / raw)
To: kernel-janitors
[-- Attachment #1: Type: TEXT/PLAIN, Size: 152 bytes --]
Nishanth Aravamudan wrote:
> [...]
> These changes have been made in the following patch. Does it look better
> now?
Yes. Applied.
Thanks!
Clemens
[-- Attachment #2: Type: text/plain, Size: 167 bytes --]
_______________________________________________
Kernel-janitors mailing list
Kernel-janitors@lists.osdl.org
http://lists.osdl.org/mailman/listinfo/kernel-janitors
^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2004-11-04 7:58 UTC | newest]
Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2004-11-02 19:29 [KJ] [PATCH] sound/cs4231_lib: replace schedule_timeout() with Nishanth Aravamudan
2004-11-03 9:22 ` [PATCH] sound/cs4231_lib: replace schedule_timeout() with msleep() Clemens Ladisch
2004-11-03 9:22 ` [KJ] Re: [Alsa-devel] [PATCH] sound/cs4231_lib: replace Clemens Ladisch
2004-11-03 9:31 ` [KJ] Re: [Alsa-devel] [PATCH] sound/cs4231: replace Clemens Ladisch
2004-11-03 18:03 ` [PATCH] sound/cs4231: replace schedule_timeout() with msleep_interruptible() Nishanth Aravamudan
2004-11-03 17:56 ` [KJ] Re: [Alsa-devel] [PATCH] sound/cs4231_lib: replace Nishanth Aravamudan
2004-11-03 17:56 ` [PATCH] sound/cs4231_lib: replace schedule_timeout() with msleep() Nishanth Aravamudan
2004-11-03 18:03 ` [KJ] Re: [Alsa-devel] [PATCH] sound/cs4231: replace Nishanth Aravamudan
2004-11-04 7:58 ` [PATCH] sound/cs4231: replace schedule_timeout() with msleep_interruptible() Clemens Ladisch
2004-11-04 7:58 ` [KJ] Re: [Alsa-devel] [PATCH] sound/cs4231: replace Clemens Ladisch
-- strict thread matches above, loose matches on Subject: below --
2004-11-02 19:40 [KJ] [PATCH] sound/cs4231: replace schedule_timeout() with Nishanth Aravamudan
2004-11-03 9:31 ` [PATCH] sound/cs4231: replace schedule_timeout() with msleep_interruptible() Clemens Ladisch
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.