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>,
	Chengming Zhou <zhouchengming@bytedance.com>,
	Muchun Song <songmuchun@bytedance.com>
Subject: [for-linus][PATCH 06/17] ftrace: Do not let direct or IPMODIFY ftrace_ops be added to module and set trampolines
Date: Tue, 04 Aug 2020 16:57:49 -0400	[thread overview]
Message-ID: <20200804205812.775534405@goodmis.org> (raw)
In-Reply-To: 20200804205743.419135730@goodmis.org

From: Chengming Zhou <zhouchengming@bytedance.com>

When inserting a module, we find all ftrace_ops referencing it on the
ftrace_ops_list. But FTRACE_OPS_FL_DIRECT and FTRACE_OPS_FL_IPMODIFY
flags are special, and should not be set automatically. So warn and
skip ftrace_ops that have these two flags set and adding new code.
Also check if only one ftrace_ops references the module, in which case
we can use a trampoline as an optimization.

Link: https://lkml.kernel.org/r/20200728180554.65203-2-zhouchengming@bytedance.com

Signed-off-by: Chengming Zhou <zhouchengming@bytedance.com>
Signed-off-by: Muchun Song <songmuchun@bytedance.com>
Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
---
 kernel/trace/ftrace.c | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c
index d052f856f1cf..f433cb44300a 100644
--- a/kernel/trace/ftrace.c
+++ b/kernel/trace/ftrace.c
@@ -6199,9 +6199,17 @@ static int referenced_filters(struct dyn_ftrace *rec)
 
 	for (ops = ftrace_ops_list; ops != &ftrace_list_end; ops = ops->next) {
 		if (ops_references_rec(ops, rec)) {
+			if (WARN_ON_ONCE(ops->flags & FTRACE_OPS_FL_DIRECT))
+				continue;
+			if (WARN_ON_ONCE(ops->flags & FTRACE_OPS_FL_IPMODIFY))
+				continue;
 			cnt++;
 			if (ops->flags & FTRACE_OPS_FL_SAVE_REGS)
 				rec->flags |= FTRACE_FL_REGS;
+			if (cnt == 1 && ops->trampoline)
+				rec->flags |= FTRACE_FL_TRAMP;
+			else
+				rec->flags &= ~FTRACE_FL_TRAMP;
 		}
 	}
 
-- 
2.26.2



  parent reply	other threads:[~2020-08-04 20:58 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-08-04 20:57 [for-linus][PATCH 00/17] tracing: Last minute fixes for this merge window Steven Rostedt
2020-08-04 20:57 ` [for-linus][PATCH 01/17] tracing: Simplify defining of the next event id Steven Rostedt
2020-08-04 20:57 ` [for-linus][PATCH 02/17] tracing: Save one trace_event->type by using __TRACE_LAST_TYPE Steven Rostedt
2020-08-04 20:57 ` [for-linus][PATCH 03/17] tracing/hwlat: Drop the duplicate assignment in start_kthread() Steven Rostedt
2020-08-04 20:57 ` [for-linus][PATCH 04/17] tracing/hwlat: Honor the tracing_cpumask Steven Rostedt
2020-08-04 20:57 ` [for-linus][PATCH 05/17] ftrace: Setup correct FTRACE_FL_REGS flags for module Steven Rostedt
2020-08-09 15:53   ` Sasha Levin
2020-08-04 20:57 ` Steven Rostedt [this message]
2020-08-04 20:57 ` [for-linus][PATCH 07/17] tracing: Remove outdated comment in stack handling Steven Rostedt
2020-08-04 20:57 ` [for-linus][PATCH 09/17] tracepoint: Mark __tracepoint_strings __used Steven Rostedt
2020-08-04 20:57 ` [for-linus][PATCH 10/17] tracepoint: Use __used attribute definitions from compiler_attributes.h Steven Rostedt
2020-08-04 20:57 ` [for-linus][PATCH 11/17] ftrace: Fix ftrace_trace_task return value Steven Rostedt
2020-08-04 20:57 ` [for-linus][PATCH 12/17] kprobes: Fix NULL pointer dereference at kprobe_ftrace_handler Steven Rostedt
2020-08-04 20:57 ` [for-linus][PATCH 13/17] tracing/uprobe: Remove dead code in trace_uprobe_register() Steven Rostedt
2020-08-04 20:57 ` [for-linus][PATCH 14/17] kprobes: Remove show_registers() function prototype Steven Rostedt
2020-08-04 20:57 ` [for-linus][PATCH 15/17] lib/bootconfig: Add override operator support Steven Rostedt
2020-08-04 20:57 ` [for-linus][PATCH 16/17] tools/bootconfig: Add testcases for value override operator Steven Rostedt
2020-08-04 20:58 ` [for-linus][PATCH 17/17] Documentation: bootconfig: Add bootconfig " Steven Rostedt

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=20200804205812.775534405@goodmis.org \
    --to=rostedt@goodmis.org \
    --cc=akpm@linux-foundation.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@kernel.org \
    --cc=songmuchun@bytedance.com \
    --cc=zhouchengming@bytedance.com \
    /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.