All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jiri Olsa <jolsa@redhat.com>
To: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Steven Rostedt <rostedt@goodmis.org>,
	mingo@redhat.com, paulus@samba.org, acme@ghostprotocols.net,
	a.p.zijlstra@chello.nl, linux-kernel@vger.kernel.org,
	aarapov@redhat.com
Subject: Re: [PATCH 2/7] ftrace: Add enable/disable ftrace_ops control interface
Date: Fri, 27 Jan 2012 18:20:12 +0100	[thread overview]
Message-ID: <20120127172012.GE10601@m.brq.redhat.com> (raw)
In-Reply-To: <20120127170202.GB3391@somewhere>

On Fri, Jan 27, 2012 at 06:02:04PM +0100, Frederic Weisbecker wrote:
> On Fri, Jan 27, 2012 at 05:54:16PM +0100, Jiri Olsa wrote:
> > On Fri, Jan 27, 2012 at 05:40:49PM +0100, Frederic Weisbecker wrote:
> > > On Fri, Jan 27, 2012 at 11:37:14AM +0100, Jiri Olsa wrote:
> > > > On Thu, Jan 26, 2012 at 03:37:29AM +0100, Frederic Weisbecker wrote:
> > > > > On Wed, Jan 25, 2012 at 06:13:41PM -0500, Steven Rostedt wrote:
> > > > > > On Fri, 2012-01-20 at 18:02 +0100, Frederic Weisbecker wrote:
> > > > > > >  
> > > > > > > > +/**
> > > > > > > > + * ftrace_function_enable - enable controlled ftrace_ops on given cpu
> > > > > > > > + *
> > > > > > > > + * This function enables tracing on given cpu by decreasing
> > > > > > > > + * the per cpu control variable.
> > > > > > > > + * It must be called with preemption disabled and only on
> > > > > > > > + * ftrace_ops registered with FTRACE_OPS_FL_CONTROL.
> > > > > > > > + */
> > > > > > > > +static inline void ftrace_function_enable(struct ftrace_ops *ops, int cpu)
> > > > > > > > +{
> > > > > > > > +	atomic_t *disabled;
> > > > > > > > +
> > > > > > > > +	if (WARN_ON_ONCE(!(ops->flags & FTRACE_OPS_FL_CONTROL) ||
> > > > > > > > +			 !preempt_count()))
> > > > > > > > +		return;
> > > > > > > > +
> > > > > > > > +	disabled = per_cpu_ptr(ops->disabled, cpu);
> > > > > > > > +	atomic_dec(disabled);
> > > > > > > > +}
> > > > > > > 
> > > > > > > As you're using this for the local CPU exclusively, I suggest you rather
> > > > > > > rename it to "ftrace_function_{dis,en}able_cpu(struct ftrace_ops *ops)"
> > > > > > 
> > > > > > I wonder if "ftrace_function_local_{dis,en}able(ops)" would be better?
> > > > > > That would match something like local_irq_disable/enable.
> > > > > 
> > > > > Good idea.
> > > > > 
> > > > > > 
> > > > > > > and use __get_cpu_var() that does the preempt check for you.
> > > > 
> > > > I haven't found preempt check this_cpu_ptr path.. not sure I missed it..
> > > > so I'm keeping the implicit preemt check.
> > > 
> > > #ifdef CONFIG_DEBUG_PREEMPT
> > > #define my_cpu_offset per_cpu_offset(smp_processor_id())
> > > #else
> > > #define my_cpu_offset __my_cpu_offset
> > > #endif
> > > 
> > > #ifdef CONFIG_DEBUG_PREEMPT
> > > #define this_cpu_ptr(ptr) SHIFT_PERCPU_PTR(ptr, my_cpu_offset)
> > > #else
> > > #define this_cpu_ptr(ptr) __this_cpu_ptr(ptr)
> > > #endif
> > > 
> > > And smp_processor_id() has a preemption check.
> > 
> > yay.. ok :) so this one is triggered only if there's CONFIG_DEBUG_PREEMPT
> > option enabled.. seems to me it'd better to keep the implicit check anyway.
> > 
> > jirka
> 
> 
> This is a debugging option deemed to lower runtime debugging checks in
> production.
> 
> Is there a good reason to keep the check on every case?

none I guess, apart from me feeling better.. ;)
attached new version without the preemt_count check int the WARN_ON_ONCE

thanks,
jirka


