[RFC PATCH 09/16] MIPS: Introduce setup_kernel_mode macro

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



There are several actions that need to be done on entry into the kernel.
Currently these actions are performed in a mix of get_saved_sp and
SAVE_SOME. This commit introduces a macro named setup_kernel_mode which
will eventually contain all of the necessary steps to be taken on entry
into the kernel from user mode. For a start, we need to set register $28
to its kernel conventional usage of the current thread info. Move this
from SAVE_SOME into setup_kernel_mode and invoke it in its place.

As part of the move, ensure that the Octeon code does not leave the .set
mips64 active by adding a .set push & .set pop around it.

Signed-off-by: Matt Redfearn <matt.redfearn@xxxxxxxx>
---

 arch/mips/include/asm/stackframe.h | 22 +++++++++++++++-------
 1 file changed, 15 insertions(+), 7 deletions(-)

diff --git a/arch/mips/include/asm/stackframe.h b/arch/mips/include/asm/stackframe.h
index 2161357cc68f..494fe41f5619 100644
--- a/arch/mips/include/asm/stackframe.h
+++ b/arch/mips/include/asm/stackframe.h
@@ -48,6 +48,19 @@
 #define STATMASK 0x1f
 #endif
 
+		.macro setup_kernel_mode docfi=0
+
+		/* Set thread_info if we're coming from user mode */
+		ori	$28, sp, _THREAD_MASK
+		xori	$28, _THREAD_MASK
+#ifdef CONFIG_CPU_CAVIUM_OCTEON
+		.set	push
+		.set	mips64
+		pref	0, 0($28)       /* Prefetch the current pointer */
+		.set	pop
+#endif
+		.endm
+
 		.macro	SAVE_AT docfi=0
 		.set	push
 		.set	noat
@@ -273,17 +286,12 @@
 		cfi_st	$25, PT_R25, \docfi
 		cfi_st	$28, PT_R28, \docfi
 
-		/* Set thread_info if we're coming from user mode */
+		/* Set up kernel mode if we're coming from user */
 		mfc0	k0, CP0_STATUS
 		sll	k0, 3		/* extract cu0 bit */
 		bltz	k0, 9f
 
-		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
+		setup_kernel_mode \docfi
 9:
 		.set	pop
 		.endm
-- 
2.7.4



[Index of Archives]     [Linux MIPS Home]     [LKML Archive]     [Linux ARM Kernel]     [Linux ARM]     [Linux]     [Git]     [Yosemite News]     [Linux SCSI]     [Linux Hams]

  Powered by Linux