linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Steven Rostedt <rostedt@goodmis.org>
To: Jiri Olsa <jolsa@redhat.com>
Cc: fweisbec@gmail.com, mingo@redhat.com, paulus@samba.org,
	acme@ghostprotocols.net, a.p.zijlstra@chello.nl,
	linux-kernel@vger.kernel.org, aarapov@redhat.com
Subject: Re: [PATCHv2 03/10] ftrace: Add enable/disable ftrace_ops control interface
Date: Mon, 19 Dec 2011 14:19:30 -0500	[thread overview]
Message-ID: <1324322370.5916.35.camel@gandalf.stny.rr.com> (raw)
In-Reply-To: <1323105776-26961-4-git-send-email-jolsa@redhat.com>

On Mon, 2011-12-05 at 18:22 +0100, Jiri Olsa wrote:
> Adding a way to temporarily enable/disable ftrace_ops. The change
> follows the same way as 'global' ftrace_ops are done.
> 
> Introducing 2 global ftrace_ops - control_ops and ftrace_control_list
> which take over all ftrace_ops registered with FTRACE_OPS_FL_CONTROL
> flag. In addition new per cpu flag called 'disabled' is also added to
> ftrace_ops to provide the control information for each cpu.
> 
> When ftrace_ops with FTRACE_OPS_FL_CONTROL is registered, it is
> set as disabled for all cpus.
> 
> The ftrace_control_list contains all the registered 'control' ftrace_ops.
> The control_ops provides function which iterates ftrace_control_list
> and does the check for 'disabled' flag on current cpu.
> 
> Adding 2 inline functions enable_ftrace_function/disable_ftrace_function,
> which enable/disable the ftrace_ops for current cpu.
> 
> Signed-off-by: Jiri Olsa <jolsa@redhat.com>
> ---
>  include/linux/ftrace.h |   14 ++++++
>  kernel/trace/ftrace.c  |  115 +++++++++++++++++++++++++++++++++++++++++++-----
>  kernel/trace/trace.h   |    2 +
>  3 files changed, 120 insertions(+), 11 deletions(-)
> 
> diff --git a/include/linux/ftrace.h b/include/linux/ftrace.h
> index 26eafce..b223944 100644
> --- a/include/linux/ftrace.h
> +++ b/include/linux/ftrace.h
> @@ -35,12 +35,14 @@ enum {
>  	FTRACE_OPS_FL_ENABLED		= 1 << 0,
>  	FTRACE_OPS_FL_GLOBAL		= 1 << 1,
>  	FTRACE_OPS_FL_DYNAMIC		= 1 << 2,
> +	FTRACE_OPS_FL_CONTROL		= 1 << 3,
>  };
>  
>  struct ftrace_ops {
>  	ftrace_func_t			func;
>  	struct ftrace_ops		*next;
>  	unsigned long			flags;
> +	void __percpu			*disabled;
>  #ifdef CONFIG_DYNAMIC_FTRACE
>  	struct ftrace_hash		*notrace_hash;
>  	struct ftrace_hash		*filter_hash;
> @@ -97,6 +99,18 @@ int register_ftrace_function(struct ftrace_ops *ops);
>  int unregister_ftrace_function(struct ftrace_ops *ops);
>  void clear_ftrace_function(void);
>  
> +static inline void enable_ftrace_function(struct ftrace_ops *ops)
> +{
> +	atomic_t *disabled = this_cpu_ptr(ops->disabled);
> +	atomic_dec(disabled);
> +}
> +
> +static inline void disable_ftrace_function(struct ftrace_ops *ops)
> +{
> +	atomic_t *disabled = this_cpu_ptr(ops->disabled);
> +	atomic_inc(disabled);
> +}
> +
>  extern void ftrace_stub(unsigned long a0, unsigned long a1);
>  
>  #else /* !CONFIG_FUNCTION_TRACER */
> diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c
> index b79ab33..c2fa233 100644
> --- a/kernel/trace/ftrace.c
> +++ b/kernel/trace/ftrace.c
> @@ -87,12 +87,14 @@ static struct ftrace_ops ftrace_list_end __read_mostly = {
>  };
>  
>  static struct ftrace_ops *ftrace_global_list __read_mostly = &ftrace_list_end;
> +static struct ftrace_ops *ftrace_control_list __read_mostly = &ftrace_list_end;
>  static struct ftrace_ops *ftrace_ops_list __read_mostly = &ftrace_list_end;
>  ftrace_func_t ftrace_trace_function __read_mostly = ftrace_stub;
>  static ftrace_func_t __ftrace_trace_function_delay __read_mostly = ftrace_stub;
>  ftrace_func_t __ftrace_trace_function __read_mostly = ftrace_stub;
>  ftrace_func_t ftrace_pid_function __read_mostly = ftrace_stub;
>  static struct ftrace_ops global_ops;
> +static struct ftrace_ops control_ops;
>  
>  static void
>  ftrace_ops_list_func(unsigned long ip, unsigned long parent_ip);
> @@ -166,6 +168,38 @@ static void ftrace_test_stop_func(unsigned long ip, unsigned long parent_ip)
>  }
>  #endif
>  
> +static void control_ops_disable_all(struct ftrace_ops *ops)
> +{
> +	int cpu;
> +
> +	for_each_possible_cpu(cpu)
> +		atomic_set(per_cpu_ptr(ops->disabled, cpu), 1);
> +}
> +
> +static int control_ops_alloc(struct ftrace_ops *ops)
> +{
> +	atomic_t *disabled;
> +
> +	disabled = alloc_percpu(atomic_t);
> +	if (!disabled)
> +		return -ENOMEM;
> +
> +	ops->disabled = disabled;
> +	control_ops_disable_all(ops);
> +	return 0;
> +}
> +
> +static void control_ops_free(struct ftrace_ops *ops)
> +{
> +	free_percpu(ops->disabled);
> +}
> +
> +static int control_ops_is_disabled(struct ftrace_ops *ops)
> +{
> +	atomic_t *disabled = this_cpu_ptr(ops->disabled);
> +	return atomic_read(disabled);
> +}
> +
>  static void update_global_ops(void)
>  {
>  	ftrace_func_t func;
> @@ -221,7 +255,7 @@ static void update_ftrace_function(void)
>  #endif
>  }
>  
> -static void add_ftrace_ops(struct ftrace_ops **list, struct ftrace_ops *ops)
> +static void __add_ftrace_ops(struct ftrace_ops **list, struct ftrace_ops *ops)

