Merge branch 'rcu/urgent' of git://git.kernel.org/pub/scm/linux/kernel/git/paulmck...
[cascardo/linux.git] / sound / core / pcm_lib.c
index 64449cb..abfeff1 100644 (file)
@@ -189,6 +189,7 @@ static void xrun(struct snd_pcm_substream *substream)
 #define XRUN_LOG_CNT   10
 
 struct hwptr_log_entry {
+       unsigned int in_interrupt;
        unsigned long jiffies;
        snd_pcm_uframes_t pos;
        snd_pcm_uframes_t period_size;
@@ -204,7 +205,7 @@ struct snd_pcm_hwptr_log {
 };
 
 static void xrun_log(struct snd_pcm_substream *substream,
-                    snd_pcm_uframes_t pos)
+                    snd_pcm_uframes_t pos, int in_interrupt)
 {
        struct snd_pcm_runtime *runtime = substream->runtime;
        struct snd_pcm_hwptr_log *log = runtime->hwptr_log;
@@ -220,6 +221,7 @@ static void xrun_log(struct snd_pcm_substream *substream,
                        return;
        }
        entry = &log->entries[log->idx];
+       entry->in_interrupt = in_interrupt;
        entry->jiffies = jiffies;
        entry->pos = pos;
        entry->period_size = runtime->period_size;
@@ -246,9 +248,11 @@ static void xrun_log_show(struct snd_pcm_substream *substream)
                entry = &log->entries[idx];
                if (entry->period_size == 0)
                        break;
-               snd_printd("hwptr log: %s: j=%lu, pos=%ld/%ld/%ld, "
+               snd_printd("hwptr log: %s: %sj=%lu, pos=%ld/%ld/%ld, "
                           "hwptr=%ld/%ld\n",
-                          name, entry->jiffies, (unsigned long)entry->pos,
+                          name, entry->in_interrupt ? "[Q] " : "",
+                          entry->jiffies,
+                          (unsigned long)entry->pos,
                           (unsigned long)entry->period_size,
                           (unsigned long)entry->buffer_size,
                           (unsigned long)entry->old_hw_ptr,
@@ -262,7 +266,7 @@ static void xrun_log_show(struct snd_pcm_substream *substream)
 #else /* ! CONFIG_SND_PCM_XRUN_DEBUG */
 
 #define hw_ptr_error(substream, fmt, args...) do { } while (0)
-#define xrun_log(substream, pos)       do { } while (0)
+#define xrun_log(substream, pos, in_interrupt) do { } while (0)
 #define xrun_log_show(substream)       do { } while (0)
 
 #endif
@@ -326,7 +330,7 @@ static int snd_pcm_update_hw_ptr0(struct snd_pcm_substream *substream,
        }
        pos -= pos % runtime->min_align;
        if (xrun_debug(substream, XRUN_DEBUG_LOG))
-               xrun_log(substream, pos);
+               xrun_log(substream, pos, in_interrupt);
        hw_base = runtime->hw_ptr_base;
        new_hw_ptr = hw_base + pos;
        if (in_interrupt) {