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>
This commit is contained in:
parent
6699ed712a
commit
70df6a7311
@ -727,3 +727,52 @@ int kbuffer_start_of_data(struct kbuffer *kbuf)
|
||||
{
|
||||
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);
|
||||
void kbuffer_set_old_format(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 */
|
||||
|
Loading…
Reference in New Issue
Block a user