Current ftrace_init_event_type() has two steps: 1) get the double-linked-list head address of the field, 2) init the fields This patch separates it, and the second step is wrapped in a new function: ftrace_init_event_fields(). Signed-off-by: Lai Jiangshan <laijs@xxxxxxxxxxxxxx> --- diff --git a/extensions/trace.c b/extensions/trace.c index 484c872..34f1be2 100755 --- a/extensions/trace.c +++ b/extensions/trace.c @@ -785,20 +785,19 @@ work: return -1; } -static int ftrace_init_event_type(ulong call, struct event_type *aevent_type) +static int ftrace_init_event_fields(ulong fields_head, int *pnfields, + struct ftrace_field **pfields) { - ulong fields_addr, pos; + ulong pos; int nfields = 0, max_fields = 16; struct ftrace_field *fields = NULL; - if (ftrace_get_event_type_fields(call, &fields_addr) < 0) - return -1; - read_value(pos, fields_addr, list_head, next); + read_value(pos, fields_head, list_head, next); if (pos == 0) { if (verbose) - fprintf(fp, "no field %lu\n", call); + fprintf(fp, "no field, head: %lu\n", fields_head); return 0; } @@ -806,7 +805,7 @@ static int ftrace_init_event_type(ulong call, struct event_type *aevent_type) if (fields == NULL) return -1; - while (pos != fields_addr) { + while (pos != fields_head) { ulong field; ulong name_addr, type_addr; char field_name[128], field_type[128]; @@ -860,8 +859,8 @@ static int ftrace_init_event_type(ulong call, struct event_type *aevent_type) read_value(pos, pos, list_head, next); } - aevent_type->nfields = nfields; - aevent_type->fields = fields; + *pnfields = nfields; + *pfields = fields; return 0; @@ -875,6 +874,17 @@ out_fail: return -1; } +static int ftrace_init_event_type(ulong call, struct event_type *aevent_type) +{ + ulong fields_head; + + if (ftrace_get_event_type_fields(call, &fields_head) < 0) + return -1; + + return ftrace_init_event_fields(fields_head, &aevent_type->nfields, + &aevent_type->fields); +} + static void ftrace_destroy_event_types(void) { int i, j; -- Crash-utility mailing list Crash-utility@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/crash-utility