---
diff --git a/include/linux/ftrace.h b/include/linux/ftrace.h
index f33fb3b..d95df4b 100644
--- a/include/linux/ftrace.h
+++ b/include/linux/ftrace.h
@@ -31,16 +31,32 @@ ftrace_enable_sysctl(struct ctl_table *table, int write,
 
 typedef void (*ftrace_func_t)(unsigned long ip, unsigned long parent_ip);
 
+/*
+ * FTRACE_OPS_FL_* bits denote the state of ftrace_ops struct and are
+ * set in the flags member.
+ *
+ * ENABLED - set/unset when ftrace_ops is registered/unregistered
+ * GLOBAL  - set manualy by ftrace_ops user to denote the ftrace_ops
+ *           is part of the global tracers sharing the same filter
+ *           via set_ftrace_* debugfs files.
+ * DYNAMIC - set when ftrace_ops is registered to denote dynamically
+ *           allocated ftrace_ops which need special care
+ * CONTROL - set manualy by ftrace_ops user to denote the ftrace_ops
+ *           could be controled by following calls:
+ *           ftrace_function_enable, ftrace_function_disable
+ */
 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;
+	int __percpu			*disabled;
 #ifdef CONFIG_DYNAMIC_FTRACE
 	struct ftrace_hash		*notrace_hash;
 	struct ftrace_hash		*filter_hash;
@@ -97,6 +113,52 @@ int register_ftrace_function(struct ftrace_ops *ops);
 int unregister_ftrace_function(struct ftrace_ops *ops);
 void clear_ftrace_function(void);
 
+/**
+ * ftrace_function_local_enable - enable controlled ftrace_ops on current cpu
+ *
+ * This function enables tracing on current cpu by decreasing
+ * the per cpu control variable.
+ * It must be called with preemption disabled and only on
+ * ftrace_ops registered with FTRACE_OPS_FL_CONTROL.
+ */
+static inline void ftrace_function_local_enable(struct ftrace_ops *ops)
+{
+	if (WARN_ON_ONCE(!(ops->flags & FTRACE_OPS_FL_CONTROL)))
+		return;
+
+	(*this_cpu_ptr(ops->disabled))--;
+}
+
+/**
+ * ftrace_function_local_disable - enable controlled ftrace_ops on current cpu
+ *
+ * This function enables tracing on current cpu by decreasing
+ * the per cpu control variable.
+ * It must be called with preemption disabled and only on
+ * ftrace_ops registered with FTRACE_OPS_FL_CONTROL.
+ */
+static inline void ftrace_function_local_disable(struct ftrace_ops *ops)
+{
+	if (WARN_ON_ONCE(!(ops->flags & FTRACE_OPS_FL_CONTROL)))
+		return;
+
+	(*this_cpu_ptr(ops->disabled))++;
+}
+
+/**
+ * ftrace_function_local_disabled - returns ftrace_ops disabled value
+ *                                  on current cpu
+ *
+ * This function returns value of ftrace_ops::disabled on current cpu.
+ * It must be called with preemption disabled and only on
+ * ftrace_ops registered with FTRACE_OPS_FL_CONTROL.
+ */
+static inline int ftrace_function_local_disabled(struct ftrace_ops *ops)
+{
+	WARN_ON_ONCE(!(ops->flags & FTRACE_OPS_FL_CONTROL));
+	return *this_cpu_ptr(ops->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 e2e0597..c8d2af2 100644
--- a/kernel/trace/ftrace.c
+++ b/kernel/trace/ftrace.c
@@ -62,6 +62,8 @@
 #define FTRACE_HASH_DEFAULT_BITS 10
 #define FTRACE_HASH_MAX_BITS 12
 
+#define FL_GLOBAL_CONTROL_MASK (FTRACE_OPS_FL_GLOBAL | FTRACE_OPS_FL_CONTROL)
+
 /* ftrace_enabled is a method to turn ftrace on or off */
 int ftrace_enabled __read_mostly;
 static int last_ftrace_enabled;
@@ -89,12 +91,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);
@@ -168,6 +172,32 @@ 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)
+		*per_cpu_ptr(ops->disabled, cpu) = 1;
+}
+
+static int control_ops_alloc(struct ftrace_ops *ops)
+{
+	int __percpu *disabled;
+
+	disabled = alloc_percpu(int);
+	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 void update_global_ops(void)
 {
 	ftrace_func_t func;
@@ -259,6 +289,26 @@ static int remove_ftrace_ops(struct ftrace_ops **list, struct ftrace_ops *ops)
 	return 0;
 }
 
+static void add_ftrace_list_ops(struct ftrace_ops **list,
+				struct ftrace_ops *main_ops,
+				struct ftrace_ops *ops)
+{
+	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_list_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)
@@ -270,15 +320,20 @@ static int __register_ftrace_function(struct ftrace_ops *ops)
 	if (WARN_ON(ops->flags & FTRACE_OPS_FL_ENABLED))
 		return -EBUSY;
 
+	/* We don't support both control and global flags set. */
+	if ((ops->flags & FL_GLOBAL_CONTROL_MASK) == FL_GLOBAL_CONTROL_MASK)
+		return -EINVAL;
+
 	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_list_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_list_ops(&ftrace_control_list, &control_ops, ops);
 	} else
 		add_ftrace_ops(&ftrace_ops_list, ops);
 
@@ -302,11 +357,23 @@ 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_list_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_list_ops(&ftrace_control_list,
+					     &control_ops, ops);
+		if (!ret) {
+			/*
+			 * The ftrace_ops is now removed from the list,
+			 * so there'll be no new users. We must ensure
+			 * all current users are done before we free
+			 * the control data.
+			 */
+			synchronize_sched();
+			control_ops_free(ops);
+		}
 	} else
 		ret = remove_ftrace_ops(&ftrace_ops_list, ops);
 
@@ -3874,6 +3941,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 (!ftrace_function_local_disabled(op) &&
+		    ftrace_ops_test(op, ip))
+			op->func(ip, parent_ip);
+
+		op = rcu_dereference_raw(op->next);
+	};
+	trace_recursion_clear(TRACE_CONTROL_BIT);
+	preempt_enable_notrace();
+}
+
+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 b93ecba..55c6ea0 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:[~2012-01-27 17:20 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
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 [this message]
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=20120127172012.GE10601@m.brq.redhat.com \
    --to=jolsa@redhat.com \
    --cc=a.p.zijlstra@chello.nl \
    --cc=aarapov@redhat.com \
    --cc=acme@ghostprotocols.net \
    --cc=fweisbec@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@redhat.com \
    --cc=paulus@samba.org \
    --cc=rostedt@goodmis.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.