lkml.org 
[lkml]   [2001]   [Dec]   [7]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
From
Subjecti810_audio.c v0.11 is still broken (deadlocks)
Date
Downloaded i810_audio.c v0.11 this morning. 

After loading it I'm getting system deadlock immediatelly after first attempt
to use sound support as i810_write() calls i810_update_lvi() without setting
PCM_ENABLE_INPUT bit. Added setting this bit in i810_write() and
also some protection against deadlocks in __i810_update_lvi() with
corresponding error message (see attached diffs).

Results: sound seems to work as far as I have tested for not a very long time.

I'm still getting messages that __i810_update_lvi() is called without setting
PCM_ENABLE_INPUT (which would cause deadlock without protection
I added there).

Andris
--- i810_audio.c-0.11 Fri Dec 7 08:29:51 2001
+++ i810_audio.c Fri Dec 7 11:28:32 2001
@@ -959,7 +959,11 @@
} else {
__start_dac(state);
}
- while( !(inb(port + OFF_CR) & ((1<<4) | (1<<2))) ) ;
+ if (dmabuf->trigger & PCM_ENABLE_INPUT) {
+ while( !(inb(port + OFF_CR) & ((1<<4) | (1<<2))) ) ;
+ } else {
+ printk (KERN_ERR "i810_audio: __i810_update_lvi called without setting PCM_ENABLE_INPUT\n");
+ }
}

/* swptr - 1 is the tail of our transfer */
@@ -1509,6 +1513,12 @@
x = dmabuf->fragsize - (swptr % dmabuf->fragsize);
memset(dmabuf->rawbuf + swptr, '\0', x);
}
+ // There is data waiting to be played
+ /*
+ * Force the trigger setting since we would
+ * deadlock with it set any other way
+ */
+ dmabuf->trigger = PCM_ENABLE_OUTPUT;
i810_update_lvi(state,0);
ret:
set_current_state(TASK_RUNNING);
\
 
 \ /
  Last update: 2005-03-22 13:13    [W:0.818 / U:0.112 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site