summaryrefslogtreecommitdiffstats
path: root/sys/sparc64/sparc64/swtch.S
diff options
context:
space:
mode:
authorjulian <julian@FreeBSD.org>2001-09-12 08:38:13 +0000
committerjulian <julian@FreeBSD.org>2001-09-12 08:38:13 +0000
commit5596676e6c6c1e81e899cd0531f9b1c28a292669 (patch)
treeb1a19fcdf05759281fab0d89efb13f0fdf42102e /sys/sparc64/sparc64/swtch.S
parent83e00d4274950d2b531c24692cd123538ffbddb9 (diff)
downloadFreeBSD-src-5596676e6c6c1e81e899cd0531f9b1c28a292669.zip
FreeBSD-src-5596676e6c6c1e81e899cd0531f9b1c28a292669.tar.gz
KSE Milestone 2
Note ALL MODULES MUST BE RECOMPILED make the kernel aware that there are smaller units of scheduling than the process. (but only allow one thread per process at this time). This is functionally equivalent to teh previousl -current except that there is a thread associated with each process. Sorry john! (your next MFC will be a doosie!) Reviewed by: peter@freebsd.org, dillon@freebsd.org X-MFC after: ha ha ha ha
Diffstat (limited to 'sys/sparc64/sparc64/swtch.S')
-rw-r--r--sys/sparc64/sparc64/swtch.S46
1 files changed, 24 insertions, 22 deletions
diff --git a/sys/sparc64/sparc64/swtch.S b/sys/sparc64/sparc64/swtch.S
index e3d7466..a490811 100644
--- a/sys/sparc64/sparc64/swtch.S
+++ b/sys/sparc64/sparc64/swtch.S
@@ -70,8 +70,8 @@
ENTRY(cpu_throw)
save %sp, -CCFSZ, %sp
- call chooseproc
- ldx [PCPU(CURPROC)], %l0
+ call choosethread
+ ldx [PCPU(CURTHREAD)], %l0
flushw
b,a .Lsw1
END(cpu_throw)
@@ -82,8 +82,8 @@ ENTRY(cpu_switch)
* nothing.
*/
save %sp, -CCFSZ, %sp
- call chooseproc
- ldx [PCPU(CURPROC)], %l0
+ call choosethread
+ ldx [PCPU(CURTHREAD)], %l0
#if KTR_COMPILE & KTR_CT1
CATR(KTR_CT1, "cpu_switch: from=%p (%s) to=%p (%s)"
, %g1, %g2, %g3, 7, 8, 9)
@@ -104,7 +104,7 @@ ENTRY(cpu_switch)
* and are therefore not saved in the trap frame.
* If the process was using floating point, save its context.
*/
- ldx [%l0 + P_FRAME], %l1
+ ldx [%l0 + TD_FRAME], %l1
ldx [PCPU(CURPCB)], %l2
rd %y, %l3
stx %l3, [%l2 + PCB_Y]
@@ -131,41 +131,42 @@ ENTRY(cpu_switch)
* Load the new process's frame pointer and program counter, and set
* the current process and pcb.
*/
-.Lsw1: ldx [%o0 + P_ADDR], %o1
+.Lsw1: ldx [%o0 + TD_PCB], %o1
#if KTR_COMPILE & KTR_CT1
CATR(KTR_CT1, "cpu_switch: to=%p pc=%#lx fp=%#lx sp=%#lx cwp=%#lx"
, %g1, %g2, %g3, 7, 8, 9)
stx %o0, [%g1 + KTR_PARM1]
- ldx [%o1 + U_PCB + PCB_PC], %g2
+ ldx [%o1 + PCB_PC], %g2
stx %g2, [%g1 + KTR_PARM2]
- ldx [%o1 + U_PCB + PCB_FP], %g2
+ ldx [%o1 + PCB_FP], %g2
stx %g2, [%g1 + KTR_PARM3]
sub %g2, CCFSZ, %g2
stx %g2, [%g1 + KTR_PARM4]
- ldx [%o1 + U_PCB + PCB_CWP], %g2
+ ldx [%o1 + PCB_CWP], %g2
stx %g2, [%g1 + KTR_PARM5]
9:
#endif
#if 1
mov %o0, %g4
mov %l0, %g5
- ldx [%o1 + U_PCB + PCB_CWP], %o2
+ ldx [%o1 + PCB_CWP], %o2
wrpr %o2, %cwp
mov %g4, %o0
mov %g5, %l0
#endif
- ldx [%o0 + P_ADDR], %o1
- ldx [%o1 + U_PCB + PCB_FP], %fp
- ldx [%o1 + U_PCB + PCB_PC], %i7
+ ldx [%o0 + TD_PCB], %o1
+ ldx [%o1 + PCB_FP], %fp
+ ldx [%o1 + PCB_PC], %i7
sub %fp, CCFSZ, %sp
- stx %o0, [PCPU(CURPROC)]
+ stx %o0, [PCPU(CURTHREAD)]
stx %o1, [PCPU(CURPCB)]
/*
* Point to the new process's vmspace and load its vm context number.
* If its nucleus context we are done.
*/
- ldx [%o0 + P_VMSPACE], %o2
+ ldx [%o0 + TD_PROC], %o2
+ ldx [%o2 + P_VMSPACE], %o2
lduw [%o2 + VM_PMAP + PM_CONTEXT], %o3
#if KTR_COMPILE & KTR_CT1
CATR(KTR_CT1, "cpu_switch: to=%p vm=%p context=%#x"
@@ -182,12 +183,12 @@ ENTRY(cpu_switch)
* If the new process was using floating point, restore its context.
* Always restore %fprs and %y.
*/
- ldx [%o0 + P_FRAME], %o4
+ ldx [%o0 + TD_FRAME], %o4
ldx [%o4 + TF_TSTATE], %o4
andcc %o4, TSTATE_PEF, %o4
be,pt %xcc, 2f
nop
- restrfp %o1 + U_PCB + PCB_FPSTATE, %o4
+ restrfp %o1 + PCB_FPSTATE, %o4
2: ldx [%o1 + PCB_FPSTATE + FP_FPRS], %o4
wr %o4, 0, %fprs
@@ -199,7 +200,8 @@ ENTRY(cpu_switch)
* context number. If its the same as the new process, we are
* done.
*/
- ldx [%l0 + P_VMSPACE], %l1
+ ldx [%l0 + TD_PROC], %l1
+ ldx [%l1 + P_VMSPACE], %l1
lduw [%l1 + VM_PMAP + PM_CONTEXT], %l3
#if KTR_COMPILE & KTR_CT1
CATR(KTR_CT1, "cpu_switch: from=%p vm=%p context=%#x"
@@ -247,9 +249,9 @@ ENTRY(cpu_switch)
*/
3:
#if KTR_COMPILE & KTR_CT1
- CATR(KTR_CT1, "cpu_switch: return p=%p (%s)"
+ CATR(KTR_CT1, "cpu_switch: return td=%p (%s)"
, %g1, %g2, %g3, 7, 8, 9)
- ldx [PCPU(CURPROC)], %g2
+ ldx [PCPU(CURTHREAD)], %g2
stx %g2, [%g1 + KTR_PARM1]
add %g2, P_COMM, %g3
stx %g3, [%g1 + KTR_PARM2]
@@ -266,8 +268,8 @@ ENTRY(savectx)
stx %l0, [%i0 + PCB_Y]
rd %fprs, %l0
stx %l0, [%i0 + PCB_FPSTATE + FP_FPRS]
- ldx [PCPU(CURPROC)], %l0
- ldx [%l0 + P_FRAME], %l0
+ ldx [PCPU(CURTHREAD)], %l0
+ ldx [%l0 + TD_FRAME], %l0
ldx [%l0 + TF_TSTATE], %l0
andcc %l0, TSTATE_PEF, %l0
be,pt %xcc, 1f
OpenPOWER on IntegriCloud