All of lore.kernel.org
 help / color / mirror / Atom feed
From: Steven Rostedt <rostedt@goodmis.org>
To: linux-kernel@vger.kernel.org
Cc: Ingo Molnar <mingo@kernel.org>,
	Andrew Morton <akpm@linux-foundation.org>,
	Mark-PK Tsai <mark-pk.tsai@mediatek.com>
Subject: [for-next][PATCH 21/21] tracing: make tracer_init_tracefs initcall asynchronous
Date: Wed, 27 Apr 2022 15:36:44 -0400	[thread overview]
Message-ID: <20220427193643.341238948@goodmis.org> (raw)
In-Reply-To: 20220427193623.529296556@goodmis.org

From: Mark-PK Tsai <mark-pk.tsai@mediatek.com>

Move trace_eval_init() to subsys_initcall to make it start
earlier.
And to avoid tracer_init_tracefs being blocked by
trace_event_sem which trace_eval_init() hold [1],
queue tracer_init_tracefs() to eval_map_wq to let
the two works being executed sequentially.

It can speed up the initialization of kernel as result
of making tracer_init_tracefs asynchronous.

On my arm64 platform, it reduce ~20ms of 125ms which total
time do_initcalls spend.

Link: https://lkml.kernel.org/r/20220426122407.17042-3-mark-pk.tsai@mediatek.com

[1]: https://lore.kernel.org/r/68d7b3327052757d0cd6359a6c9015a85b437232.camel@pengutronix.de
Signed-off-by: Mark-PK Tsai <mark-pk.tsai@mediatek.com>
Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
---
 kernel/trace/trace.c | 32 ++++++++++++++++++++++----------
 1 file changed, 22 insertions(+), 10 deletions(-)

diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c
index 7275173c55d0..400d3e9fe9ff 100644
--- a/kernel/trace/trace.c
+++ b/kernel/trace/trace.c
@@ -9615,6 +9615,7 @@ extern struct trace_eval_map *__stop_ftrace_eval_maps[];
 
 static struct workqueue_struct *eval_map_wq __initdata;
 static struct work_struct eval_map_work __initdata;
+static struct work_struct tracerfs_init_work __initdata;
 
 static void __init eval_map_work_func(struct work_struct *work)
 {
@@ -9640,6 +9641,8 @@ static int __init trace_eval_init(void)
 	return 0;
 }
 
+subsys_initcall(trace_eval_init);
+
 static int __init trace_eval_sync(void)
 {
 	/* Make sure the eval map updates are finished */
@@ -9722,15 +9725,8 @@ static struct notifier_block trace_module_nb = {
 };
 #endif /* CONFIG_MODULES */
 
-static __init int tracer_init_tracefs(void)
+static __init void tracer_init_tracefs_work_func(struct work_struct *work)
 {
-	int ret;
-
-	trace_access_lock_init();
-
-	ret = tracing_init_dentry();
-	if (ret)
-		return 0;
 
 	event_trace_init();
 
@@ -9752,8 +9748,6 @@ static __init int tracer_init_tracefs(void)
 	trace_create_file("saved_tgids", TRACE_MODE_READ, NULL,
 			NULL, &tracing_saved_tgids_fops);
 
-	trace_eval_init();
-
 	trace_create_eval_file(NULL);
 
 #ifdef CONFIG_MODULES
@@ -9768,6 +9762,24 @@ static __init int tracer_init_tracefs(void)
 	create_trace_instances(NULL);
 
 	update_tracer_options(&global_trace);
+}
+
+static __init int tracer_init_tracefs(void)
+{
+	int ret;
+
+	trace_access_lock_init();
+
+	ret = tracing_init_dentry();
+	if (ret)
+		return 0;
+
+	if (eval_map_wq) {
+		INIT_WORK(&tracerfs_init_work, tracer_init_tracefs_work_func);
+		queue_work(eval_map_wq, &tracerfs_init_work);
+	} else {
+		tracer_init_tracefs_work_func(NULL);
+	}
 
 	return 0;
 }
-- 
2.35.1

      parent reply	other threads:[~2022-04-27 19:38 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-04-27 19:36 [for-next][PATCH 00/21] tracing: Updates for 5.19 Steven Rostedt
2022-04-27 19:36 ` [for-next][PATCH 01/21] tracing: Cleanup double word in comment Steven Rostedt
2022-04-27 19:36 ` [for-next][PATCH 02/21] tracing: Remove logic for registering multiple event triggers at a time Steven Rostedt
2022-04-27 19:36 ` [for-next][PATCH 03/21] tracing: Remove redundant trigger_ops params Steven Rostedt
2022-04-27 19:36 ` [for-next][PATCH 04/21] tracing: Have existing event_command.parse() implementations use helpers Steven Rostedt
2022-04-27 19:36 ` [for-next][PATCH 05/21] tracing: Separate hist state updates from hist registration Steven Rostedt
2022-04-27 19:36 ` [for-next][PATCH 06/21] tracing: Fix inconsistent style of mini-HOWTO Steven Rostedt
2022-04-27 19:36 ` [for-next][PATCH 07/21] tracing: Fix kernel-doc Steven Rostedt
2022-04-27 19:36 ` [for-next][PATCH 08/21] MAINTAINERS: Enlarge coverage of TRACING inside architectures Steven Rostedt
2022-04-27 19:36 ` [for-next][PATCH 09/21] tracing: Fix tracing_map_sort_entries() kernel-doc comment Steven Rostedt
2022-04-27 19:36 ` [for-next][PATCH 10/21] bootconfig: Make the bootconfig.o as a normal object file Steven Rostedt
2022-04-27 19:36 ` [for-next][PATCH 11/21] bootconfig: Check the checksum before removing the bootconfig from initrd Steven Rostedt
2022-04-27 19:36 ` [for-next][PATCH 12/21] bootconfig: Support embedding a bootconfig file in kernel Steven Rostedt
2022-04-27 19:36 ` [for-next][PATCH 13/21] docs: bootconfig: Add how to embed the bootconfig into kernel Steven Rostedt
2022-04-27 19:36 ` [for-next][PATCH 14/21] tracing: Make tp_printk work on syscall tracepoints Steven Rostedt
2022-04-27 19:36 ` [for-next][PATCH 15/21] tracing: Return -EINVAL if WARN_ON(!glob) triggered in event_hist_trigger_parse() Steven Rostedt
2022-04-27 19:36 ` [for-next][PATCH 16/21] tracing: Change `if (strlen(glob))` to `if (glob[0])` Steven Rostedt
2022-04-27 19:36 ` [for-next][PATCH 17/21] tracing: Fix sleeping function called from invalid context on RT kernel Steven Rostedt
2022-04-27 19:36 ` [for-next][PATCH 18/21] tracing: Use WARN instead of printk and WARN_ON Steven Rostedt
2022-04-27 19:36 ` [for-next][PATCH 19/21] ring-buffer: Simplify if-if to if-else Steven Rostedt
2022-04-27 19:36 ` [for-next][PATCH 20/21] tracing: Avoid adding tracer option before update_tracer_options Steven Rostedt
2022-04-27 19:36 ` Steven Rostedt [this message]

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=20220427193643.341238948@goodmis.org \
    --to=rostedt@goodmis.org \
    --cc=akpm@linux-foundation.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mark-pk.tsai@mediatek.com \
    --cc=mingo@kernel.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.