From: Steven Rostedt <rostedt@goodmis.org> To: Mark Rutland <mark.rutland@arm.com> Cc: linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, amit.kachhap@arm.com, catalin.marinas@arm.com, deller@gmx.de, duwe@suse.de, James.Bottomley@HansenPartnership.com, james.morse@arm.com, jeyu@kernel.org, jpoimboe@redhat.com, jthierry@redhat.com, linux-parisc@vger.kernel.org, mingo@redhat.com, peterz@infradead.org, svens@stackframe.org, takahiro.akashi@linaro.org, will@kernel.org Subject: Re: [PATCHv2 1/8] ftrace: add ftrace_init_nop() Date: Mon, 4 Nov 2019 08:16:20 -0500 [thread overview] Message-ID: <20191104081620.732320a8@grimm.local.home> (raw) In-Reply-To: <20191029165832.33606-2-mark.rutland@arm.com> On Tue, 29 Oct 2019 16:58:25 +0000 Mark Rutland <mark.rutland@arm.com> wrote: > Architectures may need to perform special initialization of ftrace > callsites, and today they do so by special-casing ftrace_make_nop() when > the expected branch address is MCOUNT_ADDR. In some cases (e.g. for > patchable-function-entry), we don't have an mcount-like symbol and don't > want a synthetic MCOUNT_ADDR, but we may need to perform some > initialization of callsites. > > To make it possible to separate initialization from runtime > modification, and to handle cases without an mcount-like symbol, this > patch adds an optional ftrace_init_nop() function that architectures can > implement, which does not pass a branch address. > > Where an architecture does not provide ftrace_init_nop(), we will fall > back to the existing behaviour of calling ftrace_make_nop() with > MCOUNT_ADDR. > > At the same time, ftrace_code_disable() is renamed to > ftrace_nop_initialize() to make it clearer that it is intended to > intialize a callsite into a disabled state, and is not for disabling a > callsite that has been runtime enabled. The kerneldoc description of rec > arguments is updated to cover non-mcount callsites. > > Signed-off-by: Mark Rutland <mark.rutland@arm.com> > Reviewed-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> > Cc: Ingo Molnar <mingo@redhat.com> > Cc: Steven Rostedt <rostedt@goodmis.org> Reviewed-by: Steven Rostedt (VMware) <rostedt@goodmis.org> -- Steve > Cc: Torsten Duwe <duwe@suse.de> > --- > include/linux/ftrace.h | 35 ++++++++++++++++++++++++++++++++--- > kernel/trace/ftrace.c | 6 +++--- > 2 files changed, 35 insertions(+), 6 deletions(-) > > diff --git a/include/linux/ftrace.h b/include/linux/ftrace.h > index 8a8cb3c401b2..9867d90d635e 100644 > --- a/include/linux/ftrace.h > +++ b/include/linux/ftrace.h > @@ -499,7 +499,7 @@ static inline int ftrace_disable_ftrace_graph_caller(void) { return 0; } > /** > * ftrace_make_nop - convert code into nop > * @mod: module structure if called by module load initialization > - * @rec: the mcount call site record > + * @rec: the call site record (e.g. mcount/fentry) > * @addr: the address that the call site should be calling > * > * This is a very sensitive operation and great care needs > @@ -520,9 +520,38 @@ static inline int ftrace_disable_ftrace_graph_caller(void) { return 0; } > extern int ftrace_make_nop(struct module *mod, > struct dyn_ftrace *rec, unsigned long addr); > > + > +/** > + * ftrace_init_nop - initialize a nop call site > + * @mod: module structure if called by module load initialization > + * @rec: the call site record (e.g. mcount/fentry) > + * > + * This is a very sensitive operation and great care needs > + * to be taken by the arch. The operation should carefully > + * read the location, check to see if what is read is indeed > + * what we expect it to be, and then on success of the compare, > + * it should write to the location. > + * > + * The code segment at @rec->ip should contain the contents created by > + * the compiler > + * > + * Return must be: > + * 0 on success > + * -EFAULT on error reading the location > + * -EINVAL on a failed compare of the contents > + * -EPERM on error writing to the location > + * Any other value will be considered a failure. > + */ > +#ifndef ftrace_init_nop > +static inline int ftrace_init_nop(struct module *mod, struct dyn_ftrace *rec) > +{ > + return ftrace_make_nop(mod, rec, MCOUNT_ADDR); > +} > +#endif > + > /** > * ftrace_make_call - convert a nop call site into a call to addr > - * @rec: the mcount call site record > + * @rec: the call site record (e.g. mcount/fentry) > * @addr: the address that the call site should call > * > * This is a very sensitive operation and great care needs > @@ -545,7 +574,7 @@ extern int ftrace_make_call(struct dyn_ftrace *rec, unsigned long addr); > #ifdef CONFIG_DYNAMIC_FTRACE_WITH_REGS > /** > * ftrace_modify_call - convert from one addr to another (no nop) > - * @rec: the mcount call site record > + * @rec: the call site record (e.g. mcount/fentry) > * @old_addr: the address expected to be currently called to > * @addr: the address to change to > * > diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c > index f296d89be757..5259d4dea675 100644 > --- a/kernel/trace/ftrace.c > +++ b/kernel/trace/ftrace.c > @@ -2494,14 +2494,14 @@ struct dyn_ftrace *ftrace_rec_iter_record(struct ftrace_rec_iter *iter) > } > > static int > -ftrace_code_disable(struct module *mod, struct dyn_ftrace *rec) > +ftrace_nop_initialize(struct module *mod, struct dyn_ftrace *rec) > { > int ret; > > if (unlikely(ftrace_disabled)) > return 0; > > - ret = ftrace_make_nop(mod, rec, MCOUNT_ADDR); > + ret = ftrace_init_nop(mod, rec); > if (ret) { > ftrace_bug_type = FTRACE_BUG_INIT; > ftrace_bug(ret, rec); > @@ -2943,7 +2943,7 @@ static int ftrace_update_code(struct module *mod, struct ftrace_page *new_pgs) > * to the NOP instructions. > */ > if (!__is_defined(CC_USING_NOP_MCOUNT) && > - !ftrace_code_disable(mod, p)) > + !ftrace_nop_initialize(mod, p)) > break; > > update_cnt++;
WARNING: multiple messages have this Message-ID (diff)
From: Steven Rostedt <rostedt@goodmis.org> To: Mark Rutland <mark.rutland@arm.com> Cc: jthierry@redhat.com, linux-parisc@vger.kernel.org, peterz@infradead.org, catalin.marinas@arm.com, deller@gmx.de, jpoimboe@redhat.com, linux-kernel@vger.kernel.org, James.Bottomley@HansenPartnership.com, takahiro.akashi@linaro.org, will@kernel.org, mingo@redhat.com, james.morse@arm.com, jeyu@kernel.org, amit.kachhap@arm.com, svens@stackframe.org, duwe@suse.de, linux-arm-kernel@lists.infradead.org Subject: Re: [PATCHv2 1/8] ftrace: add ftrace_init_nop() Date: Mon, 4 Nov 2019 08:16:20 -0500 [thread overview] Message-ID: <20191104081620.732320a8@grimm.local.home> (raw) In-Reply-To: <20191029165832.33606-2-mark.rutland@arm.com> On Tue, 29 Oct 2019 16:58:25 +0000 Mark Rutland <mark.rutland@arm.com> wrote: > Architectures may need to perform special initialization of ftrace > callsites, and today they do so by special-casing ftrace_make_nop() when > the expected branch address is MCOUNT_ADDR. In some cases (e.g. for > patchable-function-entry), we don't have an mcount-like symbol and don't > want a synthetic MCOUNT_ADDR, but we may need to perform some > initialization of callsites. > > To make it possible to separate initialization from runtime > modification, and to handle cases without an mcount-like symbol, this > patch adds an optional ftrace_init_nop() function that architectures can > implement, which does not pass a branch address. > > Where an architecture does not provide ftrace_init_nop(), we will fall > back to the existing behaviour of calling ftrace_make_nop() with > MCOUNT_ADDR. > > At the same time, ftrace_code_disable() is renamed to > ftrace_nop_initialize() to make it clearer that it is intended to > intialize a callsite into a disabled state, and is not for disabling a > callsite that has been runtime enabled. The kerneldoc description of rec > arguments is updated to cover non-mcount callsites. > > Signed-off-by: Mark Rutland <mark.rutland@arm.com> > Reviewed-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> > Cc: Ingo Molnar <mingo@redhat.com> > Cc: Steven Rostedt <rostedt@goodmis.org> Reviewed-by: Steven Rostedt (VMware) <rostedt@goodmis.org> -- Steve > Cc: Torsten Duwe <duwe@suse.de> > --- > include/linux/ftrace.h | 35 ++++++++++++++++++++++++++++++++--- > kernel/trace/ftrace.c | 6 +++--- > 2 files changed, 35 insertions(+), 6 deletions(-) > > diff --git a/include/linux/ftrace.h b/include/linux/ftrace.h > index 8a8cb3c401b2..9867d90d635e 100644 > --- a/include/linux/ftrace.h > +++ b/include/linux/ftrace.h > @@ -499,7 +499,7 @@ static inline int ftrace_disable_ftrace_graph_caller(void) { return 0; } > /** > * ftrace_make_nop - convert code into nop > * @mod: module structure if called by module load initialization > - * @rec: the mcount call site record > + * @rec: the call site record (e.g. mcount/fentry) > * @addr: the address that the call site should be calling > * > * This is a very sensitive operation and great care needs > @@ -520,9 +520,38 @@ static inline int ftrace_disable_ftrace_graph_caller(void) { return 0; } > extern int ftrace_make_nop(struct module *mod, > struct dyn_ftrace *rec, unsigned long addr); > > + > +/** > + * ftrace_init_nop - initialize a nop call site > + * @mod: module structure if called by module load initialization > + * @rec: the call site record (e.g. mcount/fentry) > + * > + * This is a very sensitive operation and great care needs > + * to be taken by the arch. The operation should carefully > + * read the location, check to see if what is read is indeed > + * what we expect it to be, and then on success of the compare, > + * it should write to the location. > + * > + * The code segment at @rec->ip should contain the contents created by > + * the compiler > + * > + * Return must be: > + * 0 on success > + * -EFAULT on error reading the location > + * -EINVAL on a failed compare of the contents > + * -EPERM on error writing to the location > + * Any other value will be considered a failure. > + */ > +#ifndef ftrace_init_nop > +static inline int ftrace_init_nop(struct module *mod, struct dyn_ftrace *rec) > +{ > + return ftrace_make_nop(mod, rec, MCOUNT_ADDR); > +} > +#endif > + > /** > * ftrace_make_call - convert a nop call site into a call to addr > - * @rec: the mcount call site record > + * @rec: the call site record (e.g. mcount/fentry) > * @addr: the address that the call site should call > * > * This is a very sensitive operation and great care needs > @@ -545,7 +574,7 @@ extern int ftrace_make_call(struct dyn_ftrace *rec, unsigned long addr); > #ifdef CONFIG_DYNAMIC_FTRACE_WITH_REGS > /** > * ftrace_modify_call - convert from one addr to another (no nop) > - * @rec: the mcount call site record > + * @rec: the call site record (e.g. mcount/fentry) > * @old_addr: the address expected to be currently called to > * @addr: the address to change to > * > diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c > index f296d89be757..5259d4dea675 100644 > --- a/kernel/trace/ftrace.c > +++ b/kernel/trace/ftrace.c > @@ -2494,14 +2494,14 @@ struct dyn_ftrace *ftrace_rec_iter_record(struct ftrace_rec_iter *iter) > } > > static int > -ftrace_code_disable(struct module *mod, struct dyn_ftrace *rec) > +ftrace_nop_initialize(struct module *mod, struct dyn_ftrace *rec) > { > int ret; > > if (unlikely(ftrace_disabled)) > return 0; > > - ret = ftrace_make_nop(mod, rec, MCOUNT_ADDR); > + ret = ftrace_init_nop(mod, rec); > if (ret) { > ftrace_bug_type = FTRACE_BUG_INIT; > ftrace_bug(ret, rec); > @@ -2943,7 +2943,7 @@ static int ftrace_update_code(struct module *mod, struct ftrace_page *new_pgs) > * to the NOP instructions. > */ > if (!__is_defined(CC_USING_NOP_MCOUNT) && > - !ftrace_code_disable(mod, p)) > + !ftrace_nop_initialize(mod, p)) > break; > > update_cnt++; _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
next prev parent reply other threads:[~2019-11-04 13:22 UTC|newest] Thread overview: 96+ messages / expand[flat|nested] mbox.gz Atom feed top 2019-10-29 16:58 [PATCHv2 0/8] arm64: ftrace cleanup + FTRACE_WITH_REGS Mark Rutland 2019-10-29 16:58 ` Mark Rutland 2019-10-29 16:58 ` [PATCHv2 1/8] ftrace: add ftrace_init_nop() Mark Rutland 2019-10-29 16:58 ` Mark Rutland 2019-10-30 15:00 ` Miroslav Benes 2019-10-30 15:00 ` Miroslav Benes 2019-11-02 12:19 ` Amit Daniel Kachhap 2019-11-02 12:19 ` Amit Daniel Kachhap 2019-11-04 13:11 ` Steven Rostedt 2019-11-04 13:11 ` Steven Rostedt 2019-11-05 6:59 ` Amit Kachhap 2019-11-05 6:59 ` Amit Kachhap 2019-11-04 13:36 ` Mark Rutland 2019-11-04 13:36 ` Mark Rutland 2019-11-05 6:47 ` Amit Kachhap 2019-11-05 6:47 ` Amit Kachhap 2019-11-06 14:15 ` Mark Rutland 2019-11-06 14:15 ` Mark Rutland 2019-11-07 4:40 ` Amit Kachhap 2019-11-07 4:40 ` Amit Kachhap 2019-11-04 13:16 ` Steven Rostedt [this message] 2019-11-04 13:16 ` Steven Rostedt 2019-11-04 13:38 ` Mark Rutland 2019-11-04 13:38 ` Mark Rutland 2019-11-04 13:53 ` Steven Rostedt 2019-11-04 13:53 ` Steven Rostedt 2019-10-29 16:58 ` [PATCHv2 2/8] module/ftrace: handle patchable-function-entry Mark Rutland 2019-10-29 16:58 ` Mark Rutland 2019-10-30 15:03 ` Torsten Duwe 2019-10-30 15:03 ` Torsten Duwe 2019-10-31 9:02 ` Mark Rutland 2019-10-31 9:02 ` Mark Rutland 2019-10-31 11:42 ` Torsten Duwe 2019-10-31 11:42 ` Torsten Duwe 2019-10-31 13:00 ` Mark Rutland 2019-10-31 13:00 ` Mark Rutland 2019-11-04 13:28 ` Steven Rostedt 2019-11-04 13:28 ` Steven Rostedt 2019-11-04 14:00 ` Mark Rutland 2019-11-04 14:00 ` Mark Rutland 2019-11-04 13:25 ` Steven Rostedt 2019-11-04 13:25 ` Steven Rostedt 2019-11-04 15:51 ` Mark Rutland 2019-11-04 15:51 ` Mark Rutland 2019-11-04 20:58 ` Helge Deller 2019-11-04 20:58 ` Helge Deller 2019-11-05 8:59 ` Miroslav Benes 2019-11-05 8:59 ` Miroslav Benes 2019-10-29 16:58 ` [PATCHv2 3/8] arm64: module: rework special section handling Mark Rutland 2019-10-29 16:58 ` Mark Rutland 2019-10-30 15:25 ` Miroslav Benes 2019-10-30 15:25 ` Miroslav Benes 2019-10-29 16:58 ` [PATCHv2 4/8] arm64: module/ftrace: intialize PLT at load time Mark Rutland 2019-10-29 16:58 ` Mark Rutland 2019-11-02 12:20 ` Amit Daniel Kachhap 2019-11-02 12:20 ` Amit Daniel Kachhap 2019-11-04 13:55 ` Mark Rutland 2019-11-04 13:55 ` Mark Rutland 2019-10-29 16:58 ` [PATCHv2 5/8] arm64: insn: add encoder for MOV (register) Mark Rutland 2019-10-29 16:58 ` Mark Rutland 2019-10-29 16:58 ` [PATCHv2 6/8] arm64: asm-offsets: add S_FP Mark Rutland 2019-10-29 16:58 ` Mark Rutland 2019-10-29 16:58 ` [PATCHv2 7/8] arm64: implement ftrace with regs Mark Rutland 2019-10-29 16:58 ` Mark Rutland 2019-11-02 12:21 ` Amit Daniel Kachhap 2019-11-02 12:21 ` Amit Daniel Kachhap 2019-11-04 13:51 ` Mark Rutland 2019-11-04 13:51 ` Mark Rutland [not found] ` <CANW9uyug8WKN2fR-FmcW-C_OO_OQ_AvukM+BR7wqiJ9eFQMO9Q@mail.gmail.com> 2019-11-15 7:45 ` Torsten Duwe 2019-11-15 7:45 ` Torsten Duwe 2019-11-15 13:59 ` Mark Rutland 2019-11-15 13:59 ` Mark Rutland 2019-10-29 16:58 ` [PATCHv2 8/8] arm64: ftrace: minimize ifdeffery Mark Rutland 2019-10-29 16:58 ` Mark Rutland 2019-10-30 17:02 ` [PATCHv2 0/8] arm64: ftrace cleanup + FTRACE_WITH_REGS Torsten Duwe 2019-10-30 17:02 ` Torsten Duwe 2019-10-31 17:16 ` Torsten Duwe 2019-10-31 17:16 ` Torsten Duwe 2019-11-01 9:08 ` Mark Rutland 2019-11-01 9:08 ` Mark Rutland 2019-11-01 15:39 ` Sven Schnelle 2019-11-01 15:39 ` Sven Schnelle 2019-11-01 16:28 ` Mark Rutland 2019-11-01 16:28 ` Mark Rutland 2019-11-02 12:12 ` Amit Daniel Kachhap 2019-11-02 12:12 ` Amit Daniel Kachhap 2019-11-04 12:56 ` Will Deacon 2019-11-04 12:56 ` Will Deacon 2019-11-04 13:03 ` Amit Kachhap 2019-11-04 13:03 ` Amit Kachhap 2019-11-04 14:04 ` Mark Rutland 2019-11-04 14:04 ` Mark Rutland 2019-11-05 7:06 ` Amit Kachhap 2019-11-05 7:06 ` Amit Kachhap 2019-11-07 11:31 ` Catalin Marinas 2019-11-07 11:31 ` Catalin Marinas
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=20191104081620.732320a8@grimm.local.home \ --to=rostedt@goodmis.org \ --cc=James.Bottomley@HansenPartnership.com \ --cc=amit.kachhap@arm.com \ --cc=catalin.marinas@arm.com \ --cc=deller@gmx.de \ --cc=duwe@suse.de \ --cc=james.morse@arm.com \ --cc=jeyu@kernel.org \ --cc=jpoimboe@redhat.com \ --cc=jthierry@redhat.com \ --cc=linux-arm-kernel@lists.infradead.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-parisc@vger.kernel.org \ --cc=mark.rutland@arm.com \ --cc=mingo@redhat.com \ --cc=peterz@infradead.org \ --cc=svens@stackframe.org \ --cc=takahiro.akashi@linaro.org \ --cc=will@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: linkBe 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.