LKML Archive on lore.kernel.org
 help / color / Atom feed
* [PATCH 0/2] Stack trace fix and ftrace documentation fixes
@ 2014-04-20 15:10 Jiaxing Wang
  2014-04-20 15:10 ` [PATCH 1/2] tracing/trace_stack:Skip 4 instead of 3 when using ftrace_ops_list_func Jiaxing Wang
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Jiaxing Wang @ 2014-04-20 15:10 UTC (permalink / raw)
  To: Steven Rostedt, Frederic Weisbecker, Ingo Molnar
  Cc: linux-kernel, Jiaxing Wang

The first patch makes trace_stack to skip 4 instead of 3 function 
return addresses on the stack when ftrace_ops_list_func is used in ftrace,
and added a function to check for this.

The second correct the documentation of two functions in ftrace.c

Jiaxing Wang (2):
  tracing/trace_stack:Skip 4 instead of 3 when using
    ftrace_ops_list_func
  Correct documentation of ftrace_set_global_filter and
    ftrace_set_global_notrace

 kernel/trace/ftrace.c      | 11 +++++++----
 kernel/trace/trace.h       |  1 +
 kernel/trace/trace_stack.c |  8 ++++++--
 3 files changed, 14 insertions(+), 6 deletions(-)

-- 
1.8.3.2


^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCH 1/2] tracing/trace_stack:Skip 4 instead of 3 when using ftrace_ops_list_func
  2014-04-20 15:10 [PATCH 0/2] Stack trace fix and ftrace documentation fixes Jiaxing Wang
@ 2014-04-20 15:10 ` Jiaxing Wang
  2014-04-20 15:10 ` [PATCH 2/2] Correct documentation of ftrace_set_global_filter and ftrace_set_global_notrace Jiaxing Wang
  2014-04-23 12:21 ` [PATCH 0/2] Stack trace fix and ftrace documentation fixes Steven Rostedt
  2 siblings, 0 replies; 4+ messages in thread
From: Jiaxing Wang @ 2014-04-20 15:10 UTC (permalink / raw)
  To: Steven Rostedt, Frederic Weisbecker, Ingo Molnar
  Cc: linux-kernel, Jiaxing Wang

When using ftrace_ops_list_func, we should skip 4 instead of 3,
to avoid ftrace_call+0x5/0xb appearing in the stack trace:

        Depth    Size   Location    (110 entries)
        -----    ----   --------
  0)     2956       0   update_curr+0xe/0x1e0
  1)     2956      68   ftrace_call+0x5/0xb
  2)     2888      92   enqueue_entity+0x53/0xe80
  3)     2796      80   enqueue_task_fair+0x47/0x7e0
  4)     2716      28   enqueue_task+0x45/0x70
  5)     2688      12   activate_task+0x22/0x30

Add a function using_ftrace_ops_list_func() to test for this while keeping
ftrace_ops_list_func to remain static.

Signed-off-by: Jiaxing Wang <wangjiaxing@insigma.com.cn>
---
 kernel/trace/ftrace.c      | 5 +++++
 kernel/trace/trace.h       | 1 +
 kernel/trace/trace_stack.c | 8 ++++++--
 3 files changed, 12 insertions(+), 2 deletions(-)

diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c
index 1fd4b94..e7e7302 100644
--- a/kernel/trace/ftrace.c
+++ b/kernel/trace/ftrace.c
@@ -373,6 +373,11 @@ static void update_ftrace_function(void)
 	ftrace_trace_function = func;
 }
 
