new fpu code
Subsystems (2)
PATCH 1/1 new fpu code
Whew! What an effort to create a patch for 4 arches instead of one!
Anyhow, attached are the complete patches for the new FPU context management code, for both 2.4 and 2.5, 32bit and 64bit.
. Get rid of lazy fpu switch. New algorithm is SMP safe. . Simplify signal/fpu handling
. Simplify FPU register access
. Unify FPU code between 2.4 and 2.5, and between 32bit and 64bit
Ralf, good enough?
Jun
arch/mips/kernel/process.c renamed from arch/mips/kernel/process.c.orig +16 -19
@@ -21,6 +21,7 @@#include <asm/bootinfo.h> #include <asm/cpu.h> +#include <asm/fpu.h> #include <asm/pgtable.h> #include <asm/system.h> #include <asm/mipsregs.h>
@@ -47,28 +48,25 @@ } } -struct task_struct *last_task_used_math =NULL ; - asmlinkage void ret_from_fork(void); +void start_thread (struct pt_regs * regs,unsigned long pc,unsigned long sp) +{ + regs->cp0_status &= ~(ST0_CU0 |ST0_KSU |ST0_CU1 ); + regs->cp0_status |=KU_USER ; + current->used_math =0 ; +loose_fpu (); + regs->cp0_epc = pc; + regs->regs[29 ] = sp; + current->thread.current_ds =USER_DS ; +} +void exit_thread (void ) { -/* Forget lazy fpu state */ -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 ; - } }void flush_thread (void ) { -/* Forget lazy fpu state */ -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 ; - } } int copy_thread(int nr, unsigned long clone_flags, unsigned long usp,
@@ -80,11 +78,10 @@ childksp = (unsigned long )p +KERNEL_STACK_SIZE -32 ; -if (last_task_used_math == current) -if (mips_cpu.options &MIPS_CPU_FPU ) { -__enable_fpu (); -save_fp (p); - } +if (is_fpu_owner ()) { +save_fp (p); + } +/* set up new TSS. */ childregs = (struct pt_regs *) childksp -1 ; *childregs = *regs;
arch/mips/kernel/ptrace.c renamed from arch/mips/kernel/ptrace.c.orig +4 -30
@@ -27,6 +27,7 @@#include <asm/uaccess.h> #include <asm/bootinfo.h> #include <asm/cpu.h> +#include <asm/fpu.h> /* * Called by kernel/ptrace.c when detaching..
@@ -42,7 +43,6 @@ {struct task_struct *child;int ret; -extern void save_fp (struct task_struct *);lock_kernel ();#if 0
@@ -113,20 +113,7 @@break ; case FPR_BASE ... FPR_BASE + 31:if (child->used_math) { -unsigned long long *fregs - = (unsigned long long *) - &child->thread.fpu.hard.fp_regs[0 ]; -if (!(mips_cpu.options &MIPS_CPU_FPU )) { - fregs = (unsigned long long *) - child->thread.fpu.soft.regs; - }else -if (last_task_used_math == child) { -__enable_fpu (); -save_fp (child); -__disable_fpu (); - last_task_used_math =NULL ; - regs->cp0_status &= ~ST0_CU1 ; - } +unsigned long long *fregs =get_fpu_regs (child);/* * The odd registers are actually the high * order bits of the values stored in the even
@@ -204,21 +191,8 @@break ; case FPR_BASE ... FPR_BASE + 31: {unsigned long long *fregs; - fregs = (unsigned long long *)&child->thread.fpu.hard.fp_regs[0 ]; -if (child->used_math) { -if (last_task_used_math == child) { -if (!(mips_cpu.options &MIPS_CPU_FPU )) { - fregs = (unsigned long long *) - child->thread.fpu.soft.regs; - }else { -__enable_fpu (); -save_fp (child); -__disable_fpu (); - last_task_used_math =NULL ; - regs->cp0_status &= ~ST0_CU1 ; - } - } - }else { + fregs = (unsigned long long *)get_fpu_regs (child); +if (!child->used_math) {/* FP not yet used */ memset (&child->thread.fpu.hard, ~0 ,sizeof (child->thread.fpu.hard));
arch/mips/kernel/signal.c renamed from arch/mips/kernel/signal.c.orig +15 -82
146 lines not on this page · raw message
arch/mips/kernel/traps.c renamed from arch/mips/kernel/traps.c.orig +15 -29
76 lines not on this page · raw message
arch/mips/kernel/r2300_switch.S renamed from arch/mips/kernel/r2300_switch.S.orig +45 -33
115 lines not on this page · raw message
arch/mips/kernel/r4k_switch.S renamed from arch/mips/kernel/r4k_switch.S.orig +45 -36
119 lines not on this page · raw message
arch/mips/kernel/cpu-probe.c renamed from arch/mips/kernel/cpu-probe.c.orig +1 -0
@@ -3,6 +3,7 @@#include <linux/stddef.h> #include <asm/bugs.h> #include <asm/cpu.h> +#include <asm/fpu.h> #include <asm/mipsregs.h> /*
arch/mips/tools/offset.c renamed from arch/mips/tools/offset.c.orig +0 -1
@@ -151,7 +151,6 @@ offset("#define SC_MDLO ", struct sigcontext, sc_mdlo); offset("#define SC_PC ", struct sigcontext, sc_pc); offset("#define SC_STATUS ", struct sigcontext, sc_status); - offset("#define SC_OWNEDFP ", struct sigcontext, sc_ownedfp); offset("#define SC_FPC_CSR ", struct sigcontext, sc_fpc_csr); offset("#define SC_FPC_EIR ", struct sigcontext, sc_fpc_eir); offset("#define SC_CAUSE ", struct sigcontext, sc_cause);
arch/mips64/kernel/process.c renamed from arch/mips64/kernel/process.c.orig +20 -21
68 lines not on this page · raw message
arch/mips64/kernel/ptrace.c renamed from arch/mips64/kernel/ptrace.c.orig +4 -34
@@ -23,6 +23,7 @@#include <linux/user.h> #include <asm/cpu.h> +#include <asm/fpu.h> #include <asm/mipsregs.h> #include <asm/pgtable.h> #include <asm/page.h>
@@ -112,23 +113,7 @@break ; case FPR_BASE ... FPR_BASE + 31:if (child->used_math) { -unsigned long *fregs - = (unsigned long *) - &child->thread.fpu.hard.fp_regs[0 ]; -if (mips_cpu.options &MIPS_CPU_FPU ) { -#ifndef CONFIG_SMP -if (last_task_used_math == child) { -__enable_fpu (); -save_fp (child); -__disable_fpu (); - last_task_used_math =NULL ; - } -#endif - }else { - fregs = (unsigned long *) - child->thread.fpu.soft.regs; - } - +unsigned long *fregs =get_fpu_regs (child); tmp = (unsigned long ) fregs[addr -FPR_BASE ]; }else { tmp = -EIO ;
@@ -191,23 +176,8 @@ regs->regs[addr] = data;break ; case FPR_BASE ... FPR_BASE + 31: { -unsigned long *fregs; - fregs = (unsigned long *)&child->thread.fpu.hard.fp_regs[0 ]; -if (child->used_math) { -#ifndef CONFIG_SMP -if (last_task_used_math == child) -if (mips_cpu.options &MIPS_CPU_FPU ) { -__enable_fpu (); -save_fp (child); -__disable_fpu (); - last_task_used_math =NULL ; - regs->cp0_status &= ~ST0_CU1 ; - }else { - fregs = (unsigned long *) - child->thread.fpu.soft.regs; - } -#endif - }else { +unsigned long *fregs =get_fpu_regs (child); +if (!child->used_math) {/* FP not yet used */ memset (&child->thread.fpu.hard, ~0 ,sizeof (child->thread.fpu.hard));
arch/mips64/kernel/signal.c renamed from arch/mips64/kernel/signal.c.orig +15 -79
143 lines not on this page · raw message
arch/mips64/kernel/traps.c renamed from arch/mips64/kernel/traps.c.orig +16 -39
86 lines not on this page · raw message
arch/mips64/kernel/r4k_switch.S renamed from arch/mips64/kernel/r4k_switch.S.orig +51 -47
144 lines not on this page · raw message
arch/mips64/kernel/cpu-probe.c renamed from arch/mips64/kernel/cpu-probe.c.orig +1 -0
@@ -3,6 +3,7 @@#include <linux/stddef.h> #include <asm/bugs.h> #include <asm/cpu.h> +#include <asm/fpu.h> #include <asm/mipsregs.h> /*
arch/mips64/kernel/signal32.c renamed from arch/mips64/kernel/signal32.c.orig +15 -79
144 lines not on this page · raw message
include/asm-mips/processor.h renamed from include/asm-mips/processor.h.orig +3 -10
@@ -72,9 +72,6 @@#define wp_works_ok 1#define wp_works_ok__is_a_macro/* for versions in ksyms.c */ -/* Lazy FPU handling on uni-processor */ -extern struct task_struct *last_task_used_math; -/* * User space process size: 2GB. This is hardcoded into a few places, * so don't change it unless you know what you are doing. TASK_SIZE
@@ -211,20 +208,16 @@/* * Do necessary setup to start up a newly executed thread. */ -#define start_thread (regs, new_pc, new_sp) do { \ -/* New thread loses kernel and FPU privileges. */ \ - regs->cp0_status = (regs->cp0_status & ~(ST0_CU0 |ST0_KSU |ST0_CU1 )) |KU_USER ;\ - regs->cp0_epc = new_pc; \ - regs->regs[29 ] = new_sp; \ - current->thread.current_ds =USER_DS ; \ -}while (0 ) +extern void start_thread (struct pt_regs * regs,unsigned long pc,unsigned long sp); +struct task_struct ;unsigned long get_wchan (struct task_struct *p);#define __PT_REG (reg) ((long)&((struct pt_regs *)0)->reg - sizeof(struct pt_regs))#define __KSTK_TOS (tsk) ((unsigned long)(tsk) + KERNEL_STACK_SIZE - 32)#define KSTK_EIP (tsk) (*(unsigned long *)(__KSTK_TOS(tsk) + __PT_REG(cp0_epc)))#define KSTK_ESP (tsk) (*(unsigned long *)(__KSTK_TOS(tsk) + __PT_REG(regs[29]))) +#define KSTK_STATUS (tsk) (*(unsigned long *)(__KSTK_TOS(tsk) + __PT_REG(cp0_status)))/* Allocation and freeing of basic task resources. */ /*
include/asm-mips/mipsregs.h renamed from include/asm-mips/mipsregs.h.orig +0 -42
48 lines not on this page · raw message
include/asm-mips/sigcontext.h renamed from include/asm-mips/sigcontext.h.orig +0 -1
@@ -18,7 +18,6 @@unsigned long long sc_pc;unsigned long long sc_regs[32 ];unsigned long long sc_fpregs[32 ]; -unsigned int sc_ownedfp;unsigned int sc_fpc_csr;unsigned int sc_fpc_eir;/* Unused */ unsigned int sc_used_math;
include/asm-mips/system.h renamed from include/asm-mips/system.h.orig +0 -5
@@ -250,11 +250,6 @@struct task_struct ; -extern asmlinkage void lazy_fpu_switch(void *); -extern asmlinkage void init_fpu(void); -extern asmlinkage void save_fp(struct task_struct *); -extern asmlinkage void restore_fp(struct task_struct *); -#define switch_to (prev,next,last) \ do { \ (last) = resume(prev, next); \
include/asm-mips64/processor.h renamed from include/asm-mips64/processor.h.orig +3 -24
@@ -103,17 +103,6 @@#define wp_works_ok 1#define wp_works_ok__is_a_macro/* for versions in ksyms.c */ -/* Lazy FPU handling on uni-processor */ -extern struct task_struct *last_task_used_math; - -#ifndef CONFIG_SMP -#define IS_FPU_OWNER () (last_task_used_math == current) -#define CLEAR_FPU_OWNER () last_task_used_math = NULL; -#else -#define IS_FPU_OWNER () (current->flags & PF_USEDFPU) -#define CLEAR_FPU_OWNER () current->flags &= ~PF_USEDFPU; -#endif -/* * User space process size: 1TB. This is hardcoded into a few places, * so don't change it unless you know what you are doing. TASK_SIZE
@@ -256,26 +245,16 @@/* * Do necessary setup to start up a newly executed thread. */ -#define start_thread (regs, pc, sp) \ -do { \ - unsigned long __status; \ - \ -/* New thread looses kernel privileges. */ \ - __status = regs->cp0_status & ~(ST0_CU0 |ST0_FR |ST0_KSU ); \ - __status |=KSU_USER ; \ - __status |= (current->thread.mflags &MF_32BIT ) ?0 :ST0_FR ; \ - regs->cp0_status = __status; \ - regs->cp0_epc = pc; \ - regs->regs[29 ] = sp; \ - current->thread.current_ds =USER_DS ; \ -}while (0 ) +extern void start_thread (struct pt_regs * regs,unsigned long pc,unsigned long sp); +struct task_struct ;unsigned long get_wchan (struct task_struct *p);#define __PT_REG (reg) ((long)&((struct pt_regs *)0)->reg - sizeof(struct pt_regs))#define __KSTK_TOS (tsk) ((unsigned long)(tsk) + KERNEL_STACK_SIZE - 32)#define KSTK_EIP (tsk) (*(unsigned long *)(__KSTK_TOS(tsk) + __PT_REG(cp0_epc)))#define KSTK_ESP (tsk) (*(unsigned long *)(__KSTK_TOS(tsk) + __PT_REG(regs[29]))) +#define KSTK_STATUS (tsk) (*(unsigned long *)(__KSTK_TOS(tsk) + __PT_REG(cp0_status)))/* Allocation and freeing of basic task resources. */ /*
include/asm-mips64/mipsregs.h renamed from include/asm-mips64/mipsregs.h.orig +0 -41
47 lines not on this page · raw message
include/asm-mips64/sigcontext.h renamed from include/asm-mips64/sigcontext.h.orig +0 -1
@@ -20,7 +20,6 @@unsigned long long sc_mdlo;unsigned long long sc_pc;unsigned int sc_status; -unsigned int sc_ownedfp;unsigned int sc_fpc_csr;unsigned int sc_fpc_eir;unsigned int sc_used_math;
include/asm-mips64/system.h renamed from include/asm-mips64/system.h.orig +0 -17
@@ -222,25 +222,8 @@struct task_struct ; -extern asmlinkage void lazy_fpu_switch(void *, void *); -extern asmlinkage void init_fpu(void); -extern asmlinkage void save_fp(struct task_struct *); -extern asmlinkage void restore_fp(struct task_struct *); - -#ifdef CONFIG_SMP -#define SWITCH_DO_LAZY_FPU \ - if (prev->flags & PF_USEDFPU) { \ - lazy_fpu_switch(prev, 0); \ - clear_cp0_status(ST0_CU1); \ - prev->flags &= ~PF_USEDFPU; \ - } -#else /* CONFIG_SMP */ -#define SWITCH_DO_LAZY_FPU do { } while(0) -#endif /* CONFIG_SMP */ -#define switch_to (prev,next,last) \ do { \ - SWITCH_DO_LAZY_FPU; \ (last) = resume(prev, next); \ } while(0)
arch/mips/kernel/process.c renamed from arch/mips/kernel/process.c.orig +15 -19
@@ -21,6 +21,7 @@#include <asm/bootinfo.h> #include <asm/cpu.h> +#include <asm/fpu.h> #include <asm/pgtable.h> #include <asm/system.h> #include <asm/mipsregs.h>
@@ -56,28 +57,25 @@ } } -struct task_struct *last_task_used_math =NULL ; - asmlinkage void ret_from_fork(void); +void start_thread (struct pt_regs * regs,unsigned long pc,unsigned long sp) +{ + regs->cp0_status &= ~(ST0_CU0 |ST0_KSU |ST0_CU1 ); + regs->cp0_status |=KU_USER ; + current->used_math =0 ; +loose_fpu (); + regs->cp0_epc = pc; + regs->regs[29 ] = sp; + current->thread.current_ds =USER_DS ; +} +void exit_thread (void ) { -/* Forget lazy fpu state */ -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 ; - } }void flush_thread (void ) { -/* Forget lazy fpu state */ -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 ; - } } int copy_thread(int nr, unsigned long clone_flags, unsigned long usp,
@@ -90,11 +88,9 @@ childksp = (unsigned long )ti +KERNEL_STACK_SIZE -32 ; -if (last_task_used_math == current) -if (mips_cpu.options &MIPS_CPU_FPU ) { -__enable_fpu (); -save_fp (p); - } +if (is_fpu_owner ()) { +save_fp (p); + }/* set up new TSS. */ childregs = (struct pt_regs *) childksp -1 ;
arch/mips/kernel/ptrace.c renamed from arch/mips/kernel/ptrace.c.orig +4 -30
@@ -28,6 +28,7 @@#include <asm/uaccess.h> #include <asm/bootinfo.h> #include <asm/cpu.h> +#include <asm/fpu.h> /* * Called by kernel/ptrace.c when detaching..
@@ -43,7 +44,6 @@ {struct task_struct *child;int ret; -extern void save_fp (struct task_struct *);lock_kernel ();#if 0
@@ -114,20 +114,7 @@break ; case FPR_BASE ... FPR_BASE + 31:if (child->used_math) { -unsigned long long *fregs - = (unsigned long long *) - &child->thread.fpu.hard.fp_regs[0 ]; -if (!(mips_cpu.options &MIPS_CPU_FPU )) { - fregs = (unsigned long long *) - child->thread.fpu.soft.regs; - }else -if (last_task_used_math == child) { -__enable_fpu (); -save_fp (child); -__disable_fpu (); - last_task_used_math =NULL ; - regs->cp0_status &= ~ST0_CU1 ; - } +unsigned long long *fregs =get_fpu_regs (child);/* * The odd registers are actually the high * order bits of the values stored in the even
@@ -205,21 +192,8 @@break ; case FPR_BASE ... FPR_BASE + 31: {unsigned long long *fregs; - fregs = (unsigned long long *)&child->thread.fpu.hard.fp_regs[0 ]; -if (child->used_math) { -if (last_task_used_math == child) { -if (!(mips_cpu.options &MIPS_CPU_FPU )) { - fregs = (unsigned long long *) - child->thread.fpu.soft.regs; - }else { -__enable_fpu (); -save_fp (child); -__disable_fpu (); - last_task_used_math =NULL ; - regs->cp0_status &= ~ST0_CU1 ; - } - } - }else { + fregs = (unsigned long long *)get_fpu_regs (child); +if (!child->used_math) {/* FP not yet used */ memset (&child->thread.fpu.hard, ~0 ,sizeof (child->thread.fpu.hard));
arch/mips/kernel/signal.c renamed from arch/mips/kernel/signal.c.orig +15 -82
146 lines not on this page · raw message
arch/mips/kernel/traps.c renamed from arch/mips/kernel/traps.c.orig +15 -30
76 lines not on this page · raw message
arch/mips/kernel/r2300_switch.S renamed from arch/mips/kernel/r2300_switch.S.orig +45 -31
113 lines not on this page · raw message
arch/mips/kernel/r4k_switch.S renamed from arch/mips/kernel/r4k_switch.S.orig +44 -32
113 lines not on this page · raw message
arch/mips/kernel/cpu-probe.c renamed from arch/mips/kernel/cpu-probe.c.orig +1 -0
@@ -3,6 +3,7 @@#include <linux/stddef.h> #include <asm/bugs.h> #include <asm/cpu.h> +#include <asm/fpu.h> #include <asm/mipsregs.h> /*
arch/mips/tools/offset.c renamed from arch/mips/tools/offset.c.orig +0 -1
@@ -155,7 +155,6 @@ offset("#define SC_MDLO ", struct sigcontext, sc_mdlo); offset("#define SC_PC ", struct sigcontext, sc_pc); offset("#define SC_STATUS ", struct sigcontext, sc_status); - offset("#define SC_OWNEDFP ", struct sigcontext, sc_ownedfp); offset("#define SC_FPC_CSR ", struct sigcontext, sc_fpc_csr); offset("#define SC_FPC_EIR ", struct sigcontext, sc_fpc_eir); offset("#define SC_CAUSE ", struct sigcontext, sc_cause);
arch/mips64/kernel/process.c renamed from arch/mips64/kernel/process.c.orig +19 -18
@@ -30,6 +30,7 @@#include <asm/io.h> #include <asm/elf.h> #include <asm/cpu.h> +#include <asm/fpu.h> /* * We use this if we don't have any better idle routine..
@@ -55,28 +56,30 @@ } } -struct task_struct *last_task_used_math =NULL ; - asmlinkage void ret_from_fork(void); +void start_thread (struct pt_regs * regs,unsigned long pc,unsigned long sp) +{ +unsigned long status; + +/* New thread looses kernel privileges. */ + status = regs->cp0_status & ~(ST0_CU0 |ST0_FR |ST0_KSU ); + status |=KSU_USER ; + status |= (current->thread.mflags &MF_32BIT ) ?0 :ST0_FR ; + regs->cp0_status = status; + current->used_math =0 ; +loose_fpu (); + regs->cp0_epc = pc; + regs->regs[29 ] = sp; +current_thread_info ()->addr_limit =USER_DS ; +} +void exit_thread (void ) { -/* Forget lazy fpu state */ -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 ; - } }void flush_thread (void ) { -/* Forget lazy fpu state */ -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 ; - } } int copy_thread(int nr, unsigned long clone_flags, unsigned long usp,
@@ -89,10 +92,8 @@ childksp = (unsigned long )ti +KERNEL_STACK_SIZE -32 ; -if (last_task_used_math == current) -if (mips_cpu.options &MIPS_CPU_FPU ) { -__enable_fpu (); -save_fp (p); +if (is_fpu_owner ()) { +save_fp (p); }/* set up new TSS. */
arch/mips64/kernel/ptrace.c renamed from arch/mips64/kernel/ptrace.c.orig +4 -35
@@ -23,6 +23,7 @@#include <linux/user.h> #include <asm/cpu.h> +#include <asm/fpu.h> #include <asm/mipsregs.h> #include <asm/pgtable.h> #include <asm/page.h>
@@ -112,23 +113,7 @@break ; case FPR_BASE ... FPR_BASE + 31:if (child->used_math) { -unsigned long *fregs - = (unsigned long *) - &child->thread.fpu.hard.fp_regs[0 ]; -if (mips_cpu.options &MIPS_CPU_FPU ) { -#ifndef CONFIG_SMP -if (last_task_used_math == child) { -__enable_fpu (); -save_fp (child); -__disable_fpu (); - last_task_used_math =NULL ; - } -#endif - }else { - fregs = (unsigned long *) - child->thread.fpu.soft.regs; - } - +unsigned long *fregs =get_fpu_regs (child); tmp = (unsigned long ) fregs[addr -FPR_BASE ]; }else { tmp = -EIO ;
@@ -191,24 +176,8 @@ regs->regs[addr] = data;break ; case FPR_BASE ... FPR_BASE + 31: { -unsigned long *fregs; - fregs = (unsigned long *)&child->thread.fpu.hard.fp_regs[0 ]; -if (child->used_math) { -#ifndef CONFIG_SMP -if (last_task_used_math == child) { -if (mips_cpu.options &MIPS_CPU_FPU ) { -__enable_fpu (); -save_fp (child); -__disable_fpu (); - last_task_used_math =NULL ; - regs->cp0_status &= ~ST0_CU1 ; - }else { - fregs = (unsigned long *) - child->thread.fpu.soft.regs; - } - } -#endif - }else { +unsigned long *fregs =get_fpu_regs (child); +if (!child->used_math) {/* FP not yet used */ memset (&child->thread.fpu.hard, ~0 ,sizeof (child->thread.fpu.hard));
arch/mips64/kernel/signal.c renamed from arch/mips64/kernel/signal.c.orig +14 -79
143 lines not on this page · raw message
arch/mips64/kernel/traps.c renamed from arch/mips64/kernel/traps.c.orig +17 -31
78 lines not on this page · raw message
arch/mips64/kernel/r4k_switch.S renamed from arch/mips64/kernel/r4k_switch.S.orig +51 -46
142 lines not on this page · raw message
arch/mips64/kernel/cpu-probe.c renamed from arch/mips64/kernel/cpu-probe.c.orig +1 -0
@@ -3,6 +3,7 @@#include <linux/stddef.h> #include <asm/bugs.h> #include <asm/cpu.h> +#include <asm/fpu.h> #include <asm/mipsregs.h> /*
arch/mips64/kernel/signal32.c renamed from arch/mips64/kernel/signal32.c.orig +15 -80
145 lines not on this page · raw message
include/asm-mips/processor.h renamed from include/asm-mips/processor.h.orig +3 -10
@@ -71,9 +71,6 @@#define wp_works_ok 1#define wp_works_ok__is_a_macro/* for versions in ksyms.c */ -/* Lazy FPU handling on uni-processor */ -extern struct task_struct *last_task_used_math; -/* * User space process size: 2GB. This is hardcoded into a few places, * so don't change it unless you know what you are doing. TASK_SIZE
@@ -196,20 +193,16 @@/* * Do necessary setup to start up a newly executed thread. */ -#define start_thread (regs, new_pc, new_sp) do { \ -/* New thread loses kernel and FPU privileges. */ \ - regs->cp0_status = (regs->cp0_status & ~(ST0_CU0 |ST0_KSU |ST0_CU1 )) |KU_USER ;\ - regs->cp0_epc = new_pc; \ - regs->regs[29 ] = new_sp; \ -current_thread_info ()->addr_limit =USER_DS ; \ -}while (0 ) +extern void start_thread (struct pt_regs * regs,unsigned long pc,unsigned long sp); +struct task_struct ;unsigned long get_wchan (struct task_struct *p);#define __PT_REG (reg) ((long)&((struct pt_regs *)0)->reg - sizeof(struct pt_regs))#define __KSTK_TOS (tsk) ((unsigned long)(tsk->thread_info) + KERNEL_STACK_SIZE - 32)#define KSTK_EIP (tsk) (*(unsigned long *)(__KSTK_TOS(tsk) + __PT_REG(cp0_epc)))#define KSTK_ESP (tsk) (*(unsigned long *)(__KSTK_TOS(tsk) + __PT_REG(regs[29]))) +#define KSTK_STATUS (tsk) (*(unsigned long *)(__KSTK_TOS(tsk) + __PT_REG(cp0_status)))#define cpu_relax () barrier()
include/asm-mips/mipsregs.h renamed from include/asm-mips/mipsregs.h.orig +0 -42
48 lines not on this page · raw message
include/asm-mips/sigcontext.h renamed from include/asm-mips/sigcontext.h.orig +0 -1
@@ -18,7 +18,6 @@unsigned long long sc_pc;unsigned long long sc_regs[32 ];unsigned long long sc_fpregs[32 ]; -unsigned int sc_ownedfp;unsigned int sc_fpc_csr;unsigned int sc_fpc_eir;/* Unused */ unsigned int sc_used_math;
include/asm-mips/system.h renamed from include/asm-mips/system.h.orig +0 -5
@@ -225,11 +225,6 @@struct task_struct ; -extern asmlinkage void lazy_fpu_switch(void *prev, void *next); -extern asmlinkage void init_fpu(void); -extern asmlinkage void save_fp(struct task_struct *); -extern asmlinkage void restore_fp(struct task_struct *); -#define switch_to (prev,next,last) \ do { \ (last) =resume(prev, next, next->thread_info); \
include/asm-mips64/mipsregs.h renamed from include/asm-mips64/mipsregs.h.orig +0 -41
47 lines not on this page · raw message
include/asm-mips64/sigcontext.h renamed from include/asm-mips64/sigcontext.h.orig +0 -1
@@ -20,7 +20,6 @@unsigned long long sc_mdlo;unsigned long long sc_pc;unsigned int sc_status; -unsigned int sc_ownedfp;unsigned int sc_fpc_csr;unsigned int sc_fpc_eir;unsigned int sc_used_math;
include/asm-mips64/system.h renamed from include/asm-mips64/system.h.orig +0 -5
@@ -211,11 +211,6 @@struct task_struct ; -extern asmlinkage void lazy_fpu_switch(void *prev, void *next); -extern asmlinkage void init_fpu(void); -extern asmlinkage void save_fp(struct task_struct *); -extern asmlinkage void restore_fp(struct task_struct *); -#define switch_to (prev,next,last) \ do { \ (last) = resume(prev, next, next->thread_info); \
include/asm-mips64/processor.h renamed from include/asm-mips64/processor.h.orig +3 -16
@@ -100,9 +100,6 @@#define wp_works_ok 1#define wp_works_ok__is_a_macro/* for versions in ksyms.c */ -/* Lazy FPU handling on uni-processor */ -extern struct task_struct *last_task_used_math; -/* * User space process size: 1TB. This is hardcoded into a few places, * so don't change it unless you know what you are doing. TASK_SIZE
@@ -231,26 +228,16 @@/* * Do necessary setup to start up a newly executed thread. */ -#define start_thread (regs, pc, sp) \ -do { \ - unsigned long __status; \ - \ -/* New thread looses kernel privileges. */ \ - __status = regs->cp0_status & ~(ST0_CU0 |ST0_FR |ST0_KSU ); \ - __status |=KSU_USER ; \ - __status |= (current->thread.mflags &MF_32BIT ) ?0 :ST0_FR ; \ - regs->cp0_status = __status; \ - regs->cp0_epc = pc; \ - regs->regs[29 ] = sp; \ -current_thread_info ()->addr_limit =USER_DS ; \ -}while (0 ) +extern void start_thread (struct pt_regs * regs,unsigned long pc,unsigned long sp); +struct task_struct ;unsigned long get_wchan (struct task_struct *p);#define __PT_REG (reg) ((long)&((struct pt_regs *)0)->reg - sizeof(struct pt_regs))#define __KSTK_TOS (tsk) ((unsigned long)(tsk->thread_info) + KERNEL_STACK_SIZE - 32)#define KSTK_EIP (tsk) (*(unsigned long *)(__KSTK_TOS(tsk) + __PT_REG(cp0_epc)))#define KSTK_ESP (tsk) (*(unsigned long *)(__KSTK_TOS(tsk) + __PT_REG(regs[29]))) +#define KSTK_STATUS (tsk) (*(unsigned long *)(__KSTK_TOS(tsk) + __PT_REG(cp0_status)))#define cpu_relax () barrier()