patch-2.4.19 linux-2.4.19/arch/mips/kernel/process.c
Next file: linux-2.4.19/arch/mips/kernel/ptrace.c
Previous file: linux-2.4.19/arch/mips/kernel/proc.c
Back to the patch index
Back to the overall index
- Lines: 136
- Date:
Fri Aug 2 17:39:43 2002
- Orig file:
linux-2.4.18/arch/mips/kernel/process.c
- Orig date:
Sun Sep 9 10:43:01 2001
diff -urN linux-2.4.18/arch/mips/kernel/process.c linux-2.4.19/arch/mips/kernel/process.c
@@ -6,14 +6,13 @@
* Copyright (C) 1994 - 2000 by Ralf Baechle and others.
* Copyright (C) 1999 Silicon Graphics, Inc.
*/
-#include <linux/config.h>
#include <linux/errno.h>
#include <linux/sched.h>
#include <linux/kernel.h>
#include <linux/mm.h>
#include <linux/stddef.h>
#include <linux/unistd.h>
-#include <linux/ptrace.h>
+#include <linux/personality.h>
#include <linux/slab.h>
#include <linux/mman.h>
#include <linux/sys.h>
@@ -26,13 +25,13 @@
#include <asm/system.h>
#include <asm/mipsregs.h>
#include <asm/processor.h>
-#include <asm/stackframe.h>
+#include <asm/ptrace.h>
#include <asm/uaccess.h>
#include <asm/io.h>
#include <asm/elf.h>
#include <asm/isadep.h>
-void cpu_idle(void)
+ATTRIB_NORET void cpu_idle(void)
{
/* endless idle loop with no priority at all */
current->nice = 20;
@@ -55,8 +54,8 @@
void exit_thread(void)
{
/* Forget lazy fpu state */
- if (last_task_used_math == current) {
- set_cp0_status(ST0_CU1);
+ if (last_task_used_math == current && mips_cpu.options & MIPS_CPU_FPU) {
+ __enable_fpu();
__asm__ __volatile__("cfc1\t$0,$31");
last_task_used_math = NULL;
}
@@ -65,8 +64,8 @@
void flush_thread(void)
{
/* Forget lazy fpu state */
- if (last_task_used_math == current) {
- set_cp0_status(ST0_CU1);
+ if (last_task_used_math == current && mips_cpu.options & MIPS_CPU_FPU) {
+ __enable_fpu();
__asm__ __volatile__("cfc1\t$0,$31");
last_task_used_math = NULL;
}
@@ -84,7 +83,7 @@
if (last_task_used_math == current)
if (mips_cpu.options & MIPS_CPU_FPU) {
- set_cp0_status(ST0_CU1);
+ __enable_fpu();
save_fp(p);
}
/* set up new TSS. */
@@ -174,16 +173,15 @@
"1: addiu $sp,32 \n"
" move %0,$2 \n"
".set reorder"
- :"=r" (retval)
- :"i" (__NR_clone), "i" (__NR_exit),
- "r" (arg), "r" (fn),
- "r" (flags | CLONE_VM)
+ : "=r" (retval)
+ : "i" (__NR_clone), "i" (__NR_exit), "r" (arg), "r" (fn),
+ "r" (flags | CLONE_VM)
/*
* The called subroutine might have destroyed any of the
* at, result, argument or temporary registers ...
*/
- :"$1", "$2", "$3", "$4", "$5", "$6", "$7", "$8",
- "$9","$10","$11","$12","$13","$14","$15","$24","$25");
+ : "$2", "$3", "$4", "$5", "$6", "$7", "$8",
+ "$9","$10","$11","$12","$13","$14","$15","$24","$25");
return retval;
}
@@ -196,7 +194,7 @@
#define first_sched ((unsigned long) scheduling_functions_start_here)
#define last_sched ((unsigned long) scheduling_functions_end_here)
-/* get_wchan - a maintenance nightmare ... */
+/* get_wchan - a maintenance nightmare^W^Wpain in the ass ... */
unsigned long get_wchan(struct task_struct *p)
{
unsigned long frame, pc;
@@ -217,26 +215,29 @@
goto schedule_timeout_caller;
if (pc >= (unsigned long)interruptible_sleep_on)
goto schedule_caller;
- goto schedule_timeout_caller;
+ /* Fall through */
schedule_caller:
- frame = ((unsigned long *)p->thread.reg30)[9];
- pc = ((unsigned long *)frame)[11];
+ pc = ((unsigned long *)p->thread.reg30)[13];
+
return pc;
schedule_timeout_caller:
- /* Must be schedule_timeout ... */
- pc = ((unsigned long *)p->thread.reg30)[10];
- frame = ((unsigned long *)p->thread.reg30)[9];
-
- /* The schedule_timeout frame ... */
- pc = ((unsigned long *)frame)[14];
- frame = ((unsigned long *)frame)[13];
+ /*
+ * The schedule_timeout frame
+ */
+ frame = ((unsigned long *)p->thread.reg30)[13];
+
+ /*
+ * frame now points to sleep_on_timeout's frame
+ */
+ frame = ((unsigned long *)frame)[9];
+ pc = ((unsigned long *)frame)[10];
if (pc >= first_sched && pc < last_sched) {
/* schedule_timeout called by interruptible_sleep_on_timeout */
- pc = ((unsigned long *)frame)[11];
- frame = ((unsigned long *)frame)[10];
+ frame = ((unsigned long *)frame)[9];
+ pc = ((unsigned long *)frame)[10];
}
return pc;
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)