patch-2.1.44 linux/include/asm-mips/current.h

Next file: linux/include/asm-mips/decstation.h
Previous file: linux/include/asm-mips/cpu.h
Back to the patch index
Back to the overall index

diff -u --recursive --new-file v2.1.43/linux/include/asm-mips/current.h linux/include/asm-mips/current.h
@@ -1,12 +1,48 @@
-#ifndef _MIPS_CURRENT_H
-#define _MIPS_CURRENT_H
+#ifndef __ASM_MIPS_CURRENT_H
+#define __ASM_MIPS_CURRENT_H
 
-/* Some architectures may want to do something "clever" here since
- * this is the most frequently accessed piece of data in the entire
- * kernel.  For an example, see the Sparc implementation where an
- * entire register is hard locked to contain the value of current.
+#ifdef __LANGUAGE_C__
+
+static inline struct task_struct *__get_current(void)
+{
+	struct task_struct *__current;
+
+	__asm__("ori\t%0,$29,%1\n\t"
+	        "xori\t%0,%1"
+		 :"=r" (__current)
+	         :"ir" (8191UL));
+
+	return __current;
+}
+
+#define current __get_current()
+
+#endif /* __LANGUAGE_C__ */
+#ifdef __LANGUAGE_ASSEMBLY__
+
+/*
+ * Get current task pointer
+ */
+#define GET_CURRENT(reg)			\
+	lui	reg, %hi(kernelsp);		\
+	lw	reg, %lo(kernelsp)(reg);	\
+	ori	reg, 8191;			\
+	xori	reg, 8191
+
+/*
+ * Special variant for use by exception handlers when the stack pointer
+ * is not loaded.
  */
-extern struct task_struct *current_set[NR_CPUS];
-#define current (current_set[smp_processor_id()])	/* Current on this processor */
+#define _GET_CURRENT(reg)			\
+	lui	reg, %hi(kernelsp);		\
+	.set	push;				\
+	.set	noreorder;			\
+	lw	reg, %lo(kernelsp)(reg);	\
+	.set	pop;				\
+	ori	reg, 8191;			\
+	xori	reg, 8191
+
+
+#endif
 
-#endif /* !(_MIPS_CURRENT_H) */
+#endif /* __ASM_MIPS_CURRENT_H */

FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen, slshen@lbl.gov