From: wangnan0@huawei.com (Wang Nan)
To: linux-arm-kernel@lists.infradead.org
Subject: [RFC PATCH v3 08/26] ftrace: enable make ftrace nop before ftrace_init().
Date: Fri, 13 Feb 2015 13:40:36 +0800 [thread overview]
Message-ID: <1423806036-61825-1-git-send-email-wangnan0@huawei.com> (raw)
In-Reply-To: <1423805941-61407-1-git-send-email-wangnan0@huawei.com>
This patch is for early kprobes.
Ftrace converts ftrace entries to nop when init, which will conflict
with early kprobes if it probe on an ftrace entry before such
conversion. For x86, ftrace entries is 'call' instruction which is
happends unboostable.
This patch provides ftrace_process_loc_early() to allow early kprobes to
convert target instruction before ftrace_init() is called. Only allows
ftrace_process_loc_early() called before ftrace_init().
However, for x86 only this patch is not enough. Due to ideal_nop() is
updated during setup_arch(), we are unable to ensure
ftrace_process_loc_early() choose similar nop as normal ftrace. I'll use
another mechanism to solve this problem.
Signed-off-by: Wang Nan <wangnan0@huawei.com>
---
include/linux/ftrace.h | 5 +++++
kernel/trace/ftrace.c | 18 ++++++++++++++++++
2 files changed, 23 insertions(+)
diff --git a/include/linux/ftrace.h b/include/linux/ftrace.h
index 8db315a..d37ccd8a 100644
--- a/include/linux/ftrace.h
+++ b/include/linux/ftrace.h
@@ -702,9 +702,14 @@ static inline void __ftrace_enabled_restore(int enabled)
#ifdef CONFIG_FTRACE_MCOUNT_RECORD
extern void ftrace_init(void);
extern void ftrace_init_early(void);
+extern int ftrace_process_loc_early(unsigned long ip);
#else
static inline void ftrace_init(void) { }
static inline void ftrace_init_early(void) { }
+static inline int ftrace_process_loc_early(unsigned long __unused)
+{
+ return 0;
+}
#endif
/*
diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c
index fc0c1aa..e39e72a 100644
--- a/kernel/trace/ftrace.c
+++ b/kernel/trace/ftrace.c
@@ -5037,6 +5037,24 @@ void __init ftrace_init_early(void)
ftrace_sort_mcount_area(__start_mcount_loc, __stop_mcount_loc);
}
+int __init ftrace_process_loc_early(unsigned long addr)
+{
+ unsigned long ip;
+ struct dyn_ftrace fake_rec;
+ int ret;
+
+ BUG_ON(ftrace_pages_start);
+
+ ip = ftrace_location(addr);
+ if (ip != addr)
+ return -EINVAL;
+
+ memset(&fake_rec, '\0', sizeof(fake_rec));
+ fake_rec.ip = ip;
+ ret = ftrace_make_nop(NULL, &fake_rec, MCOUNT_ADDR);
+ return ret;
+}
+
/* Do nothing if arch does not support this */
void __weak arch_ftrace_update_trampoline(struct ftrace_ops *ops)
{
--
1.8.4
next prev parent reply other threads:[~2015-02-13 5:40 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-02-13 5:39 [RFC PATCH v3 00/26] Early kprobe: enable kprobes at very early booting stage Wang Nan
2015-02-13 5:40 ` [RFC PATCH v3 01/26] kprobes: set kprobes_all_disarmed earlier to enable re-optimization Wang Nan
2015-02-13 5:40 ` [RFC PATCH v3 02/26] kprobes: makes kprobes/enabled works correctly for optimized kprobes Wang Nan
2015-02-13 5:40 ` [RFC PATCH v3 03/26] kprobes: x86: mark 2 bytes NOP as boostable Wang Nan
2015-02-13 5:40 ` [RFC PATCH v3 04/26] ftrace: don't update record flags if code modification fail Wang Nan
2015-02-13 5:40 ` [RFC PATCH v3 05/26] ftrace/x86: Ensure rec->flags no change when failure occures Wang Nan
2015-02-13 5:40 ` [RFC PATCH v3 06/26] ftrace: sort ftrace entries earlier Wang Nan
2015-02-13 5:40 ` [RFC PATCH v3 07/26] ftrace: allow search ftrace addr before ftrace fully inited Wang Nan
2015-02-13 5:40 ` Wang Nan [this message]
2015-02-13 5:40 ` [RFC PATCH v3 09/26] ftrace: allow fixing code update failure by notifier chain Wang Nan
2015-02-13 5:40 ` [RFC PATCH v3 10/26] ftrace: x86: try to fix ftrace when ftrace_replace_code Wang Nan
2015-02-13 5:40 ` [RFC PATCH v3 11/26] early kprobes: introduce kprobe_is_early for futher early kprobe use Wang Nan
2015-02-13 5:40 ` [RFC PATCH v3 12/26] early kprobes: Add an KPROBE_FLAG_EARLY for early kprobe Wang Nan
2015-02-13 5:40 ` [RFC PATCH v3 13/26] early kprobes: ARM: directly modify code Wang Nan
2015-02-13 5:40 ` [RFC PATCH v3 14/26] early kprobes: ARM: introduce early kprobes related code area Wang Nan
2015-02-13 5:40 ` [RFC PATCH v3 15/26] early kprobes: x86: directly modify code Wang Nan
2015-02-20 4:00 ` Masami Hiramatsu
2015-02-13 5:40 ` [RFC PATCH v3 16/26] early kprobes: x86: introduce early kprobes related code area Wang Nan
2015-02-13 5:40 ` [RFC PATCH v3 17/26] early kprobes: introduces macros for allocing early kprobe resources Wang Nan
2015-02-13 5:41 ` [RFC PATCH v3 18/26] early kprobes: allows __alloc_insn_slot() from early kprobes slots Wang Nan
2015-02-13 5:41 ` [RFC PATCH v3 19/26] early kprobes: perhibit probing at early kprobe reserved area Wang Nan
2015-02-13 5:41 ` [RFC PATCH v3 20/26] early kprobes: core logic of eraly kprobes Wang Nan
2015-02-13 5:41 ` [RFC PATCH v3 21/26] early kprobes: add CONFIG_EARLY_KPROBES option Wang Nan
2015-02-13 5:41 ` [RFC PATCH v3 22/26] early kprobes: introduce arch_fix_ftrace_early_kprobe() Wang Nan
2015-02-13 5:41 ` [RFC PATCH v3 23/26] early kprobes: x86: arch_restore_optimized_kprobe() Wang Nan
2015-02-13 5:41 ` [RFC PATCH v3 24/26] early kprobes: core logic to support early kprobe on ftrace Wang Nan
2015-02-13 5:41 ` [RFC PATCH v3 25/26] early kprobes: introduce kconfig option " Wang Nan
2015-02-13 5:41 ` [RFC PATCH v3 26/26] kprobes: enable 'ekprobe=' cmdline option for early kprobes Wang Nan
2015-02-20 3:59 ` [RFC PATCH v3 00/26] Early kprobe: enable kprobes at very early booting stage Masami Hiramatsu
2015-02-25 11:11 ` Wang Nan
2015-02-25 11:46 ` Wang Nan
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=1423806036-61825-1-git-send-email-wangnan0@huawei.com \
--to=wangnan0@huawei.com \
--cc=linux-arm-kernel@lists.infradead.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 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).