i810_audio.c v0.11 is still broken (deadlocks)

Andris Pavenis (pavenis@latnet.lv)
Fri, 7 Dec 2001 12:21:40 +0200


--------------Boundary-00=_44YYUVNPBHZARVSSAF64
Content-Type: text/plain;
charset="iso-8859-13"
Content-Transfer-Encoding: 8bit

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

--------------Boundary-00=_44YYUVNPBHZARVSSAF64
Content-Type: text/x-diff;
charset="iso-8859-13";
name="i810_audio.c.diff"
Content-Transfer-Encoding: 8bit
Content-Disposition: attachment; filename="i810_audio.c.diff"

--- 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);

--------------Boundary-00=_44YYUVNPBHZARVSSAF64--
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/