All of lore.kernel.org
 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 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.