Skip to content

Commit

Permalink
tracing: Have TRACE_DEFINE_ENUM affect trace event types as well
Browse files Browse the repository at this point in the history
The macro TRACE_DEFINE_ENUM is used to convert enums in the kernel to
their actual value when they are exported to user space via the trace
event format file.

Currently only the enums in the "print fmt" (TP_printk in the TRACE_EVENT
macro) have the enums converted. But the enums can be used to denote array
size:

        field:unsigned int fc_ineligible_rc[EXT4_FC_REASON_MAX]; offset:12;      size:36;        signed:0;

The EXT4_FC_REASON_MAX has no meaning to userspace but it needs to know
that information to know how to parse the array.

Have the array indexes also be parsed as well.

Link: https://lore.kernel.org/all/cover.1646922487.git.riteshh@linux.ibm.com/

Reported-by: Ritesh Harjani <riteshh@linux.ibm.com>
Tested-by: Ritesh Harjani <riteshh@linux.ibm.com>
Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
  • Loading branch information
Steven Rostedt (Google) committed Mar 11, 2022
1 parent 9f438d4 commit b3bc854
Showing 1 changed file with 28 additions and 0 deletions.
28 changes: 28 additions & 0 deletions kernel/trace/trace_events.c
Original file line number Diff line number Diff line change
Expand Up @@ -2633,6 +2633,33 @@ static void update_event_printk(struct trace_event_call *call,
}
}

static void update_event_fields(struct trace_event_call *call,
struct trace_eval_map *map)
{
struct ftrace_event_field *field;
struct list_head *head;
char *ptr;
int len = strlen(map->eval_string);

head = trace_get_fields(call);
list_for_each_entry(field, head, link) {
ptr = strchr(field->type, '[');
if (!ptr)
continue;
ptr++;

if (!isalpha(*ptr) && *ptr != '_')
continue;

if (strncmp(map->eval_string, ptr, len) != 0)
continue;

ptr = eval_replace(ptr, map, len);
/* enum/sizeof string smaller than value */
WARN_ON_ONCE(!ptr);
}
}

void trace_event_eval_update(struct trace_eval_map **map, int len)
{
struct trace_event_call *call, *p;
Expand Down Expand Up @@ -2668,6 +2695,7 @@ void trace_event_eval_update(struct trace_eval_map **map, int len)
first = false;
}
update_event_printk(call, map[i]);
update_event_fields(call, map[i]);
}
}
}
Expand Down

0 comments on commit b3bc854

Please sign in to comment.