From: Matt Redfearn <matt.redfearn@imgtec.com>
To: Ralf Baechle <ralf@linux-mips.org>
Cc: <linux-mips@linux-mips.org>,
"Jason A . Donenfeld" <Jason@zx2c4.com>,
Thomas Gleixner <tglx@linutronix.de>,
Matt Redfearn <matt.redfearn@imgtec.com>,
<linux-kernel@vger.kernel.org>,
James Hogan <james.hogan@imgtec.com>,
Paul Burton <paul.burton@imgtec.com>
Subject: [PATCH 3/5] MIPS: Only change $28 to thread_info if coming from user mode
Date: Fri, 2 Dec 2016 13:39:15 +0000 [thread overview]
Message-ID: <1480685957-18809-4-git-send-email-matt.redfearn@imgtec.com> (raw)
In-Reply-To: <1480685957-18809-1-git-send-email-matt.redfearn@imgtec.com>
The SAVE_SOME macro is used to save the execution context on all
exceptions.
If an exception occurs while executing user code, the stack is switched
to the kernel's stack for the current task, and register $28 is switched
to point to the current_thread_info, which is at the bottom of the stack
region.
If the exception occurs while executing kernel code, the stack is left,
and this change ensures that register $28 is not updated. This is the
correct behaviour when the kernel can be executing on the separate irq
stack, because the thread_info will not be at the base of it.
With this change, register $28 is only switched to it's kernel
conventional usage of the currrent thread info pointer at the point at
which execution enters kernel space. Doing it on every exception was
redundant, but OK without an IRQ stack, but will be erroneous once that
is introduced.
Signed-off-by: Matt Redfearn <matt.redfearn@imgtec.com>
---
arch/mips/include/asm/stackframe.h | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/arch/mips/include/asm/stackframe.h b/arch/mips/include/asm/stackframe.h
index eebf39549606..5782fa3d63be 100644
--- a/arch/mips/include/asm/stackframe.h
+++ b/arch/mips/include/asm/stackframe.h
@@ -216,12 +216,22 @@
LONG_S $25, PT_R25(sp)
LONG_S $28, PT_R28(sp)
LONG_S $31, PT_R31(sp)
+
+ /* Set thread_info if we're coming from user mode */
+ .set reorder
+ mfc0 k0, CP0_STATUS
+ sll k0, 3 /* extract cu0 bit */
+ .set noreorder
+ bltz k0, 9f
+ nop
+
ori $28, sp, _THREAD_MASK
xori $28, _THREAD_MASK
#ifdef CONFIG_CPU_CAVIUM_OCTEON
.set mips64
pref 0, 0($28) /* Prefetch the current pointer */
#endif
+9:
.set pop
.endm
--
2.7.4
next prev parent reply other threads:[~2016-12-02 13:40 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-12-02 13:39 [PATCH 0/5] MIPS: Add per-cpu IRQ stack Matt Redfearn
2016-12-02 13:39 ` [PATCH 1/5] MIPS: Introduce irq_stack Matt Redfearn
2016-12-06 22:13 ` Jason A. Donenfeld
2016-12-07 9:25 ` Matt Redfearn
2016-12-02 13:39 ` [PATCH 2/5] MIPS: Stack unwinding while on IRQ stack Matt Redfearn
2016-12-02 13:39 ` Matt Redfearn [this message]
2016-12-05 16:20 ` [PATCH 3/5] MIPS: Only change $28 to thread_info if coming from user mode Maciej W. Rozycki
2016-12-05 16:52 ` Matt Redfearn
2016-12-05 17:22 ` Maciej W. Rozycki
2016-12-05 17:27 ` Paul Burton
2016-12-05 17:41 ` Maciej W. Rozycki
2016-12-02 13:39 ` [PATCH 4/5] MIPS: Switch to the irq_stack in interrupts Matt Redfearn
2016-12-02 13:39 ` [PATCH 5/5] MIPS: Select HAVE_IRQ_EXIT_ON_IRQ_STACK Matt Redfearn
2016-12-06 22:09 ` [PATCH 0/5] MIPS: Add per-cpu IRQ stack Jason A. Donenfeld
2016-12-07 9:30 ` Matt Redfearn
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=1480685957-18809-4-git-send-email-matt.redfearn@imgtec.com \
--to=matt.redfearn@imgtec.com \
--cc=Jason@zx2c4.com \
--cc=james.hogan@imgtec.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mips@linux-mips.org \
--cc=paul.burton@imgtec.com \
--cc=ralf@linux-mips.org \
--cc=tglx@linutronix.de \
/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
all inboxes | Powered by JetHome®