linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 1/4] tracing/syscalls: Anotate some functions static
@ 2013-02-21  2:32 Li Zefan
  2013-02-21  2:32 ` [PATCH 2/4] tracing: Add a helper function for event print functions Li Zefan
                   ` (3 more replies)
  0 siblings, 4 replies; 8+ messages in thread
From: Li Zefan @ 2013-02-21  2:32 UTC (permalink / raw)
  To: Steven Rostedt; +Cc: Frederic Weisbecker, LKML


Signed-off-by: Li Zefan <lizefan@huawei.com>
---
 kernel/trace/trace_syscalls.c | 18 +++++++++---------
 1 file changed, 9 insertions(+), 9 deletions(-)

diff --git a/kernel/trace/trace_syscalls.c b/kernel/trace/trace_syscalls.c
index 7609dd6..5329e13 100644
--- a/kernel/trace/trace_syscalls.c
+++ b/kernel/trace/trace_syscalls.c
@@ -77,7 +77,7 @@ static struct syscall_metadata *syscall_nr_to_meta(int nr)
 	return syscalls_metadata[nr];
 }
 
-enum print_line_t
+static enum print_line_t
 print_syscall_enter(struct trace_iterator *iter, int flags,
 		    struct trace_event *event)
 {
@@ -130,7 +130,7 @@ end:
 	return TRACE_TYPE_HANDLED;
 }
 
-enum print_line_t
+static enum print_line_t
 print_syscall_exit(struct trace_iterator *iter, int flags,
 		   struct trace_event *event)
 {
@@ -270,7 +270,7 @@ static int syscall_exit_define_fields(struct ftrace_event_call *call)
 	return ret;
 }
 
-void ftrace_syscall_enter(void *ignore, struct pt_regs *regs, long id)
+static void ftrace_syscall_enter(void *ignore, struct pt_regs *regs, long id)
 {
 	struct syscall_trace_enter *entry;
 	struct syscall_metadata *sys_data;
@@ -305,7 +305,7 @@ void ftrace_syscall_enter(void *ignore, struct pt_regs *regs, long id)
 		trace_current_buffer_unlock_commit(buffer, event, 0, 0);
 }
 
-void ftrace_syscall_exit(void *ignore, struct pt_regs *regs, long ret)
+static void ftrace_syscall_exit(void *ignore, struct pt_regs *regs, long ret)
 {
 	struct syscall_trace_exit *entry;
 	struct syscall_metadata *sys_data;
@@ -337,7 +337,7 @@ void ftrace_syscall_exit(void *ignore, struct pt_regs *regs, long ret)
 		trace_current_buffer_unlock_commit(buffer, event, 0, 0);
 }
 
-int reg_event_syscall_enter(struct ftrace_event_call *call)
+static int reg_event_syscall_enter(struct ftrace_event_call *call)
 {
 	int ret = 0;
 	int num;
@@ -356,7 +356,7 @@ int reg_event_syscall_enter(struct ftrace_event_call *call)
 	return ret;
 }
 
-void unreg_event_syscall_enter(struct ftrace_event_call *call)
+static void unreg_event_syscall_enter(struct ftrace_event_call *call)
 {
 	int num;
 
@@ -371,7 +371,7 @@ void unreg_event_syscall_enter(struct ftrace_event_call *call)
 	mutex_unlock(&syscall_trace_lock);
 }
 
-int reg_event_syscall_exit(struct ftrace_event_call *call)
+static int reg_event_syscall_exit(struct ftrace_event_call *call)
 {
 	int ret = 0;
 	int num;
@@ -390,7 +390,7 @@ int reg_event_syscall_exit(struct ftrace_event_call *call)
 	return ret;
 }
 
-void unreg_event_syscall_exit(struct ftrace_event_call *call)
+static void unreg_event_syscall_exit(struct ftrace_event_call *call)
 {
 	int num;
 
@@ -459,7 +459,7 @@ unsigned long __init __weak arch_syscall_addr(int nr)
 	return (unsigned long)sys_call_table[nr];
 }
 
