public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* Re: [PATCH 1/6] Tracing/fastboot: Enable boot tracing only during initcalls
  2008-10-10 12:36 [PATCH 1/6] Tracing/fastboot: Enable boot tracing only during initcalls Frederic Weisbecker
@ 2008-10-10 10:58 ` Ingo Molnar
  2008-10-10 11:02   ` Frédéric Weisbecker
  0 siblings, 1 reply; 7+ messages in thread
From: Ingo Molnar @ 2008-10-10 10:58 UTC (permalink / raw)
  To: Frederic Weisbecker; +Cc: Arjan van de Ven, Linux-Kernel


* Frederic Weisbecker <fweisbec@gmail.com> wrote:

> We used to disable the initcall tracing at a specified time (IE: end 
> of builtin initcalls). But we don\'t need it anymore. It will be 
> stopped when initcalls are finished. However we want two things:
> 
> _Start this tracing only after pre-smp initcalls are finished. _Since 
> we are planning to trace sched_switches at the same time, we want to 
> enable them only during the initcall execution. For this purpose, this 
> patch introduce two functions to enable/disable the sched_switch 
> tracing during boot.
> 
> Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com>

applied to tip/tracing/fastboot, thanks Frederic!

	Ingo

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

* Re: [PATCH 1/6] Tracing/fastboot: Enable boot tracing only during initcalls
  2008-10-10 10:58 ` Ingo Molnar
@ 2008-10-10 11:02   ` Frédéric Weisbecker
  2008-10-10 11:04     ` Ingo Molnar
  0 siblings, 1 reply; 7+ messages in thread
From: Frédéric Weisbecker @ 2008-10-10 11:02 UTC (permalink / raw)
  To: Ingo Molnar; +Cc: Arjan van de Ven, Linux-Kernel

2008/10/10 Ingo Molnar <mingo@elte.hu>:
>
> * Frederic Weisbecker <fweisbec@gmail.com> wrote:
>
>> We used to disable the initcall tracing at a specified time (IE: end
>> of builtin initcalls). But we don\'t need it anymore. It will be
>> stopped when initcalls are finished. However we want two things:
>>
>> _Start this tracing only after pre-smp initcalls are finished. _Since
>> we are planning to trace sched_switches at the same time, we want to
>> enable them only during the initcall execution. For this purpose, this
>> patch introduce two functions to enable/disable the sched_switch
>> tracing during boot.
>>
>> Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com>
>
> applied to tip/tracing/fastboot, thanks Frederic!
>
>        Ingo
>

Oops, sorry Ingo there are some backslashes that taint this patch.
I will resend a V2....

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

* Re: [PATCH 1/6] Tracing/fastboot: Enable boot tracing only during initcalls
  2008-10-10 11:02   ` Frédéric Weisbecker
