diff options
author | glenda <glenda@9front.local> | 2025-05-14 01:33:55 +0000 |
---|---|---|
committer | glenda <glenda@9front.local> | 2025-05-14 01:33:55 +0000 |
commit | a7081490dbeda19788e6374a080ee38606aa3cd3 (patch) | |
tree | 8c440e3611573ee60322e7e84e5204e3e326028a /sys/src/9/pc64 | |
parent | 635cb9e7425577dae44eb415ad42e8d3892850b5 (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.s | 5 | ||||
-rw-r--r-- | sys/src/9/pc64/mmu.c | 2 | ||||
-rw-r--r-- | sys/src/9/pc64/trap.c | 10 |
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); |