From: Torsten Duwe <duwe@lst.de>
To: Michael Ellerman <mpe@ellerman.id.au>,
ppc-dev <linuxppc-dev@lists.ozlabs.org>
Cc: Jiri Kosina <jkosina@suse.cz>,
Steven Rostedt <rostedt@goodmis.org>,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH 4/4] ppc64 ftrace recursion protection
Date: Wed, 3 Jun 2015 15:22:14 +0200 [thread overview]
Message-ID: <20150603132214.GE19424@lst.de> (raw)
In-Reply-To: <20150603130257.GA19424@lst.de>
As suggested by You and Jikos, a flag in task_struct's trace_recursion
is used to block a tracer function to recurse into itself, especially
on a data access fault. This should catch all functions called by the
fault handlers which are not yet attributed notrace.
Signed-off-by: Torsten Duwe <duwe@suse.de>
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..4768104 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)
next prev parent reply other threads:[~2015-06-03 13:22 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 ` Torsten Duwe [this message]
2015-05-20 9:03 ` [PATCH] ppc64 ftrace: mark data_access callees "notrace" (pt.1) Torsten Duwe
2015-05-26 14:34 ` Torsten Duwe
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=20150603132214.GE19424@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 \
--cc=rostedt@goodmis.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