@ 2008-10-10 11:04     ` Ingo Molnar
  2008-10-10 11:09       ` Frédéric Weisbecker
  2008-10-10 12:55       ` Alan Jenkins
  0 siblings, 2 replies; 7+ messages in thread
From: Ingo Molnar @ 2008-10-10 11:04 UTC (permalink / raw)
  To: Frédéric Weisbecker; +Cc: Arjan van de Ven, Linux-Kernel


* Frédéric Weisbecker <fweisbec@gmail.com> wrote:

> 2008/10/10 Ingo Molnar <mingo@elte.hu>:
> >
> > * Frederic Weisbecker <fweisbec@gmail.com> wrote:
> >
> >> We used to disable the initcall tracing at a specified time (IE: end
> >> of builtin initcalls). But we don\'t need it anymore. It will be
> >> stopped when initcalls are finished. However we want two things:
> >>
> >> _Start this tracing only after pre-smp initcalls are finished. _Since
> >> we are planning to trace sched_switches at the same time, we want to
> >> enable them only during the initcall execution. For this purpose, this
> >> patch introduce two functions to enable/disable the sched_switch
> >> tracing during boot.
> >>
> >> Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com>
> >
> > applied to tip/tracing/fastboot, thanks Frederic!
> >
> >        Ingo
> >
> 
> Oops, sorry Ingo there are some backslashes that taint this patch.
> I will resend a V2....

dont worry, i fixed them already when i applied your patch (and that's 
all in latest tip/master).

See the commit below - i sanitize most commit entries to make subject 
lines more consistent (note the capitalization difference between your 
submission and the end result), to improve paragraphing and general 
structure.

	Ingo

----------->
>From d1b6be5c1bb11dfd23b000a9342b9f8c3750e143 Mon Sep 17 00:00:00 2001
From: Frederic Weisbecker <fweisbec@gmail.com>
Date: Fri, 10 Oct 2008 12:36:15 +0200
Subject: [PATCH] tracing/fastboot: enable boot tracing only during initcalls

We used to disable the initcall tracing at a specified time
(IE: end of builtin initcalls). But we don't need it anymore.
It will be stopped when initcalls are finished.

However we want two things:

_Start this tracing only after pre-smp initcalls are finished.

_Since we are planning to trace sched_switches at the same time, we want
to enable them only during the initcall execution.

For this purpose, this patch introduces two functions to enable/disable
the sched_switch tracing during boot.

Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
---
 include/linux/ftrace.h    |   24 ++++++++++++++++++++++--
 init/main.c               |    4 +++-
 kernel/trace/trace_boot.c |   28 ++++++++++++++++------------
 3 files changed, 41 insertions(+), 15 deletions(-)

diff --git a/include/linux/ftrace.h b/include/linux/ftrace.h
index a3d4615..bc9a75a 100644
--- a/include/linux/ftrace.h
+++ b/include/linux/ftrace.h
@@ -213,6 +213,11 @@ ftrace_init_module(unsigned long *start, unsigned long *end) { }
 #endif
 
 
+/*
+ * Structure which defines the trace of an initcall.
+ * You don\'t have to fill the func field since it is
+ * only used internally by the tracer.
+ */
 struct boot_trace {
 	pid_t			caller;
 	char			func[KSYM_NAME_LEN];
@@ -223,13 +228,28 @@ struct boot_trace {
 };
 
 #ifdef CONFIG_BOOT_TRACER
+/* Append the trace on the ring-buffer */
 extern void trace_boot(struct boot_trace *it, initcall_t fn);
+
+/* Tells the tracer that smp_pre_initcall is finished.
+ * So we can start the tracing
+ */
 extern void start_boot_trace(void);
-extern void stop_boot_trace(void);
+
+/* Resume the tracing of other necessary events
+ * such as sched switches
+ */
+extern void enable_boot_trace(void);
+
+/* Suspend this tracing. Actually, only sched_switches tracing have
+ * to be suspended. Initcalls doesn\'t need it.)
+ */
+extern void disable_boot_trace(void);
 #else
 static inline void trace_boot(struct boot_trace *it, initcall_t fn) { }
 static inline void start_boot_trace(void) { }
-static inline void stop_boot_trace(void) { }
+static inline void enable_boot_trace(void) { }
+static inline void disable_boot_trace(void) { }
 #endif
 
 
diff --git a/init/main.c b/init/main.c
index 8d58855..df48ed1 100644
--- a/init/main.c
+++ b/init/main.c
@@ -714,6 +714,7 @@ int do_one_initcall(initcall_t fn)
 		it.caller = task_pid_nr(current);
 		printk("calling  %pF @ %i\n", fn, it.caller);
 		it.calltime = ktime_get();
+		enable_boot_trace();
 	}
 
 	it.result = fn();
@@ -725,6 +726,7 @@ int do_one_initcall(initcall_t fn)
 		printk("initcall %pF returned %d after %Ld usecs\n", fn,
 			it.result, it.duration);
 		trace_boot(&it, fn);
+		disable_boot_trace();
 	}
 
 	msgbuf[0] = 0;
@@ -957,7 +959,7 @@ static int __init kernel_init(void * unused)
 	 * we're essentially up and running. Get rid of the
 	 * initmem segments and start the user-mode stuff..
 	 */
-	stop_boot_trace();
+
 	init_post();
 	return 0;
 }
diff --git a/kernel/trace/trace_boot.c b/kernel/trace/trace_boot.c
index d0a5e50..52c3743 100644
--- a/kernel/trace/trace_boot.c
+++ b/kernel/trace/trace_boot.c
@@ -13,23 +13,29 @@
 #include "trace.h"
 
 static struct trace_array *boot_trace;
-static int trace_boot_enabled;
+static bool pre_initcalls_finished;
 
-
-/* Should be started after do_pre_smp_initcalls() in init/main.c */
+/* Tells the boot tracer that the pre_smp_initcalls are finished.
+ * So we are ready .
+ * It doesn\'t enable sched events tracing however.
+ * You have to call enable_boot_trace to do so.
+ */
 void start_boot_trace(void)
 {
-	trace_boot_enabled = 1;
+	pre_initcalls_finished = true;
+}
+
+void enable_boot_trace(void)
+{
 }
 
-void stop_boot_trace(void)
+void disable_boot_trace(void)
 {
-	trace_boot_enabled = 0;
 }
 
 void reset_boot_trace(struct trace_array *tr)
 {
-	stop_boot_trace();
+	disable_boot_trace();
 }
 
 static void boot_trace_init(struct trace_array *tr)
@@ -37,8 +43,6 @@ static void boot_trace_init(struct trace_array *tr)
 	int cpu;
 	boot_trace = tr;
 
-	trace_boot_enabled = 0;
-
 	for_each_cpu_mask(cpu, cpu_possible_map)
 		tracing_reset(tr, cpu);
 }
@@ -46,9 +50,9 @@ static void boot_trace_init(struct trace_array *tr)
 static void boot_trace_ctrl_update(struct trace_array *tr)
 {
 	if (tr->ctrl)
-		start_boot_trace();
+		enable_boot_trace();
 	else
-		stop_boot_trace();
+		disable_boot_trace();
 }
 
 static enum print_line_t initcall_print_line(struct trace_iterator *iter)
@@ -99,7 +103,7 @@ void trace_boot(struct boot_trace *it, initcall_t fn)
 	unsigned long irq_flags;
 	struct trace_array *tr = boot_trace;
 
-	if (!trace_boot_enabled)
+	if (!pre_initcalls_finished)
 		return;
 
 	/* Get its name now since this function could

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

* Re: [PATCH 1/6] Tracing/fastboot: Enable boot tracing only during initcalls
  2008-10-10 11:04     ` Ingo Molnar
