summaryrefslogtreecommitdiff
path: root/sys/src/9/pc64
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/pc64
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/pc64')
-rw-r--r--sys/src/9/pc64/l.s5
-rw-r--r--sys/src/9/pc64/mmu.c2
-rw-r--r--sys/src/9/pc64/trap.c10
3 files changed, 8 insertions, 9 deletions
diff --git a/sys/src/9/pc64/l.s b/sys/src/9/pc64/l.s
index 76aa2e241..423fad623 100644
--- a/sys/src/9/pc64/l.s
+++ b/sys/src/9/pc64/l.s
@@ -918,10 +918,9 @@ TEXT touser(SB), 1, $-4
TEXT syscallentry(SB), 1, $-4
SWAPGS
BYTE $0x65; MOVQ 0, AX /* m-> (MOVQ GS:0x0, AX) */
- MOVQ 16(AX), BX /* m->proc */
+ MOVQ 16(AX), BX
MOVQ SP, R13
- MOVQ 16(BX), SP /* m->proc->kstack */
- ADDQ $KSTACK, SP
+ MOVQ BX, SP
PUSHQ $UDSEL /* old stack segment */
PUSHQ R13 /* old sp */
diff --git a/sys/src/9/pc64/mmu.c b/sys/src/9/pc64/mmu.c
index 7f33ccc5a..d2b8b2d04 100644
--- a/sys/src/9/pc64/mmu.c
+++ b/sys/src/9/pc64/mmu.c
@@ -471,7 +471,7 @@ mmuswitch(Proc *proc)
m->mmumap[p->index/MAPBITS] |= 1ull<<(p->index%MAPBITS);
m->pml4[p->index] = PADDR(p->page) | PTEUSER|PTEWRITE|PTEVALID;
}
- taskswitch((uintptr)proc->kstack+KSTACK);
+ taskswitch((uintptr)proc);
}
void
diff --git a/sys/src/9/pc64/trap.c b/sys/src/9/pc64/trap.c
index b39c7a082..e18790c33 100644
--- a/sys/src/9/pc64/trap.c
+++ b/sys/src/9/pc64/trap.c
@@ -255,9 +255,9 @@ _dumpstack(Ureg *ureg)
x += iprint("ktrace /kernel/path %#p %#p <<EOF\n", ureg->pc, ureg->sp);
i = 0;
if(up
- && (uintptr)&l >= (uintptr)up->kstack
- && (uintptr)&l <= (uintptr)up->kstack+KSTACK)
- estack = (uintptr)up->kstack+KSTACK;
+ && (uintptr)&l >= (uintptr)up - KSTACK
+ && (uintptr)&l <= (uintptr)up)
+ estack = (uintptr)up;
else if((uintptr)&l >= (uintptr)m->stack
&& (uintptr)&l <= (uintptr)m+MACHSIZE)
estack = (uintptr)m+MACHSIZE;
@@ -762,7 +762,7 @@ kprocchild(Proc *p, void (*entry)(void))
* to linkproc().
*/
p->sched.pc = (uintptr)entry;
- p->sched.sp = (uintptr)p->kstack+KSTACK-BY2WD;
+ p->sched.sp = (uintptr)p - BY2WD;
}
void
@@ -775,7 +775,7 @@ forkchild(Proc *p, Ureg *ureg)
* - the return PC
* - trap's argument (ur)
*/
- p->sched.sp = (uintptr)p->kstack+KSTACK-(sizeof(Ureg)+2*BY2WD);
+ p->sched.sp = (uintptr)p - (sizeof(Ureg)+2*BY2WD);
p->sched.pc = (uintptr)forkret;
cureg = (Ureg*)(p->sched.sp+2*BY2WD);