summaryrefslogtreecommitdiff
path: root/sys/src/9/mtx
diff options
context:
space:
mode:
authorglenda <glenda@9front.local>2025-05-14 01:33:55 +0000
committerglenda <glenda@9front.local>2025-05-14 01:33:55 +0000
commita7081490dbeda19788e6374a080ee38606aa3cd3 (patch)
tree8c440e3611573ee60322e7e84e5204e3e326028a /sys/src/9/mtx
parent635cb9e7425577dae44eb415ad42e8d3892850b5 (diff)
kernel: get rid of Proc.kstack
The kernel stack is now above the Proc structure, so the explicit kstack pointer can be eliminated.
Diffstat (limited to 'sys/src/9/mtx')
-rw-r--r--sys/src/9/mtx/l.s4
-rw-r--r--sys/src/9/mtx/trap.c10
2 files changed, 6 insertions, 8 deletions
diff --git a/sys/src/9/mtx/l.s b/sys/src/9/mtx/l.s
index 25e8b4b50..1c07553ee 100644
--- a/sys/src/9/mtx/l.s
+++ b/sys/src/9/mtx/l.s
@@ -412,9 +412,7 @@ TEXT trapvec(SB), $-4
RLWNM $0, R1, $~KZERO, R1 /* PADDR(m->) */
MOVW 8(R1), R1 /* m->proc */
RLWNM $0, R1, $~KZERO, R1 /* PADDR(m->proc) */
- MOVW 8(R1), R1 /* m->proc->kstack */
- RLWNM $0, R1, $~KZERO, R1 /* PADDR(m->proc->kstack) */
- ADD $(KSTACK-UREGSIZE), R1
+ SUB $UREGSIZE, R1 /* make room on stack */
MOVW R0, R2
BL saveureg(SB)
BL trap(SB)
diff --git a/sys/src/9/mtx/trap.c b/sys/src/9/mtx/trap.c
index d82b802c4..962401dd4 100644
--- a/sys/src/9/mtx/trap.c
+++ b/sys/src/9/mtx/trap.c
@@ -450,8 +450,8 @@ _dumpstack(Ureg *ureg)
sl = el-KSTACK;
}
else{
- sl = (ulong)up->kstack;
- el = sl + KSTACK;
+ el = (ulong)up;
+ sl = el-KSTACK;
}
if(l > el || l < sl){
el = (ulong)m+BY2PG;
@@ -488,7 +488,7 @@ dumpregs(Ureg *ur)
if(up) {
print("registers for %s %ld\n", up->text, up->pid);
if((ur->srr1 & MSR_PR) == 0)
- if(ur->usp < (ulong)up->kstack || ur->usp > (ulong)up->kstack+KSTACK)
+ if(ur->usp < (ulong)up - KSTACK || ur->usp > (ulong)up)
print("invalid stack ptr\n");
}
else
@@ -504,7 +504,7 @@ void
kprocchild(Proc *p, void (*entry)(void))
{
p->sched.pc = (ulong)entry;
- p->sched.sp = (ulong)p->kstack+KSTACK;
+ p->sched.sp = (ulong)p;
}
/*
@@ -540,7 +540,7 @@ forkchild(Proc *p, Ureg *ur)
{
Ureg *cur;
- p->sched.sp = (ulong)p->kstack+KSTACK-UREGSIZE;
+ p->sched.sp = (ulong)p - UREGSIZE;
p->sched.pc = (ulong)forkret;
cur = (Ureg*)(p->sched.sp+2*BY2WD);