@ 2008-10-10 11:09       ` Frédéric Weisbecker
  2008-10-10 12:55       ` Alan Jenkins
  1 sibling, 0 replies; 7+ messages in thread
From: Frédéric Weisbecker @ 2008-10-10 11:09 UTC (permalink / raw)
  To: Ingo Molnar; +Cc: Arjan van de Ven, Linux-Kernel

2008/10/10 Ingo Molnar <mingo@elte.hu>:
> dont worry, i fixed them already when i applied your patch (and that's
> all in latest tip/master).
>
> See the commit below - i sanitize most commit entries to make subject
> lines more consistent (note the capitalization difference between your
> submission and the end result), to improve paragraphing and general
> structure.
>
>        Ingo

Oh ok, that's great. Thank you.
And since my english is not really perfect...and since this makes some
times to be patched... :-)

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

* [PATCH 1/6] Tracing/fastboot: Enable boot tracing only during initcalls
@ 2008-10-10 12:36 Frederic Weisbecker
  2008-10-10 10:58 ` Ingo Molnar
  0 siblings, 1 reply; 7+ messages in thread
From: Frederic Weisbecker @ 2008-10-10 12:36 UTC (permalink / raw)
  To: Ingo Molnar; +Cc: Arjan van de Ven, Linux-Kernel, Frederic Weisbecker


We used to disable the initcall tracing at a specified time (IE: end of builtin initcalls). But we don\'t need it anymore. It will be stopped when initcalls are 
finished.
However we want two things: 

_Start this tracing only after pre-smp initcalls are finished.
_Since we are planning to trace sched_switches at the same time, we want to 
enable them only during the initcall execution. For this purpose, this patch 
introduce two functions to enable/disable the sched_switch tracing during boot.

Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com>
---
 include/linux/ftrace.h    |   24 ++++++++++++++++++++++--
 init/main.c               |    4 +++-
 kernel/trace/trace_boot.c |   28 ++++++++++++++++------------
 3 files changed, 41 insertions(+), 15 deletions(-)

diff --git a/include/linux/ftrace.h b/include/linux/ftrace.h
index 5812dba..135a33f 100644
--- a/include/linux/ftrace.h
+++ b/include/linux/ftrace.h
@@ -213,6 +213,11 @@ ftrace_init_module(unsigned long *start, unsigned long *end) { }
 #endif
 
 
+/*
+ * Structure which defines the trace of an initcall.
+ * You don\'t have to fill the func field since it is
+ * only used internally by the tracer.
+ */
 struct boot_trace {
 	pid_t			caller;
 	char 			func[KSYM_NAME_LEN];
@@ -223,13 +228,28 @@ struct boot_trace {
 };
 
 #ifdef CONFIG_BOOT_TRACER
+/* Append the trace on the ring-buffer */
 extern void trace_boot(struct boot_trace *it, initcall_t fn);
+
+/* Tells the tracer that smp_pre_initcall is finished.
+ * So we can start the tracing
+ */
 extern void start_boot_trace(void);
-extern void stop_boot_trace(void);
+
+/* Resume the tracing of other necessary events
+ * such as sched switches
+ */
+extern void enable_boot_trace(void);
+
+/* Suspend this tracing. Actually, only sched_switches tracing have
+ * to be suspended. Initcalls doesn\'t need it.)
+ */
+extern void disable_boot_trace(void);
 #else
 static inline void trace_boot(struct boot_trace *it, initcall_t fn) { }
 static inline void start_boot_trace(void) { }
-static inline void stop_boot_trace(void) { }
+static inline void enable_boot_trace(void) { }
+static inline void disable_boot_trace(void) { }
 #endif
 
 
diff --git a/init/main.c b/init/main.c
index 6371981..98c05aa 100644
--- a/init/main.c
+++ b/init/main.c
@@ -729,6 +729,7 @@ int do_one_initcall(initcall_t fn)
 		it.caller = task_pid_nr(current);
 		printk(\"calling  %pF @ %i\\n\", fn, it.caller);
 		it.calltime = ktime_get();
+		enable_boot_trace();
 	}
 
 	it.result = fn();
@@ -740,6 +741,7 @@ int do_one_initcall(initcall_t fn)
 		printk(\"initcall %pF returned %d after %Ld msecs\\n\", fn,
 			it.result, it.duration);
 		trace_boot(&it, fn);
+		disable_boot_trace();
 	}
 
 	msgbuf[0] = 0;
@@ -975,7 +977,7 @@ static int __init kernel_init(void * unused)
 	 * we\'re essentially up and running. Get rid of the
 	 * initmem segments and start the user-mode stuff..
 	 */
-	stop_boot_trace();
+
 	init_post();
 	return 0;
 }
diff --git a/kernel/trace/trace_boot.c b/kernel/trace/trace_boot.c
index d0a5e50..d104d5b 100644
--- a/kernel/trace/trace_boot.c
+++ b/kernel/trace/trace_boot.c
@@ -13,23 +13,29 @@
 #include \"trace.h\"
 
 static struct trace_array *boot_trace;
-static int trace_boot_enabled;
+static bool pre_initcalls_finished;
 
-
-/* Should be started after do_pre_smp_initcalls() in init/main.c */
+/* Tells the boot tracer that the pre_smp_initcalls are finished.
+ * So we are ready .
+ * It doesn\'t enable sched events tracing however.
+ * You have to call enable_boot_trace to do so.
+ */
 void start_boot_trace(void)
 {
-	trace_boot_enabled = 1;
+	pre_initcalls_finished = true;
+}
+
+void enable_boot_trace(void)
+{
 }
 
-void stop_boot_trace(void)
+void disable_boot_trace(void)
 {
-	trace_boot_enabled = 0;
 }
 
 void reset_boot_trace(struct trace_array *tr)
 {
-	stop_boot_trace();
+	disable_boot_trace();
 }
 
 static void boot_trace_init(struct trace_array *tr)
@@ -37,8 +43,6 @@ static void boot_trace_init(struct trace_array *tr)
 	int cpu;
 	boot_trace = tr;
 
-	trace_boot_enabled = 0;
-
 	for_each_cpu_mask(cpu, cpu_possible_map)
 		tracing_reset(tr, cpu);
 }
@@ -46,9 +50,9 @@ static void boot_trace_init(struct trace_array *tr)
 static void boot_trace_ctrl_update(struct trace_array *tr)
 {
 	if (tr->ctrl)
-		start_boot_trace();
+		enable_boot_trace();
 	else
-		stop_boot_trace();
+		disable_boot_trace();
 }
 
 static enum print_line_t initcall_print_line(struct trace_iterator *iter)
@@ -99,7 +103,7 @@ void trace_boot(struct boot_trace *it, initcall_t fn)
 	unsigned long irq_flags;
 	struct trace_array *tr = boot_trace;
 
-	if (!trace_boot_enabled)
+	if (!pre_initcalls_finished)
 		return;
 
 	/* Get its name now since this function could


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

* Re: [PATCH 1/6] Tracing/fastboot: Enable boot tracing only during initcalls
  2008-10-10 11:04     ` Ingo Molnar
  2008-10-10 11:09       ` Frédéric Weisbecker
@ 2008-10-10 12:55       ` Alan Jenkins
  2008-10-10 14:15         ` Ingo Molnar
  1 sibling, 1 reply; 7+ messages in thread
From: Alan Jenkins @ 2008-10-10 12:55 UTC (permalink / raw)
  To: Ingo Molnar; +Cc: Frédéric Weisbecker, Arjan van de Ven, Linux-Kernel

Ingo Molnar wrote:
> * Frédéric Weisbecker <fweisbec@gmail.com> wrote:
> 
>> 2008/10/10 Ingo Molnar <mingo@elte.hu>:
>>> * Frederic Weisbecker <fweisbec@gmail.com> wrote:
>>>
>>>> We used to disable the initcall tracing at a specified time (IE: end
>>>> of builtin initcalls). But we don\'t need it anymore. It will be
>>>> stopped when initcalls are finished. However we want two things:
>>>>
>>>> _Start this tracing only after pre-smp initcalls are finished. _Since
>>>> we are planning to trace sched_switches at the same time, we want to
>>>> enable them only during the initcall execution. For this purpose, this
>>>> patch introduce two functions to enable/disable the sched_switch
>>>> tracing during boot.
>>>>
>>>> Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com>
>>> applied to tip/tracing/fastboot, thanks Frederic!
>>>
>>>        Ingo
>>>
>> Oops, sorry Ingo there are some backslashes that taint this patch.
>> I will resend a V2....
> 
> dont worry, i fixed them already when i applied your patch (and that's 
> all in latest tip/master).
> 
> See the commit below - i sanitize most commit entries to make subject 
> lines more consistent (note the capitalization difference between your 
> submission and the end result), to improve paragraphing and general 
> structure.

You missed the one backslash though...

> -/* Should be started after do_pre_smp_initcalls() in init/main.c */
> +/* Tells the boot tracer that the pre_smp_initcalls are finished.
> + * So we are ready .
> + * It doesn\'t enable sched events tracing however.
> + * You have to call enable_boot_trace to do so.
> + */

Alan

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

* Re: [PATCH 1/6] Tracing/fastboot: Enable boot tracing only during initcalls
  2008-10-10 12:55       ` Alan Jenkins