-int __init init_ftrace_syscalls(void)
+static int __init init_ftrace_syscalls(void)
 {
 	struct syscall_metadata *meta;
 	unsigned long addr;
-- 
1.8.0.2

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

* [PATCH 2/4] tracing: Add a helper function for event print functions
  2013-02-21  2:32 [PATCH 1/4] tracing/syscalls: Anotate some functions static Li Zefan
@ 2013-02-21  2:32 ` Li Zefan
  2013-03-02  3:37   ` Steven Rostedt
  2013-02-21  2:33 ` [PATCH 3/4] tracing: Annotate event field-defining functions with __init Li Zefan
                   ` (2 subsequent siblings)
  3 siblings, 1 reply; 8+ messages in thread
From: Li Zefan @ 2013-02-21  2:32 UTC (permalink / raw)
  To: Steven Rostedt; +Cc: Frederic Weisbecker, LKML

Move duplicate code in event print functions to a helper function.

This shrinks the size of the kernel by ~13K.

   text    data     bss     dec     hex filename
6596137 1743966 10138672        18478775        119f6b7 vmlinux.o.old
6583002 1743849 10138672        18465523        119c2f3 vmlinux.o.new

Signed-off-by: Li Zefan <lizefan@huawei.com>
---
 include/linux/ftrace_event.h |  8 ++++++--
 include/trace/ftrace.h       | 23 ++++++-----------------
 kernel/trace/trace_output.c  | 26 ++++++++++++++++++++++++++
 3 files changed, 38 insertions(+), 19 deletions(-)

diff --git a/include/linux/ftrace_event.h b/include/linux/ftrace_event.h
index a3d4895..d54d458 100644
--- a/include/linux/ftrace_event.h
+++ b/include/linux/ftrace_event.h
@@ -38,6 +38,12 @@ const char *ftrace_print_symbols_seq_u64(struct trace_seq *p,
 const char *ftrace_print_hex_seq(struct trace_seq *p,
 				 const unsigned char *buf, int len);
 
+struct trace_iterator;
+struct trace_event;
+
+int ftrace_raw_output_prep(struct trace_iterator *iter,
+			   struct trace_event *event);
+
 /*
  * The trace entry - the most basic unit of tracing. This is what
  * is printed in the end as a single line in the trace output, such as:
@@ -93,8 +99,6 @@ enum trace_iter_flags {
 };
 
 
-struct trace_event;
-
 typedef enum print_line_t (*trace_print_func)(struct trace_iterator *iter,
 				      int flags, struct trace_event *event);
 
diff --git a/include/trace/ftrace.h b/include/trace/ftrace.h
index 40dc5e8..20b6005 100644
--- a/include/trace/ftrace.h
+++ b/include/trace/ftrace.h
@@ -227,29 +227,18 @@ static notrace enum print_line_t					\
 ftrace_raw_output_##call(struct trace_iterator *iter, int flags,	\
 			 struct trace_event *trace_event)		\
 {									\
-	struct ftrace_event_call *event;				\
 	struct trace_seq *s = &iter->seq;				\
+	struct trace_seq __maybe_unused *p = &iter->tmp_seq;		\
 	struct ftrace_raw_##call *field;				\
-	struct trace_entry *entry;					\
-	struct trace_seq *p = &iter->tmp_seq;				\
 	int ret;							\
 									\
-	event = container_of(trace_event, struct ftrace_event_call,	\
-			     event);					\
-									\
-	entry = iter->ent;						\
+	field = (typeof(field))iter->ent;				\
 									\
-	if (entry->type != event->event.type) {				\
-		WARN_ON_ONCE(1);					\
-		return TRACE_TYPE_UNHANDLED;				\
-	}								\
-									\
-	field = (typeof(field))entry;					\
-									\
-	trace_seq_init(p);						\
-	ret = trace_seq_printf(s, "%s: ", event->name);			\
+	ret = ftrace_raw_output_prep(iter, trace_event);		\
 	if (ret)							\
-		ret = trace_seq_printf(s, print);			\
+		return ret;						\
+									\
+	ret = trace_seq_printf(s, print);				\
 	if (!ret)							\
 		return TRACE_TYPE_PARTIAL_LINE;				\
 									\
diff --git a/kernel/trace/trace_output.c b/kernel/trace/trace_output.c
index 194d796..aa92ac3 100644
--- a/kernel/trace/trace_output.c
+++ b/kernel/trace/trace_output.c
@@ -397,6 +397,32 @@ ftrace_print_hex_seq(struct trace_seq *p, const unsigned char *buf, int buf_len)
 }
 EXPORT_SYMBOL(ftrace_print_hex_seq);
 
+int ftrace_raw_output_prep(struct trace_iterator *iter,
+			   struct trace_event *trace_event)
+{
+	struct ftrace_event_call *event;
+	struct trace_seq *s = &iter->seq;
+	struct trace_seq *p = &iter->tmp_seq;
+	struct trace_entry *entry;
+	int ret;
+
+	event = container_of(trace_event, struct ftrace_event_call, event);
+	entry = iter->ent;
+
+	if (entry->type != event->event.type) {
+		WARN_ON_ONCE(1);
+		return TRACE_TYPE_UNHANDLED;
+	}
+
+	trace_seq_init(p);
+	ret = trace_seq_printf(s, "%s: ", event->name);
+	if (!ret)
+		return TRACE_TYPE_PARTIAL_LINE;
+
+	return 0;
+}
+EXPORT_SYMBOL(ftrace_raw_output_prep);
+
 #ifdef CONFIG_KRETPROBES
 static inline const char *kretprobed(const char *name)
 {
-- 
1.8.0.2

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

* [PATCH 3/4] tracing: Annotate event field-defining functions with __init
  2013-02-21  2:32 [PATCH 1/4] tracing/syscalls: Anotate some functions static Li Zefan
  2013-02-21  2:32 ` [PATCH 2/4] tracing: Add a helper function for event print functions Li Zefan
@ 2013-02-21  2:33 ` Li Zefan
  2013-03-02  3:48   ` Steven Rostedt
  2013-02-21  2:33 ` [PATCH 4/4] tracing/syscalls: Annotate " Li Zefan
  2013-03-02  3:17 ` [PATCH 1/4] tracing/syscalls: Anotate some functions static Steven Rostedt
  3 siblings, 1 reply; 8+ messages in thread
From: Li Zefan @ 2013-02-21  2:33 UTC (permalink / raw)
  To: Steven Rostedt; +Cc: Frederic Weisbecker, LKML

Those functions are called either during kernel boot or module init.

Before:

$ dmesg | grep 'Freeing unused kernel memory'
Freeing unused kernel memory: 1208k freed
Freeing unused kernel memory: 1360k freed
Freeing unused kernel memory: 1960k freed

After:

$ dmesg | grep 'Freeing unused kernel memory'
Freeing unused kernel memory: 1236k freed
Freeing unused kernel memory: 1388k freed
Freeing unused kernel memory: 1960k freed

Signed-off-by: Li Zefan <lizefan@huawei.com>
---
 include/trace/ftrace.h      | 2 +-
 kernel/trace/trace_export.c | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/include/trace/ftrace.h b/include/trace/ftrace.h
index 20b6005..dc18af3 100644
--- a/include/trace/ftrace.h
+++ b/include/trace/ftrace.h
@@ -324,7 +324,7 @@ static struct trace_event_functions ftrace_event_type_funcs_##call = {	\
 
 #undef DECLARE_EVENT_CLASS
 #define DECLARE_EVENT_CLASS(call, proto, args, tstruct, func, print)	\
-static int notrace							\
+static int notrace __init						\
 ftrace_define_fields_##call(struct ftrace_event_call *event_call)	\
 {									\
 	struct ftrace_raw_##call field;					\
diff --git a/kernel/trace/trace_export.c b/kernel/trace/trace_export.c
index e039906..4f6a91c 100644
--- a/kernel/trace/trace_export.c
+++ b/kernel/trace/trace_export.c
@@ -129,7 +129,7 @@ static void __always_unused ____ftrace_check_##name(void)		\
 
 #undef FTRACE_ENTRY
 #define FTRACE_ENTRY(name, struct_name, id, tstruct, print, filter)	\
-int									\
+static int __init							\
 ftrace_define_fields_##name(struct ftrace_event_call *event_call)	\
 {									\
 	struct struct_name field;					\
-- 
1.8.0.2

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

* [PATCH 4/4] tracing/syscalls: Annotate field-defining functions with __init
  2013-02-21  2:32 [PATCH 1/4] tracing/syscalls: Anotate some functions static Li Zefan
  2013-02-21  2:32 ` [PATCH 2/4] tracing: Add a helper function for event print functions Li Zefan
  2013-02-21  2:33 ` [PATCH 3/4] tracing: Annotate event field-defining functions with __init Li Zefan
@ 2013-02-21  2:33 ` Li Zefan
  2013-03-02  4:17   ` Steven Rostedt
  2013-03-02  3:17 ` [PATCH 1/4] tracing/syscalls: Anotate some functions static Steven Rostedt
  3 siblings, 1 reply; 8+ messages in thread
From: Li Zefan @ 2013-02-21  2:33 UTC (permalink / raw)
  To: Steven Rostedt; +Cc: Frederic Weisbecker, LKML

These two functions are called during kernel boot only.

Signed-off-by: Li Zefan <lizefan@huawei.com>
---
 kernel/trace/trace_syscalls.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/kernel/trace/trace_syscalls.c b/kernel/trace/trace_syscalls.c
index 5329e13..a70fa19 100644
--- a/kernel/trace/trace_syscalls.c
+++ b/kernel/trace/trace_syscalls.c
@@ -232,7 +232,7 @@ static void free_syscall_print_fmt(struct ftrace_event_call *call)
 		kfree(call->print_fmt);
 }
 
-static int syscall_enter_define_fields(struct ftrace_event_call *call)
+static int __init syscall_enter_define_fields(struct ftrace_event_call *call)
 {
 	struct syscall_trace_enter trace;
 	struct syscall_metadata *meta = call->data;
@@ -255,7 +255,7 @@ static int syscall_enter_define_fields(struct ftrace_event_call *call)
 	return ret;
 }
 
-static int syscall_exit_define_fields(struct ftrace_event_call *call)
+static int __init syscall_exit_define_fields(struct ftrace_event_call *call)
 {
 	struct syscall_trace_exit trace;
 	int ret;
-- 
1.8.0.2

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

* Re: [PATCH 1/4] tracing/syscalls: Anotate some functions static
  2013-02-21  2:32 [PATCH 1/4] tracing/syscalls: Anotate some functions static Li Zefan
                   ` (2 preceding siblings ...)
  2013-02-21  2:33 ` [PATCH 4/4] tracing/syscalls: Annotate " Li Zefan
@ 2013-03-02  3:17 ` Steven Rostedt
  3 siblings, 0 replies; 8+ messages in thread
From: Steven Rostedt @ 2013-03-02  3:17 UTC (permalink / raw)
  To: Li Zefan; +Cc: Frederic Weisbecker, LKML

This has been fixed already in mainline:

commit 6aea49cb5f3001a8275bf9c9f586ec3eb39af194
tracing/syscalls: Make local functions static
Author: Fengguang Wu <fengguang.wu@intel.com>

-- Steve


On Thu, 2013-02-21 at 10:32 +0800, Li Zefan wrote:
> Signed-off-by: Li Zefan <lizefan@huawei.com>
> ---
>  kernel/trace/trace_syscalls.c | 18 +++++++++---------
>  1 file changed, 9 insertions(+), 9 deletions(-)
> 
> diff --git a/kernel/trace/trace_syscalls.c b/kernel/trace/trace_syscalls.c
> index 7609dd6..5329e13 100644
> --- a/kernel/trace/trace_syscalls.c
> +++ b/kernel/trace/trace_syscalls.c
> @@ -77,7 +77,7 @@ static struct syscall_metadata *syscall_nr_to_meta(int nr)
>  	return syscalls_metadata[nr];
>  }
>  
> -enum print_line_t
> +static enum print_line_t
>  print_syscall_enter(struct trace_iterator *iter, int flags,
>  		    struct trace_event *event)
>  {
> @@ -130,7 +130,7 @@ end:
>  	return TRACE_TYPE_HANDLED;
>  }
>  



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

* Re: [PATCH 2/4] tracing: Add a helper function for event print functions
  2013-02-21  2:32 ` [PATCH 2/4] tracing: Add a helper function for event print functions Li Zefan
@ 2013-03-02  3:37   ` Steven Rostedt
  0 siblings, 0 replies; 8+ messages in thread
From: Steven Rostedt @ 2013-03-02  3:37 UTC (permalink / raw)
  To: Li Zefan; +Cc: Frederic Weisbecker, LKML

On Thu, 2013-02-21 at 10:32 +0800, Li Zefan wrote:
> Move duplicate code in event print functions to a helper function.
> 
> This shrinks the size of the kernel by ~13K.
> 
>    text    data     bss     dec     hex filename
> 6596137 1743966 10138672        18478775        119f6b7 vmlinux.o.old
> 6583002 1743849 10138672        18465523        119c2f3 vmlinux.o.new

Nice! I just tried it out and got:

   text    data     bss     dec     hex filename
7747813 1673816 1503232 10924861         a6b33d vmlinux.old
7715443 1673560 1499136 10888139         a623cb vmlinux.new

Of course I have a lot of debugging enabled at the moment, which
probably exaggerates these numbers a bit. But still, 36K in savings is
nice for even a debug kernel :-)

I'll start beating on this patch for a bit, and will most likely add it
to my v3.10 queue.

Thanks!

-- Steve



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

* Re: [PATCH 3/4] tracing: Annotate event field-defining functions with __init
  2013-02-21  2:33 ` [PATCH 3/4] tracing: Annotate event field-defining functions with __init Li Zefan
@ 2013-03-02  3:48   ` Steven Rostedt
  0 siblings, 0 replies; 8+ messages in thread
From: Steven Rostedt @ 2013-03-02  3:48 UTC (permalink / raw)
  To: Li Zefan; +Cc: Frederic Weisbecker, LKML

On Thu, 2013-02-21 at 10:33 +0800, Li Zefan wrote:
> Those functions are called either during kernel boot or module init.
> 
> Before:
> 
> $ dmesg | grep 'Freeing unused kernel memory'
> Freeing unused kernel memory: 1208k freed
> Freeing unused kernel memory: 1360k freed
> Freeing unused kernel memory: 1960k freed
> 
> After:
> 
> $ dmesg | grep 'Freeing unused kernel memory'
> Freeing unused kernel memory: 1236k freed
> Freeing unused kernel memory: 1388k freed
> Freeing unused kernel memory: 1960k freed

Also nice :-)

Here's my numbers (again with lots of debug enabled):

old:
[    0.027087] Freeing SMP alternatives: 12k freed
[    6.835298] Freeing initrd memory: 8004k freed
[   18.820837] Freeing unused kernel memory: 1092k freed
[   18.838487] Freeing unused kernel memory: 1456k freed
[   18.850665] Freeing unused kernel memory: 1544k freed

new:
[    0.025087] Freeing SMP alternatives: 12k freed
[    6.775349] Freeing initrd memory: 8004k freed
[   18.753519] Freeing unused kernel memory: 1144k freed
[   18.771447] Freeing unused kernel memory: 1508k freed
[   18.783637] Freeing unused kernel memory: 1544k freed

Lets hope these pass all my tests.

-- Steve




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

* Re: [PATCH 4/4] tracing/syscalls: Annotate field-defining functions with __init
  2013-02-21  2:33 ` [PATCH 4/4] tracing/syscalls: Annotate " Li Zefan
@ 2013-03-02  4:17   ` Steven Rostedt
  0 siblings, 0 replies; 8+ messages in thread
From: Steven Rostedt @ 2013-03-02  4:17 UTC (permalink / raw)
  To: Li Zefan; +Cc: Frederic Weisbecker, LKML

On Thu, 2013-02-21 at 10:33 +0800, Li Zefan wrote:
> These two functions are called during kernel boot only.
> 

Applied, thanks Li!

-- Steve

> Signed-off-by: Li Zefan <lizefan@huawei.com>
> ---
>  kernel/trace/trace_syscalls.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/kernel/trace/trace_syscalls.c b/kernel/trace/trace_syscalls.c
> index 5329e13..a70fa19 100644
> --- a/kernel/trace/trace_syscalls.c
> +++ b/kernel/trace/trace_syscalls.c
> @@ -232,7 +232,7 @@ static void free_syscall_print_fmt(struct ftrace_event_call *call)
>  		kfree(call->print_fmt);
>  }
>  
> -static int syscall_enter_define_fields(struct ftrace_event_call *call)
> +static int __init syscall_enter_define_fields(struct ftrace_event_call *call)
>  {
>  	struct syscall_trace_enter trace;
>  	struct syscall_metadata *meta = call->data;
> @@ -255,7 +255,7 @@ static int syscall_enter_define_fields(struct ftrace_event_call *call)
>  	return ret;
>  }
>  
> -static int syscall_exit_define_fields(struct ftrace_event_call *call)
> +static int __init syscall_exit_define_fields(struct ftrace_event_call *call)
>  {
>  	struct syscall_trace_exit trace;
>  	int ret;



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

end of thread, other threads:[~2013-03-02  4:17 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-02-21  2:32 [PATCH 1/4] tracing/syscalls: Anotate some functions static Li Zefan
2013-02-21  2:32 ` [PATCH 2/4] tracing: Add a helper function for event print functions Li Zefan
2013-03-02  3:37   ` Steven Rostedt
2013-02-21  2:33 ` [PATCH 3/4] tracing: Annotate event field-defining functions with __init Li Zefan
2013-03-02  3:48   ` Steven Rostedt
2013-02-21  2:33 ` [PATCH 4/4] tracing/syscalls: Annotate " Li Zefan
2013-03-02  4:17   ` Steven Rostedt
2013-03-02  3:17 ` [PATCH 1/4] tracing/syscalls: Anotate some functions static Steven Rostedt

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).