Commit 70df6a73 authored by Steven Rostedt (Red Hat)'s avatar Steven Rostedt (Red Hat) Committed by Arnaldo Carvalho de Melo

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: default avatarSteven 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.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent 6699ed71
...@@ -727,3 +727,52 @@ int kbuffer_start_of_data(struct kbuffer *kbuf) ...@@ -727,3 +727,52 @@ int kbuffer_start_of_data(struct kbuffer *kbuf)
{ {
return kbuf->start; return kbuf->start;
} }
/**
* kbuffer_raw_get - get raw buffer info
* @kbuf: The kbuffer
* @subbuf: Start of mapped subbuffer
* @info: Info descriptor to fill in
*
* For debugging. This can return internals of the ring buffer.
* Expects to have info->next set to what it will read.
* The type, length and timestamp delta will be filled in, and
* @info->next will be updated to the next element.
* The @subbuf is used to know if the info is passed the end of
* data and NULL will be returned if it is.
*/
struct kbuffer_raw_info *
kbuffer_raw_get(struct kbuffer *kbuf, void *subbuf, struct kbuffer_raw_info *info)
{
unsigned long long flags;
unsigned long long delta;
unsigned int type_len;
unsigned int size;
int start;
int length;
void *ptr = info->next;
if (!kbuf || !subbuf)
return NULL;
if (kbuf->flags & KBUFFER_FL_LONG_8)
start = 16;
else
start = 12;
flags = read_long(kbuf, subbuf + 8);
size = (unsigned int)flags & COMMIT_MASK;
if (ptr < subbuf || ptr >= subbuf + start + size)
return NULL;
type_len = translate_data(kbuf, ptr, &ptr, &delta, &length);
info->next = ptr + length;
info->type = type_len;
info->delta = delta;
info->length = length;
return info;
}
...@@ -65,4 +65,17 @@ int kbuffer_subbuffer_size(struct kbuffer *kbuf); ...@@ -65,4 +65,17 @@ int kbuffer_subbuffer_size(struct kbuffer *kbuf);
void kbuffer_set_old_format(struct kbuffer *kbuf); void kbuffer_set_old_format(struct kbuffer *kbuf);
int kbuffer_start_of_data(struct kbuffer *kbuf); int kbuffer_start_of_data(struct kbuffer *kbuf);
/* Debugging */
struct kbuffer_raw_info {
int type;
int length;
unsigned long long delta;
void *next;
};
/* Read raw data */
struct kbuffer_raw_info *kbuffer_raw_get(struct kbuffer *kbuf, void *subbuf,
struct kbuffer_raw_info *info);
#endif /* _K_BUFFER_H */ #endif /* _K_BUFFER_H */
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment