[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <9b0592f745de4fdfeb4b42b185ea13148a57a78e.1453405861.git.jpoimboe@redhat.com>
Date: Thu, 21 Jan 2016 16:49:36 -0600
From: Josh Poimboeuf <jpoimboe@...hat.com>
To: Thomas Gleixner <tglx@...utronix.de>,
Ingo Molnar <mingo@...hat.com>,
"H. Peter Anvin" <hpa@...or.com>, x86@...nel.org
Cc: linux-kernel@...r.kernel.org, live-patching@...r.kernel.org,
Michal Marek <mmarek@...e.cz>,
Peter Zijlstra <peterz@...radead.org>,
Andy Lutomirski <luto@...nel.org>,
Borislav Petkov <bp@...en8.de>,
Linus Torvalds <torvalds@...ux-foundation.org>,
Andi Kleen <andi@...stfloor.org>,
Pedro Alves <palves@...hat.com>,
Namhyung Kim <namhyung@...il.com>,
Bernd Petrovitsch <bernd@...rovitsch.priv.at>,
Chris J Arges <chris.j.arges@...onical.com>,
Andrew Morton <akpm@...ux-foundation.org>,
Jiri Slaby <jslaby@...e.cz>,
Arnaldo Carvalho de Melo <acme@...nel.org>
Subject: [PATCH 32/33] sched: Add __schedule() to stacktool whitelist
stacktool reports the following warnings for __schedule():
stacktool: kernel/sched/core.o: __schedule()+0x3c0: duplicate frame pointer save
stacktool: kernel/sched/core.o: __schedule()+0x3fd: sibling call from callable instruction with changed frame pointer
stacktool: kernel/sched/core.o: __schedule()+0x40a: call without frame pointer save/setup
stacktool: kernel/sched/core.o: __schedule()+0x7fd: frame pointer state mismatch
stacktool: kernel/sched/core.o: __schedule()+0x421: frame pointer state mismatch
Basically it's confused by two unusual attributes of the switch_to()
macro:
1. It saves prev's frame pointer to the old stack and restores next's
frame pointer from the new stack.
2. For new tasks it jumps directly to ret_from_fork.
Eventually it would probably be a good idea to clean up the
ret_from_fork hack so that new tasks are created with a valid initial
stack, as suggested by Andy:
https://lkml.kernel.org/r/CALCETrWsqCw4L1qKO9j9L5F+4ED4viuLQTFc=n1pKBZfFPQUFg@mail.gmail.com
Then __schedule() could return normally into the new code and stacktool
hopefully wouldn't have a problem anymore.
In the meantime, add it to the stacktool whitelist so we can have a
baseline with no stacktool warnings. The marker also serves as a
reminder that this code could be improved a bit.
Signed-off-by: Josh Poimboeuf <jpoimboe@...hat.com>
---
kernel/sched/core.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/kernel/sched/core.c b/kernel/sched/core.c
index 474658b..cc7e8e70 100644
--- a/kernel/sched/core.c
+++ b/kernel/sched/core.c
@@ -74,6 +74,7 @@
#include <linux/binfmts.h>
#include <linux/context_tracking.h>
#include <linux/compiler.h>
+#include <linux/stacktool.h>
#include <asm/switch_to.h>
#include <asm/tlb.h>
@@ -3288,6 +3289,7 @@ static void __sched notrace __schedule(bool preempt)
balance_callback(rq);
}
+STACKTOOL_IGNORE_FUNC(__schedule);
static inline void sched_submit_work(struct task_struct *tsk)
{
--
2.4.3
Powered by blists - more mailing lists