All of lore.kernel.org
 help / color / mirror / Atom feed
From: Masami Hiramatsu <mhiramat@kernel.org>
To: Steven Rostedt <rostedt@goodmis.org>
Cc: linux-kernel@vger.kernel.org, Ingo Molnar <mingo@kernel.org>,
	Andrew Morton <akpm@linux-foundation.org>,
	Masami Hiramatsu <mhiramat@kernel.org>,
	"Tzvetomir Stoyanov" <tz.stoyanov@gmail.com>,
	Tom Zanussi <zanussi@kernel.org>,
	linux-trace-devel@vger.kernel.org
Subject: Re: [PATCH v6 1/7] tracing: Add DYNAMIC flag for dynamic events
Date: Wed, 18 Aug 2021 17:15:17 +0900	[thread overview]
Message-ID: <20210818171517.4800773de332f4c10f9ceb75@kernel.org> (raw)
In-Reply-To: <20210817035026.936958254@goodmis.org>

On Mon, 16 Aug 2021 23:42:56 -0400
Steven Rostedt <rostedt@goodmis.org> wrote:

> From: "Steven Rostedt (VMware)" <rostedt@goodmis.org>
> 
> To differentiate between static and dynamic events, add a new flag
> DYNAMIC to the event flags that all dynamic events have set. This will
> allow to differentiate when attaching to a dynamic event from a static
> event.
> 
> Static events have a mod pointer that references the module they were
> created in (or NULL for core kernel). This can be incremented when the
> event has something attached to it. But there exists no such mechanism for
> dynamic events. This is dangerous as the dynamic events may now disappear
> without the "attachment" knowing that it no longer exists.
> 
> To enforce the dynamic flag, change dyn_event_add() to pass the event that
> is being created such that it can set the DYNAMIC flag of the event. This
> helps make sure that no location that creates a dynamic event misses
> setting this flag.
> 
> Link: https://lore.kernel.org/linux-trace-devel/20210813004448.51c7de69ce432d338f4d226b@kernel.org/
> 

This looks good to me.

Acked-by: Masami Hiramatsu <mhiramat@kernel.org>

Thank you,

> Suggested-by: Masami Hiramatsu <mhiramat@kernel.org>
> Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
> ---
>  include/linux/trace_events.h      | 3 +++
>  kernel/trace/trace_dynevent.h     | 4 +++-
>  kernel/trace/trace_events_synth.c | 2 +-
>  kernel/trace/trace_kprobe.c       | 4 ++--
>  kernel/trace/trace_uprobe.c       | 4 ++--
>  5 files changed, 11 insertions(+), 6 deletions(-)
> 
> diff --git a/include/linux/trace_events.h b/include/linux/trace_events.h
> index ad413b382a3c..53c9dffd87fd 100644
> --- a/include/linux/trace_events.h
> +++ b/include/linux/trace_events.h
> @@ -310,6 +310,7 @@ enum {
>  	TRACE_EVENT_FL_NO_SET_FILTER_BIT,
>  	TRACE_EVENT_FL_IGNORE_ENABLE_BIT,
>  	TRACE_EVENT_FL_TRACEPOINT_BIT,
> +	TRACE_EVENT_FL_DYNAMIC_BIT,
>  	TRACE_EVENT_FL_KPROBE_BIT,
>  	TRACE_EVENT_FL_UPROBE_BIT,
>  };
> @@ -321,6 +322,7 @@ enum {
>   *  NO_SET_FILTER - Set when filter has error and is to be ignored
>   *  IGNORE_ENABLE - For trace internal events, do not enable with debugfs file
>   *  TRACEPOINT    - Event is a tracepoint
> + *  DYNAMIC       - Event is a dynamic event (created at run time)
>   *  KPROBE        - Event is a kprobe
>   *  UPROBE        - Event is a uprobe
>   */
> @@ -330,6 +332,7 @@ enum {
>  	TRACE_EVENT_FL_NO_SET_FILTER	= (1 << TRACE_EVENT_FL_NO_SET_FILTER_BIT),
>  	TRACE_EVENT_FL_IGNORE_ENABLE	= (1 << TRACE_EVENT_FL_IGNORE_ENABLE_BIT),
>  	TRACE_EVENT_FL_TRACEPOINT	= (1 << TRACE_EVENT_FL_TRACEPOINT_BIT),
> +	TRACE_EVENT_FL_DYNAMIC		= (1 << TRACE_EVENT_FL_DYNAMIC_BIT),
>  	TRACE_EVENT_FL_KPROBE		= (1 << TRACE_EVENT_FL_KPROBE_BIT),
>  	TRACE_EVENT_FL_UPROBE		= (1 << TRACE_EVENT_FL_UPROBE_BIT),
>  };
> diff --git a/kernel/trace/trace_dynevent.h b/kernel/trace/trace_dynevent.h
> index 7754936b57ee..936477a111d3 100644
> --- a/kernel/trace/trace_dynevent.h
> +++ b/kernel/trace/trace_dynevent.h
> @@ -76,13 +76,15 @@ int dyn_event_init(struct dyn_event *ev, struct dyn_event_operations *ops)
>  	return 0;
>  }
>  
> -static inline int dyn_event_add(struct dyn_event *ev)
> +static inline int dyn_event_add(struct dyn_event *ev,
> +				struct trace_event_call *call)
>  {
>  	lockdep_assert_held(&event_mutex);
>  
>  	if (!ev || !ev->ops)
>  		return -EINVAL;
>  
> +	call->flags |= TRACE_EVENT_FL_DYNAMIC;
>  	list_add_tail(&ev->list, &dyn_event_list);
>  	return 0;
>  }
> diff --git a/kernel/trace/trace_events_synth.c b/kernel/trace/trace_events_synth.c
> index 9315fc03e303..f4f5489e1e28 100644
> --- a/kernel/trace/trace_events_synth.c
> +++ b/kernel/trace/trace_events_synth.c
> @@ -1298,7 +1298,7 @@ static int __create_synth_event(const char *name, const char *raw_fields)
>  	}
>  	ret = register_synth_event(event);
>  	if (!ret)
> -		dyn_event_add(&event->devent);
> +		dyn_event_add(&event->devent, &event->call);
>  	else
>  		free_synth_event(event);
>   out:
> diff --git a/kernel/trace/trace_kprobe.c b/kernel/trace/trace_kprobe.c
> index ea6178cb5e33..bfef43bfce37 100644
> --- a/kernel/trace/trace_kprobe.c
> +++ b/kernel/trace/trace_kprobe.c
> @@ -618,7 +618,7 @@ static int append_trace_kprobe(struct trace_kprobe *tk, struct trace_kprobe *to)
>  	if (ret)
>  		trace_probe_unlink(&tk->tp);
>  	else
> -		dyn_event_add(&tk->devent);
> +		dyn_event_add(&tk->devent, trace_probe_event_call(&tk->tp));
>  
>  	return ret;
>  }
> @@ -661,7 +661,7 @@ static int register_trace_kprobe(struct trace_kprobe *tk)
>  	if (ret < 0)
>  		unregister_kprobe_event(tk);
>  	else
> -		dyn_event_add(&tk->devent);
> +		dyn_event_add(&tk->devent, trace_probe_event_call(&tk->tp));
>  
>  end:
>  	mutex_unlock(&event_mutex);
> diff --git a/kernel/trace/trace_uprobe.c b/kernel/trace/trace_uprobe.c
> index 9b50869a5ddb..50eca53b8d22 100644
> --- a/kernel/trace/trace_uprobe.c
> +++ b/kernel/trace/trace_uprobe.c
> @@ -455,7 +455,7 @@ static int append_trace_uprobe(struct trace_uprobe *tu, struct trace_uprobe *to)
>  	/* Append to existing event */
>  	ret = trace_probe_append(&tu->tp, &to->tp);
>  	if (!ret)
> -		dyn_event_add(&tu->devent);
> +		dyn_event_add(&tu->devent, trace_probe_event_call(&tu->tp));
>  
>  	return ret;
>  }
> @@ -518,7 +518,7 @@ static int register_trace_uprobe(struct trace_uprobe *tu)
>  		goto end;
>  	}
>  
> -	dyn_event_add(&tu->devent);
> +	dyn_event_add(&tu->devent, trace_probe_event_call(&tu->tp));
>  
>  end:
>  	mutex_unlock(&event_mutex);
> -- 
> 2.30.2


