Mailing List archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[linux-dvb] Busy waiting in i2c_busy_rise_and_fall (was: Re: Re: full featured card without signal and required video memory investigation)
On Sunday 13 July 2003 04:05, Gregor Lawatscheck wrote:
> At 19:17 12/07/2003, you wrote:
> >[...]
> >I'll check what causes this high load as soon as I
> >get oprofile running on my machine. ;-)
Well, I found the reason for the high cpu load:
i2c_busy_rise_and_fall (saa7146.c) uses mdelay calls, i.e. busy-waiting.
Normally this is no problem, but it consumes 30% of the cpu power when
the frontend thread is unable to tune...
@Michael:
Are ms-delays really required?
After I applied the following patch the cpu load dropped to 3%:
--- saa7146.c.org Mon Nov 18 22:18:46 2002
+++ saa7146.c Sun Jul 13 06:06:22 2003
@@ -1275,7 +1275,7 @@
hprintk("saa7146: ==> i2c_busy_rise_and_fall\n");
/* wait until busy-flag rises */
- for (i = 5; i > 0; i--) {
+ for (i = 1; i > 0; i--) {
hprintk("saa7146: i2c_busy_rise_and_fall; rise wait %d\n",i);
@@ -1286,8 +1286,8 @@
break;
/* see if anything can be done while we're waiting */
- cond_resched ();
- mdelay(1);
+ current->state = TASK_INTERRUPTIBLE;
+ schedule_timeout(1);
}
/* we don't check the i-value, since it does not matter
@@ -1296,7 +1296,7 @@
after an i2c-command has been written out */
/* wait until busy-flag is inactive or error is reported */
- for (i = timeout; i > 0; i--) {
+ for (i = timeout/10; i > 0; i--) {
hprintk("saa7146: i2c_busy_rise_and_fall; fall wait %d\n",i);
@@ -1311,9 +1311,8 @@
break;
/* see if anything can be done while we're waiting */
- cond_resched ();
-
- mdelay(1);
+ current->state = TASK_INTERRUPTIBLE;
+ schedule_timeout(1);
}
/* did a timeout occur ? */
.
Oliver
--
Info:
To unsubscribe send a mail to ecartis@linuxtv.org with "unsubscribe linux-dvb" as subject.
Home |
Main Index |
Thread Index