Skip to content

Commit 1b8b0cd

Browse files
committed
tracing/probes: Move event parameter fetching code to common parser
Move trace event parameter fetching code to common parser in trace_probe.c. This simplifies eprobe's trace-event variable fetching code by introducing a parse context data structure. Link: https://lore.kernel.org/all/168507472950.913472.2812253181558471278.stgit@mhiramat.roam.corp.google.com/ Signed-off-by: Masami Hiramatsu (Google) <[email protected]>
1 parent e2d0d7b commit 1b8b0cd

File tree

6 files changed

+155
-132
lines changed

6 files changed

+155
-132
lines changed

kernel/trace/trace_eprobe.c

Lines changed: 5 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -227,37 +227,6 @@ static struct trace_eprobe *alloc_event_probe(const char *group,
227227
return ERR_PTR(ret);
228228
}
229229

230-
static int trace_eprobe_tp_arg_update(struct trace_eprobe *ep, int i)
231-
{
232-
struct probe_arg *parg = &ep->tp.args[i];
233-
struct ftrace_event_field *field;
234-
struct list_head *head;
235-
int ret = -ENOENT;
236-
237-
head = trace_get_fields(ep->event);
238-
list_for_each_entry(field, head, link) {
239-
if (!strcmp(parg->code->data, field->name)) {
240-
kfree(parg->code->data);
241-
parg->code->data = field;
242-
return 0;
243-
}
244-
}
245-
246-
/*
247-
* Argument not found on event. But allow for comm and COMM
248-
* to be used to get the current->comm.
249-
*/
250-
if (strcmp(parg->code->data, "COMM") == 0 ||
251-
strcmp(parg->code->data, "comm") == 0) {
252-
parg->code->op = FETCH_OP_COMM;
253-
ret = 0;
254-
}
255-
256-
kfree(parg->code->data);
257-
parg->code->data = NULL;
258-
return ret;
259-
}
260-
261230
static int eprobe_event_define_fields(struct trace_event_call *event_call)
262231
{
263232
struct eprobe_trace_entry_head field;
@@ -817,19 +786,16 @@ find_and_get_event(const char *system, const char *event_name)
817786

818787
static int trace_eprobe_tp_update_arg(struct trace_eprobe *ep, const char *argv[], int i)
819788
{
820-
unsigned int flags = TPARG_FL_KERNEL | TPARG_FL_TEVENT;
789+
struct traceprobe_parse_context ctx = {
790+
.event = ep->event,
791+
.flags = TPARG_FL_KERNEL | TPARG_FL_TEVENT,
792+
};
821793
int ret;
822794

823-
ret = traceprobe_parse_probe_arg(&ep->tp, i, argv[i], flags);
795+
ret = traceprobe_parse_probe_arg(&ep->tp, i, argv[i], &ctx);
824796
if (ret)
825797
return ret;
826798

827-
if (ep->tp.args[i].code->op == FETCH_OP_TP_ARG) {
828-
ret = trace_eprobe_tp_arg_update(ep, i);
829-
if (ret)
830-
trace_probe_log_err(0, BAD_ATTACH_ARG);
831-
}
832-
833799
/* Handle symbols "@" */
834800
if (!ret)
835801
ret = traceprobe_update_arg(&ep->tp.args[i]);

kernel/trace/trace_fprobe.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1047,8 +1047,10 @@ static int __trace_fprobe_create(int argc, const char *argv[])
10471047

10481048
/* parse arguments */
10491049
for (i = 0; i < argc && i < MAX_TRACE_ARGS; i++) {
1050+
struct traceprobe_parse_context ctx = { .flags = flags };
1051+
10501052
trace_probe_log_set_index(i + 2);
1051-
ret = traceprobe_parse_probe_arg(&tf->tp, i, argv[i], flags);
1053+
ret = traceprobe_parse_probe_arg(&tf->tp, i, argv[i], &ctx);
10521054
if (ret)
10531055
goto error; /* This can be -ENOMEM */
10541056
}

kernel/trace/trace_kprobe.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -867,8 +867,10 @@ static int __trace_kprobe_create(int argc, const char *argv[])
867867

868868
/* parse arguments */
869869
for (i = 0; i < argc && i < MAX_TRACE_ARGS; i++) {
870+
struct traceprobe_parse_context ctx = { .flags = flags };
871+
870872
trace_probe_log_set_index(i + 2);
871-
ret = traceprobe_parse_probe_arg(&tk->tp, i, argv[i], flags);
873+
ret = traceprobe_parse_probe_arg(&tk->tp, i, argv[i], &ctx);
872874
if (ret)
873875
goto error; /* This can be -ENOMEM */
874876
}

0 commit comments

Comments
 (0)