From: Torsten Duwe <duwe@lst.de>
To: Michael Ellerman <mpe@ellerman.id.au>
Cc: Jiri Kosina <jkosina@suse.cz>,
ppc-dev <linuxppc-dev@lists.ozlabs.org>,
Linux Kernel Mailing List <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH] ppc64 ftrace: mark data_access callees "notrace" (pt.1)
Date: Tue, 26 May 2015 16:34:59 +0200 [thread overview]
Message-ID: <20150526143459.GA24656@lst.de> (raw)
In-Reply-To: <20150520090325.GA11577@lst.de>
On Wed, May 20, 2015 at 11:03:25AM +0200, Torsten Duwe wrote:
> On Tue, May 19, 2015 at 01:27:07PM +1000, Michael Ellerman wrote:
> > On Mon, 2015-05-18 at 14:29 +0200, Jiri Kosina wrote:
> > >
> > > ftrace already handles recursion protection by itself (depending on the
> > > per-ftrace-ops FTRACE_OPS_FL_RECURSION_SAFE flag).
> >
> > OK, so I wonder why that's not working for us?
>
> IIRC a data access fault happens just before that flag is looked at ;-)
>
> I'm now thinking about a hybrid solution: mark the most critical functions
> "notrace", especially those directly involved with MMU loading, and add
> a per-thread flag to catch the not-so-obvious cases.
I realised the trace_recursion in the "current" task struct is not so far away,
and it should not fault, right? So that part of the solution would look like this
on top of my previous ftrace patch set.
It would impact performance further so I'd stick with the "notrace" on
certain hot functions, like hash_page. What do you think?
Torsten
diff --git a/arch/powerpc/kernel/asm-offsets.c b/arch/powerpc/kernel/asm-offsets.c
index 4717859..ae10752 100644
--- a/arch/powerpc/kernel/asm-offsets.c
+++ b/arch/powerpc/kernel/asm-offsets.c
@@ -72,6 +72,7 @@ int main(void)
DEFINE(THREAD, offsetof(struct task_struct, thread));
DEFINE(MM, offsetof(struct task_struct, mm));
DEFINE(MMCONTEXTID, offsetof(struct mm_struct, context.id));
+ DEFINE(TASK_TRACEREC, offsetof(struct task_struct, trace_recursion));
#ifdef CONFIG_PPC64
DEFINE(AUDITCONTEXT, offsetof(struct task_struct, audit_context));
DEFINE(SIGSEGV, SIGSEGV);
diff --git a/arch/powerpc/kernel/entry_64.S b/arch/powerpc/kernel/entry_64.S
index a4132ef..7842092 100644
--- a/arch/powerpc/kernel/entry_64.S
+++ b/arch/powerpc/kernel/entry_64.S
@@ -1202,7 +1202,13 @@ _GLOBAL(ftrace_caller)
SAVE_8GPRS(16,r1)
SAVE_8GPRS(24,r1)
-
+ ld r3, PACACURRENT(r13)
+ ld r4, TASK_TRACEREC(r3)
+ andi. r5, r4, 0x0010 // ( 1 << TRACE_FTRACE_BIT )
+ ori r4, r4, 0x0010
+ std r4, TASK_TRACEREC(r3)
+ bne 3f // ftrace in progress - avoid recursion!
+
LOAD_REG_IMMEDIATE(r3,function_trace_op)
ld r5,0(r3)
@@ -1224,9 +1230,14 @@ ftrace_call:
bl ftrace_stub
nop
+ ld r3, PACACURRENT(r13)
+ ld r4, TASK_TRACEREC(r3)
+ andi r4, r4, 0xffef // ~( 1 << TRACE_FTRACE_BIT )
+ std r4, TASK_TRACEREC(r3)
+
ld r3, _NIP(r1)
mtlr r3
-
+3:
REST_8GPRS(0,r1)
REST_8GPRS(8,r1)
REST_8GPRS(16,r1)
prev parent reply other threads:[~2015-05-26 14:35 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-05-13 16:11 [PATCH] ppc64 ftrace: mark data_access callees "notrace" (pt.1) Torsten Duwe
2015-05-15 1:34 ` Michael Ellerman
2015-05-15 8:45 ` Torsten Duwe
2015-05-16 8:05 ` Torsten Duwe
2015-05-18 12:29 ` Jiri Kosina
2015-05-19 3:27 ` Michael Ellerman
2015-05-19 9:52 ` Jiri Kosina
2015-06-03 13:02 ` [PATCH 0/4] ppc64 ftrace implementation Torsten Duwe
2015-06-03 13:08 ` [PATCH 1/4] " Torsten Duwe
2015-06-08 15:30 ` Steven Rostedt
2015-06-08 15:57 ` Torsten Duwe
2015-06-03 13:10 ` [PATCH 2/4] ppc64 ftrace configuration Torsten Duwe
2015-06-03 13:15 ` [PATCH 3/4] ppc64 ftrace: spare early boot and low level code Torsten Duwe
2015-06-03 13:22 ` [PATCH 4/4] ppc64 ftrace recursion protection Torsten Duwe
2015-05-20 9:03 ` [PATCH] ppc64 ftrace: mark data_access callees "notrace" (pt.1) Torsten Duwe
2015-05-26 14:34 ` Torsten Duwe [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=20150526143459.GA24656@lst.de \
--to=duwe@lst.de \
--cc=jkosina@suse.cz \
--cc=linux-kernel@vger.kernel.org \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=mpe@ellerman.id.au \
/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).