+int using_ftrace_ops_list_func(void)
+{
+	return ftrace_trace_function == ftrace_ops_list_func;
+}
+
 static void add_ftrace_ops(struct ftrace_ops **list, struct ftrace_ops *ops)
 {
 	ops->next = *list;
diff --git a/kernel/trace/trace.h b/kernel/trace/trace.h
index ffc314b..920c0a5 100644
--- a/kernel/trace/trace.h
+++ b/kernel/trace/trace.h
@@ -822,6 +822,7 @@ extern int ftrace_is_dead(void);
 int ftrace_create_function_files(struct trace_array *tr,
 				 struct dentry *parent);
 void ftrace_destroy_function_files(struct trace_array *tr);
+int using_ftrace_ops_list_func(void);
 #else
 static inline int ftrace_trace_task(struct task_struct *task)
 {
diff --git a/kernel/trace/trace_stack.c b/kernel/trace/trace_stack.c
index 21b320e..5aa9a5b 100644
--- a/kernel/trace/trace_stack.c
+++ b/kernel/trace/trace_stack.c
@@ -85,8 +85,12 @@ check_stack(unsigned long ip, unsigned long *stack)
 
 	max_stack_size = this_size;
 
-	max_stack_trace.nr_entries	= 0;
-	max_stack_trace.skip		= 3;
+	max_stack_trace.nr_entries = 0;
+
+	if (using_ftrace_ops_list_func())
+		max_stack_trace.skip = 4;
+	else
+		max_stack_trace.skip = 3;
 
 	save_stack_trace(&max_stack_trace);
 
-- 
1.8.3.2


^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCH 2/2] Correct documentation of ftrace_set_global_filter and ftrace_set_global_notrace
  2014-04-20 15:10 [PATCH 0/2] Stack trace fix and ftrace documentation fixes Jiaxing Wang
  2014-04-20 15:10 ` [PATCH 1/2] tracing/trace_stack:Skip 4 instead of 3 when using ftrace_ops_list_func Jiaxing Wang
@ 2014-04-20 15:10 ` Jiaxing Wang
  2014-04-23 12:21 ` [PATCH 0/2] Stack trace fix and ftrace documentation fixes Steven Rostedt
  2 siblings, 0 replies; 4+ messages in thread
From: Jiaxing Wang @ 2014-04-20 15:10 UTC (permalink / raw)
  To: Steven Rostedt, Frederic Weisbecker, Ingo Molnar
  Cc: linux-kernel, Jiaxing Wang

Signed-off-by: Jiaxing Wang <wangjiaxing@insigma.com.cn>
---
 kernel/trace/ftrace.c | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c
index e7e7302..57cdaba 100644
--- a/kernel/trace/ftrace.c
+++ b/kernel/trace/ftrace.c
@@ -3644,8 +3644,7 @@ int ftrace_set_notrace(struct ftrace_ops *ops, unsigned char *buf,
 }
 EXPORT_SYMBOL_GPL(ftrace_set_notrace);
 /**
- * ftrace_set_filter - set a function to filter on in ftrace
- * @ops - the ops to set the filter with
+ * ftrace_set_global_filter - set a function to filter on with global tracers
  * @buf - the string that holds the function filter text.
  * @len - the length of the string.
  * @reset - non zero to reset all filters before applying this filter.
@@ -3660,8 +3659,7 @@ void ftrace_set_global_filter(unsigned char *buf, int len, int reset)
 EXPORT_SYMBOL_GPL(ftrace_set_global_filter);
 
 /**
- * ftrace_set_notrace - set a function to not trace in ftrace
- * @ops - the ops to set the notrace filter with
+ * ftrace_set_global_notrace - set a function to not trace with global tracers
  * @buf - the string that holds the function notrace text.
  * @len - the length of the string.
  * @reset - non zero to reset all filters before applying this filter.
-- 
1.8.3.2


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH 0/2] Stack trace fix and ftrace documentation fixes
  2014-04-20 15:10 [PATCH 0/2] Stack trace fix and ftrace documentation fixes Jiaxing Wang
  2014-04-20 15:10 ` [PATCH 1/2] tracing/trace_stack:Skip 4 instead of 3 when using ftrace_ops_list_func Jiaxing Wang
  2014-04-20 15:10 ` [PATCH 2/2] Correct documentation of ftrace_set_global_filter and ftrace_set_global_notrace Jiaxing Wang
@ 2014-04-23 12:21 ` Steven Rostedt
  2 siblings, 0 replies; 4+ messages in thread
From: Steven Rostedt @ 2014-04-23 12:21 UTC (permalink / raw)
  To: Jiaxing Wang; +Cc: Frederic Weisbecker, Ingo Molnar, linux-kernel

On Sun, 20 Apr 2014 23:10:42 +0800
Jiaxing Wang <wangjiaxing@insigma.com.cn> wrote:

> The first patch makes trace_stack to skip 4 instead of 3 function 
> return addresses on the stack when ftrace_ops_list_func is used in ftrace,
> and added a function to check for this.
> 
> The second correct the documentation of two functions in ftrace.c
> 
> Jiaxing Wang (2):
>   tracing/trace_stack:Skip 4 instead of 3 when using
>     ftrace_ops_list_func
>   Correct documentation of ftrace_set_global_filter and
>     ftrace_set_global_notrace
> 
>  kernel/trace/ftrace.c      | 11 +++++++----
>  kernel/trace/trace.h       |  1 +
>  kernel/trace/trace_stack.c |  8 ++++++--
>  3 files changed, 14 insertions(+), 6 deletions(-)
> 

I'm a bit busy right now, but I have this in my todo list to look at.

Thanks,

-- Steve

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, back to index

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-04-20 15:10 [PATCH 0/2] Stack trace fix and ftrace documentation fixes Jiaxing Wang
2014-04-20 15:10 ` [PATCH 1/2] tracing/trace_stack:Skip 4 instead of 3 when using ftrace_ops_list_func Jiaxing Wang
2014-04-20 15:10 ` [PATCH 2/2] Correct documentation of ftrace_set_global_filter and ftrace_set_global_notrace Jiaxing Wang
2014-04-23 12:21 ` [PATCH 0/2] Stack trace fix and ftrace documentation fixes Steven Rostedt

LKML Archive on lore.kernel.org

Archives are clonable:
	git clone --mirror https://lore.kernel.org/lkml/0 lkml/git/0.git
	git clone --mirror https://lore.kernel.org/lkml/1 lkml/git/1.git
	git clone --mirror https://lore.kernel.org/lkml/2 lkml/git/2.git
	git clone --mirror https://lore.kernel.org/lkml/3 lkml/git/3.git
	git clone --mirror https://lore.kernel.org/lkml/4 lkml/git/4.git
	git clone --mirror https://lore.kernel.org/lkml/5 lkml/git/5.git
	git clone --mirror https://lore.kernel.org/lkml/6 lkml/git/6.git
	git clone --mirror https://lore.kernel.org/lkml/7 lkml/git/7.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 lkml lkml/ https://lore.kernel.org/lkml \
		linux-kernel@vger.kernel.org
	public-inbox-index lkml

Example config snippet for mirrors

Newsgroup available over NNTP:
	nntp://nntp.lore.kernel.org/org.kernel.vger.linux-kernel


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git