patch-2.4.10 linux/arch/mips64/kernel/entry.S
Next file: linux/arch/mips64/kernel/init_task.c
Previous file: linux/arch/mips64/kernel/binfmt_elf32.c
Back to the patch index
Back to the overall index
- Lines: 114
- Date:
Sun Sep 9 10:43:01 2001
- Orig file:
v2.4.9/linux/arch/mips64/kernel/entry.S
- Orig date:
Wed Jul 25 17:10:18 2001
diff -u --recursive --new-file v2.4.9/linux/arch/mips64/kernel/entry.S linux/arch/mips64/kernel/entry.S
@@ -5,8 +5,9 @@
*
* Low level exception handling
*
- * Copyright (C) 1994 - 2000 by Ralf Baechle
+ * Copyright (C) 1994 - 2000, 2001 Ralf Baechle
* Copyright (C) 1999, 2000 Silicon Graphics
+ * Copyright (C) 2001 MIPS Technologies, Inc.
*/
#include <linux/config.h>
@@ -15,53 +16,61 @@
#include <asm/mipsregs.h>
#include <asm/stackframe.h>
+/* This duplicates the definition from <linux/sched.h> */
+#define PT_TRACESYS 0x00000002 /* tracing system calls */
+
+#define KU_USER 0x10
+
.text
- .set noreorder
.align 4
FEXPORT(ret_from_fork)
+ move a0, v0 # prev
jal schedule_tail
- move a0, v0 # prev
+ lw t0, TASK_PTRACE($28) # syscall tracing enabled?
+ andi t0, PT_TRACESYS
+ bnez t0, tracesys_exit
j ret_from_sys_call
- nop
-FEXPORT(handle_softirq)
- jal do_softirq
- nop
- b 9f
- nop
+
+tracesys_exit:
+ jal syscall_trace
+ b ret_from_sys_call
+
+EXPORT(ret_from_irq)
+EXPORT(ret_from_exception)
+ lw t0, PT_STATUS(sp) # returning to kernel mode?
+ andi t0, t0, KU_USER
+ bnez t0, ret_from_sys_call
+ j restore_all
reschedule: jal schedule
- nop
FEXPORT(ret_from_sys_call)
-FEXPORT(ret_from_irq)
- la t1, irq_stat # softirq_active
-#ifdef CONFIG_SMP
- lwu t0, TASK_PROCESSOR($28)
- dsll t0, t0, 5
- daddu t1, t0
-#endif
- lw t0, 0 (t1) # softirq_active
- lw t1, 4 (t1) # softirq_mask. unused delay slot
- and t0, t1
- bnez t0, handle_softirq
-9: ld t0, PT_STATUS(sp) # returning to kernel mode?
-
- andi t1, t0, 0x10
- beqz t1, return # -> yes
- ld t1, TASK_NEED_RESCHED($28)
- bnez t1, reschedule
- lw v0, TASK_SIGPENDING($28)
- move a0, zero
- beqz v0, return
- nop
- jal do_signal
- move a1, sp
+ mfc0 t0, CP0_STATUS # need_resched and signals atomic test
+ ori t0, t0, 1
+ xori t0, t0, 1
+ mtc0 t0, CP0_STATUS
+
+ ld v0, TASK_NEED_RESCHED($28)
+ lw v1, TASK_SIGPENDING($28)
+ bnez v0, reschedule
+ bnez v1, signal_return
-FEXPORT(return) .set noat
+restore_all: .set noat
RESTORE_ALL
eret
.set at
+signal_return: .type signal_return, @function
+
+ mfc0 t0, CP0_STATUS
+ ori t0, t0, 1
+ mtc0 t0, CP0_STATUS
+
+ move a0, zero
+ move a1, sp
+ jal do_signal
+ b restore_all
+
/*
* Common spurious interrupt handler.
*/
@@ -75,6 +84,6 @@
lui t1,%hi(spurious_count)
lw t0,%lo(spurious_count)(t1)
addiu t0,1
+ sw t0,%lo(spurious_count)(t1)
j ret_from_irq
- sw t0,%lo(spurious_count)(t1)
END(spurious_interrupt)
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)