-- 
Masami Hiramatsu <mhiramat@kernel.org>

  reply	other threads:[~2021-08-18  8:15 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-08-17  3:42 [PATCH v6 0/7] tracing: Creation of event probe Steven Rostedt
2021-08-17  3:42 ` [PATCH v6 1/7] tracing: Add DYNAMIC flag for dynamic events Steven Rostedt
2021-08-18  8:15   ` Masami Hiramatsu [this message]
2021-08-17  3:42 ` [PATCH v6 2/7] tracing: Have dynamic events have a ref counter Steven Rostedt
2021-08-18 16:14   ` Masami Hiramatsu
2021-08-17  3:42 ` [PATCH v6 3/7] tracing/probe: Have traceprobe_parse_probe_arg() take a const arg Steven Rostedt
2021-08-18 16:16   ` Masami Hiramatsu
2021-08-17  3:42 ` [PATCH v6 4/7] tracing/probes: Allow for dot delimiter as well as slash for system names Steven Rostedt
2021-08-18 10:57   ` Masami Hiramatsu
2021-08-17  3:43 ` [PATCH v6 5/7] tracing/probes: Use struct_size() instead of defining custom macros Steven Rostedt
2021-08-18 11:08   ` Masami Hiramatsu
2021-08-17  3:43 ` [PATCH v6 6/7] tracing/probe: Change traceprobe_set_print_fmt() to take a type Steven Rostedt
2021-08-18 16:19   ` Masami Hiramatsu
2021-08-17  3:43 ` [PATCH v6 7/7] tracing: Add a probe that attaches to trace events Steven Rostedt
2021-08-19  2:29   ` Masami Hiramatsu
2021-08-19  3:37     ` Steven Rostedt
2021-08-19  3:56       ` Masami Hiramatsu
2021-08-19  4:03         ` Steven Rostedt
2021-08-19  4:10           ` Steven Rostedt
2021-08-19  4:28           ` Masami Hiramatsu

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20210818171517.4800773de332f4c10f9ceb75@kernel.org \
    --to=mhiramat@kernel.org \
    --cc=akpm@linux-foundation.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-trace-devel@vger.kernel.org \
    --cc=mingo@kernel.org \
    --cc=rostedt@goodmis.org \
    --cc=tz.stoyanov@gmail.com \
    --cc=zanussi@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.