Skip to content

Commit

Permalink
tracing/dynevent: Pass extra arguments to match operation
Browse files Browse the repository at this point in the history
Pass extra arguments to match operation for checking
exact match. If the event doesn't support exact match,
it will be ignored.

Link: http://lkml.kernel.org/r/156095685930.28024.10405547027475590975.stgit@devnote2

Signed-off-by: Masami Hiramatsu <mhiramat@kernel.org>
Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
  • Loading branch information
Masami Hiramatsu authored and Steven Rostedt (VMware) committed Aug 31, 2019
1 parent cb8e7a8 commit 3019913
Show file tree
Hide file tree
Showing 5 changed files with 13 additions and 10 deletions.
4 changes: 3 additions & 1 deletion kernel/trace/trace_dynevent.c
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ int dyn_event_release(int argc, char **argv, struct dyn_event_operations *type)
return -EINVAL;
event++;
}
argc--; argv++;

p = strchr(event, '/');
if (p) {
Expand All @@ -61,7 +62,8 @@ int dyn_event_release(int argc, char **argv, struct dyn_event_operations *type)
for_each_dyn_event_safe(pos, n) {
if (type && type != pos->ops)
continue;
if (!pos->ops->match(system, event, pos))
if (!pos->ops->match(system, event,
argc, (const char **)argv, pos))
continue;

ret = pos->ops->free(pos);
Expand Down
7 changes: 4 additions & 3 deletions kernel/trace/trace_dynevent.h
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,9 @@ struct dyn_event;
* @is_busy: Check whether given event is busy so that it can not be deleted.
* Return true if it is busy, otherwides false.
* @free: Delete the given event. Return 0 if success, otherwides error.
* @match: Check whether given event and system name match this event.
* Return true if it matches, otherwides false.
* @match: Check whether given event and system name match this event. The argc
* and argv is used for exact match. Return true if it matches, otherwides
* false.
*
* Except for @create, these methods are called under holding event_mutex.
*/
Expand All @@ -43,7 +44,7 @@ struct dyn_event_operations {
bool (*is_busy)(struct dyn_event *ev);
int (*free)(struct dyn_event *ev);
bool (*match)(const char *system, const char *event,
struct dyn_event *ev);
int argc, const char **argv, struct dyn_event *ev);
};

/* Register new dyn_event type -- must be called at first */
Expand Down
4 changes: 2 additions & 2 deletions kernel/trace/trace_events_hist.c
Original file line number Diff line number Diff line change
Expand Up @@ -374,7 +374,7 @@ static int synth_event_show(struct seq_file *m, struct dyn_event *ev);
static int synth_event_release(struct dyn_event *ev);
static bool synth_event_is_busy(struct dyn_event *ev);
static bool synth_event_match(const char *system, const char *event,
struct dyn_event *ev);
int argc, const char **argv, struct dyn_event *ev);

static struct dyn_event_operations synth_event_ops = {
.create = synth_event_create,
Expand Down Expand Up @@ -422,7 +422,7 @@ static bool synth_event_is_busy(struct dyn_event *ev)
}

static bool synth_event_match(const char *system, const char *event,
struct dyn_event *ev)
int argc, const char **argv, struct dyn_event *ev)
{
struct synth_event *sev = to_synth_event(ev);

Expand Down
4 changes: 2 additions & 2 deletions kernel/trace/trace_kprobe.c
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ static int trace_kprobe_show(struct seq_file *m, struct dyn_event *ev);
static int trace_kprobe_release(struct dyn_event *ev);
static bool trace_kprobe_is_busy(struct dyn_event *ev);
static bool trace_kprobe_match(const char *system, const char *event,
struct dyn_event *ev);
int argc, const char **argv, struct dyn_event *ev);

static struct dyn_event_operations trace_kprobe_ops = {
.create = trace_kprobe_create,
Expand Down Expand Up @@ -138,7 +138,7 @@ static bool trace_kprobe_is_busy(struct dyn_event *ev)
}

static bool trace_kprobe_match(const char *system, const char *event,
struct dyn_event *ev)
int argc, const char **argv, struct dyn_event *ev)
{
struct trace_kprobe *tk = to_trace_kprobe(ev);

Expand Down
4 changes: 2 additions & 2 deletions kernel/trace/trace_uprobe.c
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ static int trace_uprobe_show(struct seq_file *m, struct dyn_event *ev);
static int trace_uprobe_release(struct dyn_event *ev);
static bool trace_uprobe_is_busy(struct dyn_event *ev);
static bool trace_uprobe_match(const char *system, const char *event,
struct dyn_event *ev);
int argc, const char **argv, struct dyn_event *ev);

static struct dyn_event_operations trace_uprobe_ops = {
.create = trace_uprobe_create,
Expand Down Expand Up @@ -285,7 +285,7 @@ static bool trace_uprobe_is_busy(struct dyn_event *ev)
}

static bool trace_uprobe_match(const char *system, const char *event,
struct dyn_event *ev)
int argc, const char **argv, struct dyn_event *ev)
{
struct trace_uprobe *tu = to_trace_uprobe(ev);

Expand Down

0 comments on commit 3019913

Please sign in to comment.