aboutsummaryrefslogtreecommitdiffstats
path: root/tools/lib/traceevent/kbuffer-parse.c
diff options
context:
space:
mode:
authorSteven Rostedt (Red Hat) <rostedt@goodmis.org>2019-04-01 12:43:09 -0400
committerArnaldo Carvalho de Melo <acme@redhat.com>2019-04-01 14:18:09 -0400
commit70df6a7311186a7ab0b19f481dee4ca540a73837 (patch)
tree4b56b9f85d47d16ece31e434c92f1402800b4868 /tools/lib/traceevent/kbuffer-parse.c
parent6699ed712a97f70267e017f509126b890f6f6b28 (diff)
tools lib traceevent: Add more debugging to see various internal ring buffer entries
When trace-cmd report --debug is set, show the internal ring buffer entries like time-extends and padding. This requires adding new kbuffer API to retrieve these items. Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org> Cc: Andrew Morton <akpm@linux-foundation.org> Cc: Jiri Olsa <jolsa@redhat.com> Cc: Namhyung Kim <namhyung@kernel.org> Cc: Tzvetomir Stoyanov <tstoyanov@vmware.com> Link: http://lkml.kernel.org/r/20190401164343.257591565@goodmis.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'tools/lib/traceevent/kbuffer-parse.c')
-rw-r--r--tools/lib/traceevent/kbuffer-parse.c49
1 files changed, 49 insertions, 0 deletions
diff --git a/tools/lib/traceevent/kbuffer-parse.c b/tools/lib/traceevent/kbuffer-parse.c
index af2a1f3b7424..b887e7437d67 100644
--- a/tools/lib/traceevent/kbuffer-parse.c
+++ b/tools/lib/traceevent/kbuffer-parse.c
@@ -727,3 +727,52 @@ int kbuffer_start_of_data(struct kbuffer *kbuf)
727{ 727{
728 return kbuf->start; 728 return kbuf->start;
729} 729}
730
731/**
732 * kbuffer_raw_get - get raw buffer info
733 * @kbuf: The kbuffer
734 * @subbuf: Start of mapped subbuffer
735 * @info: Info descriptor to fill in
736 *
737 * For debugging. This can return internals of the ring buffer.
738 * Expects to have info->next set to what it will read.
739 * The type, length and timestamp delta will be filled in, and
740 * @info->next will be updated to the next element.
741 * The @subbuf is used to know if the info is passed the end of
742 * data and NULL will be returned if it is.
743 */
744struct kbuffer_raw_info *
745kbuffer_raw_get(struct kbuffer *kbuf, void *subbuf, struct kbuffer_raw_info *info)
746{
747 unsigned long long flags;
748 unsigned long long delta;
749 unsigned int type_len;
750 unsigned int size;
751 int start;
752 int length;
753 void *ptr = info->next;
754
755 if (!kbuf || !subbuf)
756 return NULL;
757
758 if (kbuf->flags & KBUFFER_FL_LONG_8)
759 start = 16;
760 else
761 start = 12;
762
763 flags = read_long(kbuf, subbuf + 8);
764 size = (unsigned int)flags & COMMIT_MASK;
765
766 if (ptr < subbuf || ptr >= subbuf + start + size)
767 return NULL;
768
769 type_len = translate_data(kbuf, ptr, &ptr, &delta, &length);
770
771 info->next = ptr + length;
772
773 info->type = type_len;
774 info->delta = delta;
775 info->length = length;
776
777 return info;
778}