[ALSA] PCM core - introduce CONFIG_SND_PCM_XRUN_DEBUG
This patch makes the XRUN (overrun/underrun) notification code optional. Signed-off-by: Jaroslav Kysela <perex@suse.cz>
This commit is contained in:
parent
a2bbbc0c3c
commit
61fb63c096
@ -171,3 +171,13 @@ config SND_DEBUG_DETECT
|
|||||||
help
|
help
|
||||||
Say Y here to enable extra-verbose log messages printed when
|
Say Y here to enable extra-verbose log messages printed when
|
||||||
detecting devices.
|
detecting devices.
|
||||||
|
|
||||||
|
config SND_PCM_XRUN_DEBUG
|
||||||
|
bool "Enable PCM ring buffer overrun/underrun debugging"
|
||||||
|
default n
|
||||||
|
depends on SND_DEBUG
|
||||||
|
help
|
||||||
|
Say Y to enable the PCM ring buffer overrun/underrun debugging.
|
||||||
|
It is usually not required, but if you have trouble with
|
||||||
|
sound clicking when system is loaded, it may help to determine
|
||||||
|
the process or driver which causes the scheduling gaps.
|
||||||
|
@ -436,7 +436,7 @@ static void snd_pcm_substream_proc_status_read(struct snd_info_entry *entry,
|
|||||||
snd_iprintf(buffer, "appl_ptr : %ld\n", runtime->control->appl_ptr);
|
snd_iprintf(buffer, "appl_ptr : %ld\n", runtime->control->appl_ptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_SND_DEBUG
|
#ifdef CONFIG_SND_PCM_XRUN_DEBUG
|
||||||
static void snd_pcm_xrun_debug_read(struct snd_info_entry *entry,
|
static void snd_pcm_xrun_debug_read(struct snd_info_entry *entry,
|
||||||
struct snd_info_buffer *buffer)
|
struct snd_info_buffer *buffer)
|
||||||
{
|
{
|
||||||
@ -480,7 +480,7 @@ static int snd_pcm_stream_proc_init(struct snd_pcm_str *pstr)
|
|||||||
}
|
}
|
||||||
pstr->proc_info_entry = entry;
|
pstr->proc_info_entry = entry;
|
||||||
|
|
||||||
#ifdef CONFIG_SND_DEBUG
|
#ifdef CONFIG_SND_PCM_XRUN_DEBUG
|
||||||
if ((entry = snd_info_create_card_entry(pcm->card, "xrun_debug",
|
if ((entry = snd_info_create_card_entry(pcm->card, "xrun_debug",
|
||||||
pstr->proc_root)) != NULL) {
|
pstr->proc_root)) != NULL) {
|
||||||
entry->c.text.read_size = 64;
|
entry->c.text.read_size = 64;
|
||||||
@ -501,7 +501,7 @@ static int snd_pcm_stream_proc_init(struct snd_pcm_str *pstr)
|
|||||||
|
|
||||||
static int snd_pcm_stream_proc_done(struct snd_pcm_str *pstr)
|
static int snd_pcm_stream_proc_done(struct snd_pcm_str *pstr)
|
||||||
{
|
{
|
||||||
#ifdef CONFIG_SND_DEBUG
|
#ifdef CONFIG_SND_PCM_XRUN_DEBUG
|
||||||
if (pstr->proc_xrun_debug_entry) {
|
if (pstr->proc_xrun_debug_entry) {
|
||||||
snd_info_unregister(pstr->proc_xrun_debug_entry);
|
snd_info_unregister(pstr->proc_xrun_debug_entry);
|
||||||
pstr->proc_xrun_debug_entry = NULL;
|
pstr->proc_xrun_debug_entry = NULL;
|
||||||
|
@ -130,7 +130,7 @@ void snd_pcm_playback_silence(struct snd_pcm_substream *substream, snd_pcm_ufram
|
|||||||
static void xrun(struct snd_pcm_substream *substream)
|
static void xrun(struct snd_pcm_substream *substream)
|
||||||
{
|
{
|
||||||
snd_pcm_stop(substream, SNDRV_PCM_STATE_XRUN);
|
snd_pcm_stop(substream, SNDRV_PCM_STATE_XRUN);
|
||||||
#ifdef CONFIG_SND_DEBUG
|
#ifdef CONFIG_SND_PCM_XRUN_DEBUG
|
||||||
if (substream->pstr->xrun_debug) {
|
if (substream->pstr->xrun_debug) {
|
||||||
snd_printd(KERN_DEBUG "XRUN: pcmC%dD%d%c\n",
|
snd_printd(KERN_DEBUG "XRUN: pcmC%dD%d%c\n",
|
||||||
substream->pcm->card->number,
|
substream->pcm->card->number,
|
||||||
@ -204,7 +204,7 @@ static inline int snd_pcm_update_hw_ptr_interrupt(struct snd_pcm_substream *subs
|
|||||||
delta = hw_ptr_interrupt - new_hw_ptr;
|
delta = hw_ptr_interrupt - new_hw_ptr;
|
||||||
if (delta > 0) {
|
if (delta > 0) {
|
||||||
if ((snd_pcm_uframes_t)delta < runtime->buffer_size / 2) {
|
if ((snd_pcm_uframes_t)delta < runtime->buffer_size / 2) {
|
||||||
#ifdef CONFIG_SND_DEBUG
|
#ifdef CONFIG_SND_PCM_XRUN_DEBUG
|
||||||
if (runtime->periods > 1 && substream->pstr->xrun_debug) {
|
if (runtime->periods > 1 && substream->pstr->xrun_debug) {
|
||||||
snd_printd(KERN_ERR "Unexpected hw_pointer value [1] (stream = %i, delta: -%ld, max jitter = %ld): wrong interrupt acknowledge?\n", substream->stream, (long) delta, runtime->buffer_size / 2);
|
snd_printd(KERN_ERR "Unexpected hw_pointer value [1] (stream = %i, delta: -%ld, max jitter = %ld): wrong interrupt acknowledge?\n", substream->stream, (long) delta, runtime->buffer_size / 2);
|
||||||
if (substream->pstr->xrun_debug > 1)
|
if (substream->pstr->xrun_debug > 1)
|
||||||
@ -249,7 +249,7 @@ int snd_pcm_update_hw_ptr(struct snd_pcm_substream *substream)
|
|||||||
delta = old_hw_ptr - new_hw_ptr;
|
delta = old_hw_ptr - new_hw_ptr;
|
||||||
if (delta > 0) {
|
if (delta > 0) {
|
||||||
if ((snd_pcm_uframes_t)delta < runtime->buffer_size / 2) {
|
if ((snd_pcm_uframes_t)delta < runtime->buffer_size / 2) {
|
||||||
#ifdef CONFIG_SND_DEBUG
|
#ifdef CONFIG_SND_PCM_XRUN_DEBUG
|
||||||
if (runtime->periods > 2 && substream->pstr->xrun_debug) {
|
if (runtime->periods > 2 && substream->pstr->xrun_debug) {
|
||||||
snd_printd(KERN_ERR "Unexpected hw_pointer value [2] (stream = %i, delta: -%ld, max jitter = %ld): wrong interrupt acknowledge?\n", substream->stream, (long) delta, runtime->buffer_size / 2);
|
snd_printd(KERN_ERR "Unexpected hw_pointer value [2] (stream = %i, delta: -%ld, max jitter = %ld): wrong interrupt acknowledge?\n", substream->stream, (long) delta, runtime->buffer_size / 2);
|
||||||
if (substream->pstr->xrun_debug > 1)
|
if (substream->pstr->xrun_debug > 1)
|
||||||
|
Loading…
Reference in New Issue
Block a user