Don't do the above (see below).

>  {
>  	ops->next = *list;
>  	/*
> @@ -233,7 +267,7 @@ static void add_ftrace_ops(struct ftrace_ops **list, struct ftrace_ops *ops)
>  	rcu_assign_pointer(*list, ops);
>  }
>  
> -static int remove_ftrace_ops(struct ftrace_ops **list, struct ftrace_ops *ops)
> +static int __remove_ftrace_ops(struct ftrace_ops **list, struct ftrace_ops *ops)
>  {
>  	struct ftrace_ops **p;
>  
> @@ -257,6 +291,26 @@ static int remove_ftrace_ops(struct ftrace_ops **list, struct ftrace_ops *ops)
>  	return 0;
>  }
>  
> +static void add_ftrace_ops(struct ftrace_ops **list,
> +			   struct ftrace_ops *main_ops,
> +			   struct ftrace_ops *ops)

Call this add_ftrace_list_ops or something (see below).

> +{
> +	int first = *list == &ftrace_list_end;
> +	__add_ftrace_ops(list, ops);
> +	if (first)
> +		__add_ftrace_ops(&ftrace_ops_list, main_ops);
> +}
> +
> +static int remove_ftrace_ops(struct ftrace_ops **list,
> +			      struct ftrace_ops *main_ops,
> +			      struct ftrace_ops *ops)
> +{
> +	int ret = __remove_ftrace_ops(list, ops);
> +	if (!ret && *list == &ftrace_list_end)
> +		ret = __remove_ftrace_ops(&ftrace_ops_list, main_ops);
> +	return ret;
> +}
> +
>  static int __register_ftrace_function(struct ftrace_ops *ops)
>  {
>  	if (ftrace_disabled)
> @@ -268,17 +322,23 @@ static int __register_ftrace_function(struct ftrace_ops *ops)
>  	if (WARN_ON(ops->flags & FTRACE_OPS_FL_ENABLED))
>  		return -EBUSY;
>  
> +#define FL_GLOBAL_CONTROL (FTRACE_OPS_FL_GLOBAL | FTRACE_OPS_FL_CONTROL)
> +	if ((ops->flags & FL_GLOBAL_CONTROL) == FL_GLOBAL_CONTROL)
> +		return -EINVAL;
> +#undef FL_GLOBAL_CONTROL

The above is ugly. Just define a FL_GLOBAL_CONTROL near the top or
something.

> +
>  	if (!core_kernel_data((unsigned long)ops))
>  		ops->flags |= FTRACE_OPS_FL_DYNAMIC;
>  
>  	if (ops->flags & FTRACE_OPS_FL_GLOBAL) {
> -		int first = ftrace_global_list == &ftrace_list_end;
> -		add_ftrace_ops(&ftrace_global_list, ops);
> +		add_ftrace_ops(&ftrace_global_list, &global_ops, ops);
>  		ops->flags |= FTRACE_OPS_FL_ENABLED;
> -		if (first)
> -			add_ftrace_ops(&ftrace_ops_list, &global_ops);
> +	} else if (ops->flags & FTRACE_OPS_FL_CONTROL) {
> +		if (control_ops_alloc(ops))
> +			return -ENOMEM;
> +		add_ftrace_ops(&ftrace_control_list, &control_ops, ops);
>  	} else
> -		add_ftrace_ops(&ftrace_ops_list, ops);
> +		__add_ftrace_ops(&ftrace_ops_list, ops);


Don't use the name __add_ftrace_ops() and add_ftrace_ops() it's
confusing and error prone. Keep the add_ftrace_ops() as the original,
and make your new function "add_ftrace_list_ops()" or something.


>  
>  	if (ftrace_enabled)
>  		update_ftrace_function();
> @@ -300,13 +360,16 @@ static int __unregister_ftrace_function(struct ftrace_ops *ops)
>  		return -EINVAL;
>  
>  	if (ops->flags & FTRACE_OPS_FL_GLOBAL) {
> -		ret = remove_ftrace_ops(&ftrace_global_list, ops);
> -		if (!ret && ftrace_global_list == &ftrace_list_end)
> -			ret = remove_ftrace_ops(&ftrace_ops_list, &global_ops);
> +		ret = remove_ftrace_ops(&ftrace_global_list, &global_ops, ops);
>  		if (!ret)
>  			ops->flags &= ~FTRACE_OPS_FL_ENABLED;
> +	} else if (ops->flags & FTRACE_OPS_FL_CONTROL) {
> +		ret = remove_ftrace_ops(&ftrace_control_list,
> +					&control_ops, ops);
> +		if (!ret)

You need a synchronize_sched() here, otherwise you can have functions
accessing the ops->per_cpu variables. A process on another CPU could be
about to use the ops, and although you removed it from the list, it is
still being used on another CPU. If you free now without a
synchronize_sched(), the other CPU can be using the freed variable.

> +			control_ops_free(ops);
>  	} else
> -		ret = remove_ftrace_ops(&ftrace_ops_list, ops);
> +		ret = __remove_ftrace_ops(&ftrace_ops_list, ops);

Same thing goes with the remove_ftrace_ops and __remove_ftrace_ops().


>  
>  	if (ret < 0)
>  		return ret;
> @@ -3562,6 +3625,36 @@ ftrace_ops_test(struct ftrace_ops *ops, unsigned long ip)
>  #endif /* CONFIG_DYNAMIC_FTRACE */
>  
>  static void
> +ftrace_ops_control_func(unsigned long ip, unsigned long parent_ip)
> +{
> +	struct ftrace_ops *op;
> +
> +	if (unlikely(trace_recursion_test(TRACE_CONTROL_BIT)))
> +		return;
> +
> +	/*
> +	 * Some of the ops may be dynamically allocated,
> +	 * they must be freed after a synchronize_sched().
> +	 */
> +	preempt_disable_notrace();
> +	trace_recursion_set(TRACE_CONTROL_BIT);
> +	op = rcu_dereference_raw(ftrace_control_list);
> +	while (op != &ftrace_list_end) {
> +		if (!control_ops_is_disabled(op) &&
> +		    ftrace_ops_test(op, ip))
> +			op->func(ip, parent_ip);
> +
> +		op = rcu_dereference_raw(op->next);
> +	};
> +	preempt_enable_notrace();
> +	trace_recursion_clear(TRACE_CONTROL_BIT);

Shouldn't the above be reversed to match the preempt_disable() and
trace_recursion_set(). That is:

	preempt_disable();
	trace_recursion_set();
	[...]
	trace_recursion_clear();
	preempt_enable();

That would make in symmetric.


-- Steve

> +}
> +
> +static struct ftrace_ops control_ops = {
> +	.func = ftrace_ops_control_func,
> +};
> +
> +static void
>  ftrace_ops_list_func(unsigned long ip, unsigned long parent_ip)
>  {
>  	struct ftrace_ops *op;
> diff --git a/kernel/trace/trace.h b/kernel/trace/trace.h
> index f8ec229..da05926 100644
> --- a/kernel/trace/trace.h
> +++ b/kernel/trace/trace.h
> @@ -288,6 +288,8 @@ struct tracer {
>  /* for function tracing recursion */
>  #define TRACE_INTERNAL_BIT		(1<<11)
>  #define TRACE_GLOBAL_BIT		(1<<12)
> +#define TRACE_CONTROL_BIT		(1<<13)
> +
>  /*
>   * Abuse of the trace_recursion.
>   * As we need a way to maintain state if we are tracing the function



  reply	other threads:[~2011-12-19 19:19 UTC|newest]

Thread overview: 185+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-11-27 18:04 [RFC] ftrace, perf: Adding support to use function trace Jiri Olsa
2011-11-27 18:04 ` [PATCH 1/9] trace: Fix uninitialized variable compiler warning Jiri Olsa
2011-11-28 16:19   ` Steven Rostedt
2011-11-28 16:25     ` Jiri Olsa
2011-11-28 19:34       ` Steven Rostedt
2011-11-27 18:04 ` [PATCH 2/9] ftrace: Fix possible NULL dereferencing in __ftrace_hash_rec_update Jiri Olsa
2011-11-28 16:24   ` Steven Rostedt
2011-11-27 18:04 ` [PATCH 3/9] ftrace: Fix shutdown to disable calls properly Jiri Olsa
2011-11-28 19:18   ` Steven Rostedt
2011-11-29 11:21     ` Jiri Olsa
2011-11-27 18:04 ` [PATCH 4/9] ftrace: Add enable/disable ftrace_ops control interface Jiri Olsa
2011-11-28 19:26   ` Steven Rostedt
2011-11-28 20:02     ` Peter Zijlstra
2011-11-28 20:05       ` Peter Zijlstra
2011-11-28 20:14         ` Steven Rostedt
2011-11-28 20:20           ` Peter Zijlstra
2011-11-28 20:12       ` Steven Rostedt
2011-11-28 20:15         ` Peter Zijlstra
2011-11-28 20:24           ` Steven Rostedt
2011-11-28 20:21   ` Steven Rostedt
2011-11-29 10:07     ` Jiri Olsa
2011-11-27 18:04 ` [PATCH 5/9] ftrace, perf: Add open/close tracepoint perf registration actions Jiri Olsa
2011-11-27 18:04 ` [PATCH 6/9] ftrace, perf: Add add/del " Jiri Olsa
2011-11-27 18:04 ` [PATCH 7/9] ftrace, perf: Add support to use function tracepoint in perf Jiri Olsa
2011-11-28 19:58   ` Steven Rostedt
2011-11-28 20:03     ` Peter Zijlstra
2011-11-28 20:13       ` Steven Rostedt
2011-11-29 10:10         ` Jiri Olsa
2011-11-28 20:08     ` Peter Zijlstra
2011-11-28 20:10       ` Peter Zijlstra
2011-11-28 20:16         ` Steven Rostedt
2011-11-28 20:18           ` Peter Zijlstra
2011-11-27 18:04 ` [PATCH 8/9] ftrace, perf: Add FILTER_TRACE_FN event field type Jiri Olsa
2011-11-28 20:01   ` Steven Rostedt
2011-11-29 10:14     ` Jiri Olsa
2011-11-29 11:22     ` Jiri Olsa
2011-11-29 11:51       ` Peter Zijlstra
2011-11-29 12:21         ` Jiri Olsa
2011-11-27 18:04 ` [PATCH 9/9] ftrace, perf: Add filter support for function trace event Jiri Olsa
2011-11-28 20:07   ` Steven Rostedt
2011-12-05 17:22 ` [RFCv2] ftrace, perf: Adding support to use function trace Jiri Olsa
2011-12-05 17:22   ` [PATCHv2 01/10] ftrace: Fix possible NULL dereferencing in __ftrace_hash_rec_update Jiri Olsa
2011-12-05 17:22   ` [PATCHv2 02/10] ftrace: Change mcount call replacement logic Jiri Olsa
2011-12-19 19:03     ` Steven Rostedt
2011-12-20 13:10       ` Jiri Olsa
2011-12-20 16:33         ` Steven Rostedt
2011-12-20 19:39     ` Steven Rostedt
2011-12-21  9:57       ` Jiri Olsa
2011-12-21 11:34         ` Steven Rostedt
2011-12-21 11:35           ` Steven Rostedt
2011-12-21 11:40             ` Jiri Olsa
2012-01-08  9:13     ` [tip:perf/core] ftrace: Fix unregister ftrace_ops accounting tip-bot for Jiri Olsa
2011-12-05 17:22   ` [PATCHv2 03/10] ftrace: Add enable/disable ftrace_ops control interface Jiri Olsa
2011-12-19 19:19     ` Steven Rostedt [this message]
2011-12-19 19:35     ` Steven Rostedt
2011-12-20 14:57       ` Jiri Olsa
2011-12-20 15:25         ` Steven Rostedt
2011-12-20 15:35           ` Jiri Olsa
2011-12-05 17:22   ` [PATCHv2 04/10] ftrace, perf: Add open/close tracepoint perf registration actions Jiri Olsa
2011-12-05 17:22   ` [PATCHv2 05/10] ftrace, perf: Add add/del " Jiri Olsa
2011-12-05 17:22   ` [PATCHv2 06/10] ftrace, perf: Add support to use function tracepoint in perf Jiri Olsa
2011-12-05 17:22   ` [PATCHv2 07/10] ftrace: Change filter/notrace set functions to return exit code Jiri Olsa
2011-12-19 19:22     ` Steven Rostedt
2011-12-05 17:22   ` [PATCHv2 08/10] ftrace, perf: Distinguish ftrace function event field type Jiri Olsa
2011-12-05 17:22   ` [PATCHv2 09/10] ftrace, perf: Add filter support for function trace event Jiri Olsa
2011-12-05 17:22   ` [PATCHv2 10/10] ftrace, graph: Add global_ops filter callback for graph tracing Jiri Olsa
2011-12-19 19:27     ` Steven Rostedt
2011-12-19 13:40   ` [RFCv2] ftrace, perf: Adding support to use function trace Jiri Olsa
2011-12-19 16:45     ` Steven Rostedt
2011-12-19 16:58     ` Frederic Weisbecker
2011-12-21 11:48   ` [PATCHv3 0/8] " Jiri Olsa
2011-12-21 11:48     ` [PATCH 1/8] ftrace: Change filter/notrace set functions to return exit code Jiri Olsa
2011-12-21 11:48     ` [PATCH 2/8] ftrace: Fix possible NULL dereferencing in __ftrace_hash_rec_update Jiri Olsa
2011-12-21 15:23       ` Steven Rostedt
2011-12-21 11:48     ` [PATCH 3/8] ftrace: Add enable/disable ftrace_ops control interface Jiri Olsa
2011-12-21 16:01       ` Steven Rostedt
2011-12-21 16:43         ` Jiri Olsa
2011-12-21 16:55           ` Steven Rostedt
2012-01-24  1:26         ` Frederic Weisbecker
2011-12-21 11:48     ` [PATCH 4/8] ftrace, perf: Add open/close tracepoint perf registration actions Jiri Olsa
2011-12-21 11:48     ` [PATCH 5/8] ftrace, perf: Add add/del " Jiri Olsa
2011-12-21 11:48     ` [PATCH 6/8] ftrace, perf: Add support to use function tracepoint in perf Jiri Olsa
2011-12-21 11:48     ` [PATCH 7/8] ftrace, perf: Distinguish ftrace function event field type Jiri Olsa
2011-12-21 11:48     ` [PATCH 8/8] ftrace, perf: Add filter support for function trace event Jiri Olsa
2011-12-21 18:56     ` [PATCHv4 0/8] ftrace, perf: Adding support to use function trace Jiri Olsa
2011-12-21 18:56       ` [PATCH 1/7] ftrace: Change filter/notrace set functions to return exit code Jiri Olsa
2011-12-22  0:12         ` Steven Rostedt
2011-12-22  8:01           ` [PATCHv5 " Jiri Olsa
2011-12-21 18:56       ` [PATCH 2/7] ftrace: Add enable/disable ftrace_ops control interface Jiri Olsa
2011-12-21 18:56       ` [PATCH 3/7] ftrace, perf: Add open/close tracepoint perf registration actions Jiri Olsa
2011-12-21 18:56       ` [PATCH 4/7] ftrace, perf: Add add/del " Jiri Olsa
2011-12-21 18:56       ` [PATCH 5/7] ftrace, perf: Add support to use function tracepoint in perf Jiri Olsa
2011-12-21 18:56       ` [PATCH 6/7] ftrace, perf: Distinguish ftrace function event field type Jiri Olsa
2011-12-21 18:56       ` [PATCH 7/7] ftrace, perf: Add filter support for function trace event Jiri Olsa
2011-12-21 22:07         ` Frederic Weisbecker
2011-12-22 12:55           ` Jiri Olsa
2011-12-22 15:26             ` [PATCHvFIXED " Jiri Olsa
2011-12-24  2:35               ` Frederic Weisbecker
2011-12-21 19:02       ` [PATCHv4 0/7] ftrace, perf: Adding support to use function trace Jiri Olsa
2012-01-02  9:04       ` [PATCHv5 " Jiri Olsa
2012-01-02  9:04         ` [PATCH 1/7] ftrace: Change filter/notrace set functions to return exit code Jiri Olsa
2012-02-17 13:46           ` [tip:perf/core] ftrace: Change filter/ notrace " tip-bot for Jiri Olsa
2012-01-02  9:04         ` [PATCH 2/7] ftrace: Add enable/disable ftrace_ops control interface Jiri Olsa
2012-01-17  1:42           ` Frederic Weisbecker
2012-01-17  2:07             ` Steven Rostedt
2012-01-17  2:29               ` Frederic Weisbecker
2012-01-18 13:59             ` Jiri Olsa
2012-01-02  9:04         ` [PATCH 3/7] ftrace, perf: Add open/close tracepoint perf registration actions Jiri Olsa
2012-01-02  9:04         ` [PATCH 4/7] ftrace, perf: Add add/del " Jiri Olsa
2012-01-02  9:04         ` [PATCH 5/7] ftrace, perf: Add support to use function tracepoint in perf Jiri Olsa
2012-01-02  9:04         ` [PATCH 6/7] ftrace, perf: Distinguish ftrace function event field type Jiri Olsa
2012-01-02  9:04         ` [PATCH 7/7] ftrace, perf: Add filter support for function trace event Jiri Olsa
2012-01-16 23:59           ` Steven Rostedt
2012-01-18 13:45             ` Jiri Olsa
2012-01-16  8:57         ` [PATCHv5 0/7] ftrace, perf: Adding support to use function trace Jiri Olsa
2012-01-16 16:17           ` Steven Rostedt
2012-01-18 18:44         ` [PATCHv6 " Jiri Olsa
2012-01-18 18:44           ` [PATCH 1/7] ftrace: Change filter/notrace set functions to return exit code Jiri Olsa
2012-01-19 16:31             ` Frederic Weisbecker
2012-01-18 18:44           ` [PATCH 2/7] ftrace: Add enable/disable ftrace_ops control interface Jiri Olsa
2012-01-20 17:02             ` Frederic Weisbecker
2012-01-25 23:13               ` Steven Rostedt
2012-01-26  2:37                 ` Frederic Weisbecker
2012-01-27 10:37                   ` Jiri Olsa
2012-01-27 10:38                     ` Jiri Olsa
2012-01-27 16:40                     ` Frederic Weisbecker
2012-01-27 16:54                       ` Jiri Olsa
2012-01-27 17:02                         ` Frederic Weisbecker
2012-01-27 17:20                           ` Jiri Olsa
2012-01-28 16:39                             ` Frederic Weisbecker
2012-01-27 17:21                         ` Steven Rostedt
2012-01-18 18:44           ` [PATCH 3/7] ftrace, perf: Add open/close tracepoint perf registration actions Jiri Olsa
2012-01-18 18:44           ` [PATCH 4/7] ftrace, perf: Add add/del " Jiri Olsa
2012-01-18 18:44           ` [PATCH 5/7] ftrace, perf: Add support to use function tracepoint in perf Jiri Olsa
2012-01-18 18:44           ` [PATCH 6/7] ftrace, perf: Distinguish ftrace function event field type Jiri Olsa
2012-01-18 18:44           ` [PATCH 7/7] ftrace, perf: Add filter support for function trace event Jiri Olsa
2012-01-18 21:43           ` [PATCHv6 0/7] ftrace, perf: Adding support to use function trace Steven Rostedt
2012-01-28 18:43           ` [PATCHv7 " Jiri Olsa
2012-01-28 18:43             ` [PATCH 1/7] ftrace: Change filter/notrace set functions to return exit code Jiri Olsa
2012-01-30  5:42               ` Frederic Weisbecker
2012-01-28 18:43             ` [PATCH 2/7] ftrace: Add enable/disable ftrace_ops control interface Jiri Olsa
2012-01-30  5:59               ` Frederic Weisbecker
2012-01-30  9:18                 ` Jiri Olsa
2012-02-03 13:42                   ` Steven Rostedt
2012-02-03 13:50                     ` Jiri Olsa
2012-02-03 14:08                       ` Steven Rostedt
2012-02-03 14:22                         ` [PATCHv8 0/2] first 2 patches passed review Jiri Olsa
2012-02-03 14:22                           ` [PATCH 1/2] ftrace: Change filter/notrace set functions to return exit code Jiri Olsa
2012-02-03 14:22                           ` [PATCH 2/2] ftrace: Add enable/disable ftrace_ops control interface Jiri Olsa
2012-02-04 13:24                           ` [PATCHv8 0/2] first 2 patches passed review Frederic Weisbecker
2012-02-03 13:40               ` [PATCH 2/7] ftrace: Add enable/disable ftrace_ops control interface Steven Rostedt
2012-01-28 18:43             ` [PATCH 3/7] ftrace, perf: Add open/close tracepoint perf registration actions Jiri Olsa
2012-02-02 17:35               ` Frederic Weisbecker
2012-02-03 10:23                 ` Jiri Olsa
2012-01-28 18:43             ` [PATCH 4/7] ftrace, perf: Add add/del " Jiri Olsa
2012-02-02 17:42               ` Frederic Weisbecker
2012-01-28 18:43             ` [PATCH 5/7] ftrace, perf: Add support to use function tracepoint in perf Jiri Olsa
2012-02-02 18:14               ` Frederic Weisbecker
2012-02-03 12:54                 ` Jiri Olsa
2012-02-03 13:00                   ` Jiri Olsa
2012-02-03 14:07                     ` Steven Rostedt
2012-02-04 13:21                   ` Frederic Weisbecker
2012-02-06 19:35                     ` Steven Rostedt
2012-02-03 13:53                 ` Steven Rostedt
2012-01-28 18:43             ` [PATCH 6/7] ftrace, perf: Distinguish ftrace function event field type Jiri Olsa
2012-02-03 14:16               ` Steven Rostedt
2012-01-28 18:43             ` [PATCH 7/7] ftrace, perf: Add filter support for function trace event Jiri Olsa
2012-02-07  0:20               ` Jiri Olsa
2012-02-07 19:44             ` [PATCHv8 0/8] ftrace, perf: Adding support to use function trace Jiri Olsa
2012-02-07 19:44               ` [PATCH 1/8] ftrace: Change filter/notrace set functions to return exit code Jiri Olsa
2012-02-07 19:44               ` [PATCH 2/8] ftrace: Add enable/disable ftrace_ops control interface Jiri Olsa
2012-02-07 19:44               ` [PATCH 3/8] ftrace, perf: Add open/close tracepoint perf registration actions Jiri Olsa
2012-02-07 19:44               ` [PATCH 4/8] ftrace, perf: Add add/del " Jiri Olsa
2012-02-07 19:44               ` [PATCH 5/8] ftrace: Add FTRACE_ENTRY_REG macro to allow event registration Jiri Olsa
2012-02-07 19:44               ` [PATCH 6/8] ftrace, perf: Add support to use function tracepoint in perf Jiri Olsa
2012-02-07 19:44               ` [PATCH 7/8] ftrace: Allow to specify filter field type for ftrace events Jiri Olsa
2012-02-07 19:44               ` [PATCH 8/8] ftrace, perf: Add filter support for function trace event Jiri Olsa
2012-02-10 13:27               ` [PATCHv8 0/8] ftrace, perf: Adding support to use function trace Steven Rostedt
2012-02-10 14:45                 ` Steven Rostedt
2012-02-10 16:07                   ` Jiri Olsa
2012-02-10 16:48                     ` Frederic Weisbecker
2012-02-10 18:00                       ` Steven Rostedt
2012-02-10 18:05                         ` Frederic Weisbecker
2012-02-10 18:23                           ` David Ahern
2012-02-13 18:02               ` Steven Rostedt

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=1324322370.5916.35.camel@gandalf.stny.rr.com \
    --to=rostedt@goodmis.org \
    --cc=a.p.zijlstra@chello.nl \
    --cc=aarapov@redhat.com \
    --cc=acme@ghostprotocols.net \
    --cc=fweisbec@gmail.com \
    --cc=jolsa@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@redhat.com \
    --cc=paulus@samba.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).