@ 2008-10-10 14:15         ` Ingo Molnar
  0 siblings, 0 replies; 7+ messages in thread
From: Ingo Molnar @ 2008-10-10 14:15 UTC (permalink / raw)
  To: Alan Jenkins
  Cc: Frédéric Weisbecker, Arjan van de Ven, Linux-Kernel


* Alan Jenkins <aj504@student.cs.york.ac.uk> wrote:

> > dont worry, i fixed them already when i applied your patch (and 
> > that's all in latest tip/master).
> > 
> > See the commit below - i sanitize most commit entries to make 
> > subject lines more consistent (note the capitalization difference 
> > between your submission and the end result), to improve paragraphing 
> > and general structure.
> 
> You missed the one backslash though...
> 
> > -/* Should be started after do_pre_smp_initcalls() in init/main.c */
> > +/* Tells the boot tracer that the pre_smp_initcalls are finished.
> > + * So we are ready .
> > + * It doesn\'t enable sched events tracing however.
> > + * You have to call enable_boot_trace to do so.
> > + */

heh, indeed - fixed it. ( And there was a second backslash too, 
introduced earlier. ;-)

	Ingo

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

end of thread, other threads:[~2008-10-10 14:15 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-10-10 12:36 [PATCH 1/6] Tracing/fastboot: Enable boot tracing only during initcalls Frederic Weisbecker
2008-10-10 10:58 ` Ingo Molnar
2008-10-10 11:02   ` Frédéric Weisbecker
2008-10-10 11:04     ` Ingo Molnar
2008-10-10 11:09       ` Frédéric Weisbecker
2008-10-10 12:55       ` Alan Jenkins
2008-10-10 14:15         ` Ingo Molnar

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox