patch-2.1.16 linux/arch/sparc/kernel/switch.S
Next file: linux/arch/sparc/kernel/sys_sparc.c
Previous file: linux/arch/sparc/kernel/sunos_asm.S
Back to the patch index
Back to the overall index
- Lines: 97
- Date:
Thu Jan 1 02:00:00 1970
- Orig file:
v2.1.15/linux/arch/sparc/kernel/switch.S
- Orig date:
Mon May 6 12:26:03 1996
diff -u --recursive --new-file v2.1.15/linux/arch/sparc/kernel/switch.S linux/arch/sparc/kernel/switch.S
@@ -1,96 +0,0 @@
-/* $Id: switch.S,v 1.18 1996/04/03 02:15:00 davem Exp $
- * switch.S: Sparc task switch code.
- *
- * Copyright (C) 1995 David S. Miller (davem@caip.rutgers.edu)
- */
-
-#include <asm/head.h>
-#include <asm/asi.h>
-#include <asm/contregs.h>
-#include <asm/cprefix.h>
-#include <asm/psr.h>
-#include <asm/asmmacro.h>
-#include <asm/ptrace.h>
-#include <asm/winmacro.h>
-
-#define sw_ntask g1
-#define sw_psr g4
-#define sw_wim g5
-#define sw_tmp g6
-#define sw_ctx g7
-
-/* Context switch code. The new process's task_struct
- * ptr is passed as the first parameter.
- *
- * First successful task switch 05/13/95 21:52:37
- */
- .align 4
- .globl C_LABEL(sparc_switch_to)
-C_LABEL(sparc_switch_to):
- mov %o0, %sw_ntask
-
- /* Save kernel state. */
- FLUSH_ALL_KERNEL_WINDOWS;
- STORE_WINDOW(sp)
- rd %psr, %sw_psr
- LOAD_CURRENT(sw_tmp, sw_wim)
- rd %wim, %sw_wim
- std %sw_psr, [%sw_tmp + THREAD_KPSR]
- std %sp, [%sw_tmp + THREAD_KSP]
-
- /* Load new kernel state. */
- wr %sw_psr, PSR_ET, %psr
- WRITE_PAUSE
-#ifdef __SMP__
- GET_PROCESSOR_OFFSET(sw_psr)
- set C_LABEL(current_set), %sw_tmp
- st %sw_ntask, [%sw_tmp + %sw_psr]
-#else
- sethi %hi(C_LABEL(current_set)), %sw_tmp
- st %sw_ntask, [%sw_tmp + %lo(C_LABEL(current_set))]
-#endif
- ldd [%sw_ntask + THREAD_KPSR], %sw_psr
- wr %sw_psr, PSR_ET, %psr
- WRITE_PAUSE
- wr %sw_wim, 0x0, %wim
- WRITE_PAUSE
- ldd [%sw_ntask + THREAD_KSP], %sp
- LOAD_WINDOW(sp)
-
- wr %sw_psr, 0x0, %psr ! traps back on
- WRITE_PAUSE
-
- retl
- nop
-
-
-#ifdef __SMP__
- /* Because of nasty register windows this is the only way
- * to start a processor into its cpu_idle() thread.
- */
-
- .globl C_LABEL(sparc_cpusched)
-C_LABEL(sparc_cpusched):
- LOAD_CURRENT(g1, g2)
- rd %psr, %g7
-
- wr %g7, PSR_ET, %psr
- WRITE_PAUSE
-
- ldd [%g1 + THREAD_KPSR], %g2
-
- wr %g2, PSR_ET, %psr
- WRITE_PAUSE
-
- wr %g3, 0x0, %wim
- WRITE_PAUSE
-
- ldd [%g1 + THREAD_KSP], %sp
- LOAD_WINDOW(sp)
-
- wr %g2, 0x0, %psr
- WRITE_PAUSE
-
- retl
- nop
-#endif
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen, slshen@lbl.gov