Add the rt linux 4.1.3-rt3 as base
[kvmfornfv.git] / kernel / sound / core / pcm_trace.h
diff --git a/kernel/sound/core/pcm_trace.h b/kernel/sound/core/pcm_trace.h
new file mode 100644 (file)
index 0000000..b63b654
--- /dev/null
@@ -0,0 +1,110 @@
+#undef TRACE_SYSTEM
+#define TRACE_SYSTEM snd_pcm
+#define TRACE_INCLUDE_FILE pcm_trace
+
+#if !defined(_PCM_TRACE_H) || defined(TRACE_HEADER_MULTI_READ)
+#define _PCM_TRACE_H
+
+#include <linux/tracepoint.h>
+
+TRACE_EVENT(hwptr,
+       TP_PROTO(struct snd_pcm_substream *substream, snd_pcm_uframes_t pos, bool irq),
+       TP_ARGS(substream, pos, irq),
+       TP_STRUCT__entry(
+               __field( bool, in_interrupt )
+               __field( unsigned int, card )
+               __field( unsigned int, device )
+               __field( unsigned int, number )
+               __field( unsigned int, stream )
+               __field( snd_pcm_uframes_t, pos )
+               __field( snd_pcm_uframes_t, period_size )
+               __field( snd_pcm_uframes_t, buffer_size )
+               __field( snd_pcm_uframes_t, old_hw_ptr )
+               __field( snd_pcm_uframes_t, hw_ptr_base )
+       ),
+       TP_fast_assign(
+               __entry->in_interrupt = (irq);
+               __entry->card = (substream)->pcm->card->number;
+               __entry->device = (substream)->pcm->device;
+               __entry->number = (substream)->number;
+               __entry->stream = (substream)->stream;
+               __entry->pos = (pos);
+               __entry->period_size = (substream)->runtime->period_size;
+               __entry->buffer_size = (substream)->runtime->buffer_size;
+               __entry->old_hw_ptr = (substream)->runtime->status->hw_ptr;
+               __entry->hw_ptr_base = (substream)->runtime->hw_ptr_base;
+       ),
+       TP_printk("pcmC%dD%d%c/sub%d: %s: pos=%lu, old=%lu, base=%lu, period=%lu, buf=%lu",
+                 __entry->card, __entry->device,
+                 __entry->stream == SNDRV_PCM_STREAM_PLAYBACK ? 'p' : 'c',
+                 __entry->number,
+                 __entry->in_interrupt ? "IRQ" : "POS",
+                 (unsigned long)__entry->pos,
+                 (unsigned long)__entry->old_hw_ptr,
+                 (unsigned long)__entry->hw_ptr_base,
+                 (unsigned long)__entry->period_size,
+                 (unsigned long)__entry->buffer_size)
+);
+
+TRACE_EVENT(xrun,
+       TP_PROTO(struct snd_pcm_substream *substream),
+       TP_ARGS(substream),
+       TP_STRUCT__entry(
+               __field( unsigned int, card )
+               __field( unsigned int, device )
+               __field( unsigned int, number )
+               __field( unsigned int, stream )
+               __field( snd_pcm_uframes_t, period_size )
+               __field( snd_pcm_uframes_t, buffer_size )
+               __field( snd_pcm_uframes_t, old_hw_ptr )
+               __field( snd_pcm_uframes_t, hw_ptr_base )
+       ),
+       TP_fast_assign(
+               __entry->card = (substream)->pcm->card->number;
+               __entry->device = (substream)->pcm->device;
+               __entry->number = (substream)->number;
+               __entry->stream = (substream)->stream;
+               __entry->period_size = (substream)->runtime->period_size;
+               __entry->buffer_size = (substream)->runtime->buffer_size;
+               __entry->old_hw_ptr = (substream)->runtime->status->hw_ptr;
+               __entry->hw_ptr_base = (substream)->runtime->hw_ptr_base;
+       ),
+       TP_printk("pcmC%dD%d%c/sub%d: XRUN: old=%lu, base=%lu, period=%lu, buf=%lu",
+                 __entry->card, __entry->device,
+                 __entry->stream == SNDRV_PCM_STREAM_PLAYBACK ? 'p' : 'c',
+                 __entry->number,
+                 (unsigned long)__entry->old_hw_ptr,
+                 (unsigned long)__entry->hw_ptr_base,
+                 (unsigned long)__entry->period_size,
+                 (unsigned long)__entry->buffer_size)
+);
+
+TRACE_EVENT(hw_ptr_error,
+       TP_PROTO(struct snd_pcm_substream *substream, const char *why),
+       TP_ARGS(substream, why),
+       TP_STRUCT__entry(
+               __field( unsigned int, card )
+               __field( unsigned int, device )
+               __field( unsigned int, number )
+               __field( unsigned int, stream )
+               __field( const char *, reason )
+       ),
+       TP_fast_assign(
+               __entry->card = (substream)->pcm->card->number;
+               __entry->device = (substream)->pcm->device;
+               __entry->number = (substream)->number;
+               __entry->stream = (substream)->stream;
+               __entry->reason = (why);
+       ),
+       TP_printk("pcmC%dD%d%c/sub%d: ERROR: %s",
+                 __entry->card, __entry->device,
+                 __entry->stream == SNDRV_PCM_STREAM_PLAYBACK ? 'p' : 'c',
+                 __entry->number, __entry->reason)
+);
+
+#endif /* _PCM_TRACE_H */
+
+/* This part must be outside protection */
+#undef TRACE_INCLUDE_PATH
+#define TRACE_INCLUDE_PATH .
+#include <trace/define_trace.h>