Update of /cvsroot/alsa/alsa-kernel/core
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv31852/core
Modified Files:
pcm.c pcm_lib.c
Log Message:
- added the support of stack dump at xrun.
enabled by writing to /proc/asound/card*/pcm*/xrun_debug proc file.
built only when CONFIG_SND_DEBUG is set.
Index: pcm.c
===================================================================
RCS file: /cvsroot/alsa/alsa-kernel/core/pcm.c,v
retrieving revision 1.37
retrieving revision 1.38
diff -u -r1.37 -r1.38
--- pcm.c 20 Jan 2004 13:11:33 -0000 1.37
+++ pcm.c 26 Jan 2004 14:04:35 -0000 1.38
@@ -390,6 +390,22 @@
snd_iprintf(buffer, "appl_ptr : %ld\n", runtime->control->appl_ptr);
}
+#ifdef CONFIG_SND_DEBUG
+static void snd_pcm_xrun_debug_read(snd_info_entry_t *entry, snd_info_buffer_t
*buffer)
+{
+ snd_pcm_str_t *pstr = (snd_pcm_str_t *)entry->private_data;
+ snd_iprintf(buffer, "%d\n", pstr->xrun_debug);
+}
+
+static void snd_pcm_xrun_debug_write(snd_info_entry_t *entry, snd_info_buffer_t
*buffer)
+{
+ snd_pcm_str_t *pstr = (snd_pcm_str_t *)entry->private_data;
+ char line[64];
+ if (!snd_info_get_line(buffer, line, sizeof(line)))
+ pstr->xrun_debug = !!simple_strtoul(line, NULL, 10);
+}
+#endif
+
static int snd_pcm_stream_proc_init(snd_pcm_str_t *pstr)
{
snd_pcm_t *pcm = pstr->pcm;
@@ -416,11 +432,31 @@
}
pstr->proc_info_entry = entry;
+#ifdef CONFIG_SND_DEBUG
+ if ((entry = snd_info_create_card_entry(pcm->card, "xrun_debug",
pstr->proc_root)) != NULL) {
+ entry->c.text.read_size = 64;
+ entry->c.text.read = snd_pcm_xrun_debug_read;
+ entry->c.text.write_size = 64;
+ entry->c.text.write = snd_pcm_xrun_debug_write;
+ entry->private_data = pstr;
+ if (snd_info_register(entry) < 0) {
+ snd_info_free_entry(entry);
+ entry = NULL;
+ }
+ }
+ pstr->proc_xrun_debug_entry = entry;
+#endif
return 0;
}
static int snd_pcm_stream_proc_done(snd_pcm_str_t *pstr)
{
+#ifdef CONFIG_SND_DEBUG
+ if (pstr->proc_xrun_debug_entry) {
+ snd_info_unregister(pstr->proc_xrun_debug_entry);
+ pstr->proc_xrun_debug_entry = NULL;
+ }
+#endif
if (pstr->proc_info_entry) {
snd_info_unregister(pstr->proc_info_entry);
pstr->proc_info_entry = NULL;
Index: pcm_lib.c
===================================================================
RCS file: /cvsroot/alsa/alsa-kernel/core/pcm_lib.c,v
retrieving revision 1.46
retrieving revision 1.47
diff -u -r1.46 -r1.47
--- pcm_lib.c 22 Oct 2003 09:32:20 -0000 1.46
+++ pcm_lib.c 26 Jan 2004 14:04:35 -0000 1.47
@@ -158,6 +158,15 @@
snd_pcm_stop(substream,
runtime->status->state == SNDRV_PCM_STATE_DRAINING ?
SNDRV_PCM_STATE_SETUP : SNDRV_PCM_STATE_XRUN);
+#ifdef CONFIG_SND_DEBUG
+ if (substream->pstr->xrun_debug) {
+ snd_printd(KERN_DEBUG "XRUN: pcmC%dD%d%c\n",
+ substream->pcm->card->number,
+ substream->pcm->device,
+ substream->stream ? 'c' : 'p');
+ dump_stack();
+ }
+#endif
return -EPIPE;
}
if (avail >= runtime->control->avail_min)
-------------------------------------------------------
The SF.Net email is sponsored by EclipseCon 2004
Premiere Conference on Open Tools Development and Integration
See the breadth of Eclipse activity. February 3-5 in Anaheim, CA.
http://www.eclipsecon.org/osdn
_______________________________________________
Alsa-cvslog mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/alsa-cvslog