From a7081490dbeda19788e6374a080ee38606aa3cd3 Mon Sep 17 00:00:00 2001 From: glenda Date: Wed, 14 May 2025 01:33:55 +0000 Subject: kernel: get rid of Proc.kstack The kernel stack is now above the Proc structure, so the explicit kstack pointer can be eliminated. --- sys/src/9/bcm/arch.c | 2 +- sys/src/9/bcm/trap.c | 13 ++++++------- sys/src/9/bcm64/trap.c | 10 +++++----- sys/src/9/cycv/trap.c | 10 +++++----- sys/src/9/imx8/trap.c | 10 +++++----- sys/src/9/kw/arch.c | 2 +- sys/src/9/kw/syscall.c | 2 +- sys/src/9/kw/trap.c | 13 ++++++------- sys/src/9/mtx/l.s | 4 +--- sys/src/9/mtx/trap.c | 10 +++++----- sys/src/9/omap/arch.c | 2 +- sys/src/9/omap/syscall.c | 2 +- sys/src/9/omap/trap.c | 8 ++++---- sys/src/9/pc/mmu.c | 4 ++-- sys/src/9/pc/trap.c | 10 +++++----- sys/src/9/pc64/l.s | 5 ++--- sys/src/9/pc64/mmu.c | 2 +- sys/src/9/pc64/trap.c | 10 +++++----- sys/src/9/port/portdat.h | 2 +- sys/src/9/port/proc.c | 1 - sys/src/9/ppc/l.s | 4 +--- sys/src/9/ppc/trap.c | 10 +++++----- sys/src/9/sgi/l.s | 2 -- sys/src/9/sgi/main.c | 2 +- sys/src/9/sgi/trap.c | 8 ++++---- sys/src/9/teg2/arch.c | 2 +- sys/src/9/teg2/syscall.c | 2 +- sys/src/9/teg2/trap.c | 8 ++++---- sys/src/9/xen/mmu.c | 4 ++-- sys/src/9/xen/trap.c | 10 +++++----- sys/src/9/zynq/trap.c | 10 +++++----- 31 files changed, 87 insertions(+), 97 deletions(-) (limited to 'sys/src') diff --git a/sys/src/9/bcm/arch.c b/sys/src/9/bcm/arch.c index fb97a3ea9..a025fe371 100644 --- a/sys/src/9/bcm/arch.c +++ b/sys/src/9/bcm/arch.c @@ -68,7 +68,7 @@ void kprocchild(Proc *p, void (*entry)(void)) { p->sched.pc = (uintptr)entry; - p->sched.sp = (uintptr)p->kstack+KSTACK; + p->sched.sp = (uintptr)p; } /* diff --git a/sys/src/9/bcm/trap.c b/sys/src/9/bcm/trap.c index 4aa44fdbe..01008650b 100644 --- a/sys/src/9/bcm/trap.c +++ b/sys/src/9/bcm/trap.c @@ -138,7 +138,7 @@ trap(Ureg *ureg) assert(!islo()); if(up != nil) - rem = ((char*)ureg)-up->kstack; + rem = ((char*)ureg)-((char*)up - KSTACK); else rem = ((char*)ureg)-((char*)m+sizeof(Mach)); if(rem < 256) { @@ -343,14 +343,14 @@ dumpstackwithureg(Ureg *ureg) ureg->pc, ureg->sp, ureg->r14); delay(2000); i = 0; - if(up != nil && (uintptr)&l <= (uintptr)up->kstack+KSTACK) - estack = (uintptr)up->kstack+KSTACK; + if(up != nil && (uintptr)&l <= (uintptr)up) + estack = (uintptr)up; else if((uintptr)&l >= (uintptr)m->stack && (uintptr)&l <= (uintptr)m+MACHSIZE) estack = (uintptr)m+MACHSIZE; else{ if(up != nil) - iprint("&up->kstack %#p &l %#p\n", up->kstack, &l); + iprint("&up %#p &l %#p\n", up, &l); else iprint("&m %#p &l %#p\n", m, &l); return; @@ -420,10 +420,9 @@ dumpregs(Ureg* ureg) iprint("pc %#lux link %#lux\n", ureg->pc, ureg->link); if(up) - iprint("user stack: %#p-%#p\n", up->kstack, up->kstack+KSTACK-4); + iprint("user stack: %#p-%#p\n", (char*)up - KSTACK, up); else - iprint("kernel stack: %8.8lux-%8.8lux\n", - (ulong)(m+1), (ulong)m+BY2PG-4); + iprint("kernel stack: %8.8lux-%8.8lux\n", (ulong)(m+1), (ulong)m+BY2PG); dumplongs("stack", (ulong *)(ureg + 1), 16); delay(2000); dumpstack(); diff --git a/sys/src/9/bcm64/trap.c b/sys/src/9/bcm64/trap.c index d3dedb8f9..60f7d1937 100644 --- a/sys/src/9/bcm64/trap.c +++ b/sys/src/9/bcm64/trap.c @@ -566,7 +566,7 @@ void kprocchild(Proc *p, void (*entry)(void)) { p->sched.pc = (uintptr) entry; - p->sched.sp = (uintptr) p->kstack + KSTACK - 16; + p->sched.sp = (uintptr) p - 16; *(void**)p->sched.sp = kprocchild; /* fake */ } @@ -576,7 +576,7 @@ forkchild(Proc *p, Ureg *ureg) Ureg *cureg; p->sched.pc = (uintptr) forkret; - p->sched.sp = (uintptr) p->kstack + KSTACK - TRAPFRAMESIZE; + p->sched.sp = (uintptr) p - TRAPFRAMESIZE; cureg = (Ureg*) (p->sched.sp + 16); memmove(cureg, ureg, sizeof(Ureg)); @@ -661,12 +661,12 @@ dumpstackwithureg(Ureg *ureg) sp = (uintptr)&ureg; estack = (uintptr)m+MACHSIZE; - if(up != nil && sp <= (uintptr)up->kstack+KSTACK) - estack = (uintptr)up->kstack+KSTACK; + if(up != nil && sp <= (uintptr)up) + estack = (uintptr)up; if(sp > estack){ if(up != nil) - iprint("&up->kstack %#p sp %#p\n", up->kstack, sp); + iprint("&up %#p sp %#p\n", up, sp); else iprint("&m %#p sp %#p\n", m, sp); return; diff --git a/sys/src/9/cycv/trap.c b/sys/src/9/cycv/trap.c index a47238cc3..98fb56715 100644 --- a/sys/src/9/cycv/trap.c +++ b/sys/src/9/cycv/trap.c @@ -26,9 +26,9 @@ _dumpstack(Ureg *ureg) x += iprint("ktrace /arm/9cycv %.8lux %.8lux %.8lux <pc, ureg->sp, ureg->r14); 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; @@ -522,7 +522,7 @@ void kprocchild(Proc *p, void (*entry)(void)) { p->sched.pc = (uintptr) entry; - p->sched.sp = (uintptr) p->kstack + KSTACK; + p->sched.sp = (uintptr) p; } void @@ -531,7 +531,7 @@ forkchild(Proc *p, Ureg *ureg) Ureg *cureg; p->sched.pc = (uintptr) forkret; - p->sched.sp = (uintptr) p->kstack + KSTACK - sizeof(Ureg); + p->sched.sp = (uintptr) p - sizeof(Ureg); cureg = (Ureg*) p->sched.sp; memmove(cureg, ureg, sizeof(Ureg)); diff --git a/sys/src/9/imx8/trap.c b/sys/src/9/imx8/trap.c index d3dedb8f9..60f7d1937 100644 --- a/sys/src/9/imx8/trap.c +++ b/sys/src/9/imx8/trap.c @@ -566,7 +566,7 @@ void kprocchild(Proc *p, void (*entry)(void)) { p->sched.pc = (uintptr) entry; - p->sched.sp = (uintptr) p->kstack + KSTACK - 16; + p->sched.sp = (uintptr) p - 16; *(void**)p->sched.sp = kprocchild; /* fake */ } @@ -576,7 +576,7 @@ forkchild(Proc *p, Ureg *ureg) Ureg *cureg; p->sched.pc = (uintptr) forkret; - p->sched.sp = (uintptr) p->kstack + KSTACK - TRAPFRAMESIZE; + p->sched.sp = (uintptr) p - TRAPFRAMESIZE; cureg = (Ureg*) (p->sched.sp + 16); memmove(cureg, ureg, sizeof(Ureg)); @@ -661,12 +661,12 @@ dumpstackwithureg(Ureg *ureg) sp = (uintptr)&ureg; estack = (uintptr)m+MACHSIZE; - if(up != nil && sp <= (uintptr)up->kstack+KSTACK) - estack = (uintptr)up->kstack+KSTACK; + if(up != nil && sp <= (uintptr)up) + estack = (uintptr)up; if(sp > estack){ if(up != nil) - iprint("&up->kstack %#p sp %#p\n", up->kstack, sp); + iprint("&up %#p sp %#p\n", up, sp); else iprint("&m %#p sp %#p\n", m, sp); return; diff --git a/sys/src/9/kw/arch.c b/sys/src/9/kw/arch.c index 8f73da606..2395c74ea 100644 --- a/sys/src/9/kw/arch.c +++ b/sys/src/9/kw/arch.c @@ -68,7 +68,7 @@ void kprocchild(Proc *p, void (*entry)(void)) { p->sched.pc = (uintptr)entry; - p->sched.sp = (uintptr)p->kstack+KSTACK; + p->sched.sp = (uintptr)p; } /* diff --git a/sys/src/9/kw/syscall.c b/sys/src/9/kw/syscall.c index 067c4a48b..521f519c1 100644 --- a/sys/src/9/kw/syscall.c +++ b/sys/src/9/kw/syscall.c @@ -314,7 +314,7 @@ forkchild(Proc *p, Ureg *ureg) Ureg *cureg; //print("%lud setting up for forking child %lud\n", up->pid, p->pid); - p->sched.sp = (ulong)p->kstack+KSTACK-sizeof(Ureg); + p->sched.sp = (ulong)p-sizeof(Ureg); p->sched.pc = (ulong)forkret; cureg = (Ureg*)(p->sched.sp); diff --git a/sys/src/9/kw/trap.c b/sys/src/9/kw/trap.c index 1b0705b05..dafc8fc42 100644 --- a/sys/src/9/kw/trap.c +++ b/sys/src/9/kw/trap.c @@ -367,7 +367,7 @@ trap(Ureg *ureg) char buf[ERRMAX]; if(up != nil) - rem = (char*)ureg - up->kstack; + rem = (char*)ureg - ((char*)up - KSTACK); else rem = (char*)ureg - ((char*)m + sizeof(Mach)); if(rem < 256) { @@ -540,14 +540,14 @@ dumpstackwithureg(Ureg *ureg) ureg->pc, ureg->sp, ureg->r14); delay(2000); i = 0; - if(up != nil && (uintptr)&l <= (uintptr)up->kstack+KSTACK) - estack = (uintptr)up->kstack+KSTACK; + if(up != nil && (uintptr)&l <= (uintptr)up) + estack = (uintptr)up; else if((uintptr)&l >= (uintptr)m->stack && (uintptr)&l <= (uintptr)m+MACHSIZE) estack = (uintptr)m+MACHSIZE; else{ if(up != nil) - iprint("&up->kstack %#p &l %#p\n", up->kstack, &l); + iprint("&up %#p &l %#p\n", up, &l); else iprint("&m %#p &l %#p\n", m, &l); return; @@ -617,10 +617,9 @@ dumpregs(Ureg* ureg) iprint("pc %#lux link %#lux\n", ureg->pc, ureg->link); if(up) - iprint("user stack: %#p-%#p\n", up->kstack, up->kstack+KSTACK-4); + iprint("user stack: %#p-%#p\n", (char*)up - KSTACK, up); else - iprint("kernel stack: %8.8lux-%8.8lux\n", - (ulong)(m+1), (ulong)m+BY2PG-4); + iprint("kernel stack: %8.8lux-%8.8lux\n", (ulong)(m+1), (ulong)m+BY2PG); dumplongs("stack", (ulong *)(ureg + 1), 16); delay(2000); dumpstack(); 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); diff --git a/sys/src/9/omap/arch.c b/sys/src/9/omap/arch.c index c0bf9c605..95f875c93 100644 --- a/sys/src/9/omap/arch.c +++ b/sys/src/9/omap/arch.c @@ -68,7 +68,7 @@ void kprocchild(Proc *p, void (*entry)(void)) { p->sched.pc = (uintptr)entry; - p->sched.sp = (uintptr)p->kstack+KSTACK; + p->sched.sp = (uintptr)p; } /* diff --git a/sys/src/9/omap/syscall.c b/sys/src/9/omap/syscall.c index c89bfa66a..c97ce591c 100644 --- a/sys/src/9/omap/syscall.c +++ b/sys/src/9/omap/syscall.c @@ -311,7 +311,7 @@ forkchild(Proc *p, Ureg *ureg) Ureg *cureg; //print("%lud setting up for forking child %lud\n", up->pid, p->pid); - p->sched.sp = (ulong)p->kstack+KSTACK-sizeof(Ureg); + p->sched.sp = (ulong)p-sizeof(Ureg); p->sched.pc = (ulong)forkret; cureg = (Ureg*)(p->sched.sp); diff --git a/sys/src/9/omap/trap.c b/sys/src/9/omap/trap.c index 6c8021f02..72cc504bd 100644 --- a/sys/src/9/omap/trap.c +++ b/sys/src/9/omap/trap.c @@ -453,7 +453,7 @@ trap(Ureg *ureg) splhi(); /* paranoia */ if(up != nil) - rem = ((char*)ureg)-up->kstack; + rem = ((char*)ureg)-((char*)up-KSTACK); else rem = ((char*)ureg)-((char*)m+sizeof(Mach)); if(rem < 1024) { @@ -663,9 +663,9 @@ dumpstackwithureg(Ureg *ureg) delay(20); 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; diff --git a/sys/src/9/pc/mmu.c b/sys/src/9/pc/mmu.c index be5b9fd25..80701b82d 100644 --- a/sys/src/9/pc/mmu.c +++ b/sys/src/9/pc/mmu.c @@ -298,9 +298,9 @@ mmuswitch(Proc* proc) pdb = tmpmap(proc->mmupdb); pdb[PDX(MACHADDR)] = m->pdb[PDX(MACHADDR)]; tmpunmap(pdb); - taskswitch(proc->mmupdb->pa, (ulong)(proc->kstack+KSTACK)); + taskswitch(proc->mmupdb->pa, (ulong)proc); }else - taskswitch(PADDR(m->pdb), (ulong)(proc->kstack+KSTACK)); + taskswitch(PADDR(m->pdb), (ulong)proc); memmove(&m->gdt[PROCSEG0], proc->gdt, sizeof(proc->gdt)); if((x = (ulong)proc->ldt) && (n = proc->nldt) > 0){ diff --git a/sys/src/9/pc/trap.c b/sys/src/9/pc/trap.c index 584c25309..eb1e8c5fe 100644 --- a/sys/src/9/pc/trap.c +++ b/sys/src/9/pc/trap.c @@ -293,9 +293,9 @@ _dumpstack(Ureg *ureg) x += iprint("ktrace /kernel/path %.8lux %.8lux <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; @@ -775,7 +775,7 @@ kprocchild(Proc *p, void (*entry)(void)) * to linkproc(). */ p->sched.pc = (ulong)entry; - p->sched.sp = (ulong)p->kstack+KSTACK-BY2WD; + p->sched.sp = (ulong)p - BY2WD; } void @@ -788,7 +788,7 @@ forkchild(Proc *p, Ureg *ureg) * - the return PC * - trap's argument (ur) */ - p->sched.sp = (ulong)p->kstack+KSTACK-(sizeof(Ureg)+2*BY2WD); + p->sched.sp = (ulong)p - (sizeof(Ureg)+2*BY2WD); p->sched.pc = (ulong)forkret; cureg = (Ureg*)(p->sched.sp+2*BY2WD); 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 <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); diff --git a/sys/src/9/port/portdat.h b/sys/src/9/port/portdat.h index 8f3904441..5aaad9ada 100644 --- a/sys/src/9/port/portdat.h +++ b/sys/src/9/port/portdat.h @@ -653,7 +653,7 @@ struct Schedq struct Proc { Label sched; /* known to l.s */ - char *kstack; /* known to l.s */ + Mach *mach; /* machine running this proc */ char *text; char *user; diff --git a/sys/src/9/port/proc.c b/sys/src/9/port/proc.c index 9e0a530d9..1fad45853 100644 --- a/sys/src/9/port/proc.c +++ b/sys/src/9/port/proc.c @@ -648,7 +648,6 @@ newproc(void) } p = (Proc*)(b + KSTACK); p->index = procalloc.nextindex++; - p->kstack = b; procalloc.tab[p->index] = p; } procalloc.free = p->qnext; diff --git a/sys/src/9/ppc/l.s b/sys/src/9/ppc/l.s index 96b166f9e..6fd8f3ab4 100644 --- a/sys/src/9/ppc/l.s +++ b/sys/src/9/ppc/l.s @@ -523,9 +523,7 @@ TEXT trapvec(SB), $-4 MOVW $MACHPADDR, 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 /* make room on stack */ + SUB $UREGSIZE, R1 /* make room on stack */ BL saveureg(SB) BL trap(SB) diff --git a/sys/src/9/ppc/trap.c b/sys/src/9/ppc/trap.c index 533f252b4..1aa5862d3 100644 --- a/sys/src/9/ppc/trap.c +++ b/sys/src/9/ppc/trap.c @@ -424,8 +424,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; @@ -462,7 +462,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 @@ -480,7 +480,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; } /* @@ -517,7 +517,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); diff --git a/sys/src/9/sgi/l.s b/sys/src/9/sgi/l.s index d3fe25d2b..f52276d6f 100644 --- a/sys/src/9/sgi/l.s +++ b/sys/src/9/sgi/l.s @@ -442,8 +442,6 @@ waskernel: wasuser: /* get kernel stack for this user process */ GETMACH (SP) MOVW 8(SP), SP /* m->proc */ - MOVW 8(SP), SP /* m->proc->kstack */ - ADDU $(KSTACK-UREGSIZE), SP dosave: MOVW R31, 0x28(SP) diff --git a/sys/src/9/sgi/main.c b/sys/src/9/sgi/main.c index 31d120068..4e0aa75ba 100644 --- a/sys/src/9/sgi/main.c +++ b/sys/src/9/sgi/main.c @@ -321,7 +321,7 @@ procsave(Proc *p) } void -procrestore(Proc *p) +procrestore(Proc *) { } diff --git a/sys/src/9/sgi/trap.c b/sys/src/9/sgi/trap.c index 2bea55c34..c97ee7d08 100644 --- a/sys/src/9/sgi/trap.c +++ b/sys/src/9/sgi/trap.c @@ -160,7 +160,7 @@ trap(Ureg *ur) char buf[2*ERRMAX], buf1[ERRMAX], *fpexcep; static int dumps; - if (up && (char *)(ur) - up->kstack < 1024 && dumps++ == 0) { + if (up && (char *)(ur) - ((char *)up - KSTACK) < 1024 && dumps++ == 0) { iprint("trap: proc %ld kernel stack getting full\n", up->pid); dumpregs(ur); dumpstack(); @@ -421,7 +421,7 @@ _dumpstack(Ureg *ureg) if(up == nil) top = (ulong)MACHADDR + MACHSIZE; else - top = (ulong)up->kstack + KSTACK; + top = (ulong)up; i = 0; for(l=ureg->sp; l < top; l += BY2WD) { v = *(ulong*)l; @@ -764,7 +764,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); @@ -780,7 +780,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; } /* set up user registers before return from exec() */ diff --git a/sys/src/9/teg2/arch.c b/sys/src/9/teg2/arch.c index d60944a50..565884608 100644 --- a/sys/src/9/teg2/arch.c +++ b/sys/src/9/teg2/arch.c @@ -68,7 +68,7 @@ void kprocchild(Proc *p, void (*entry)(void)) { p->sched.pc = (uintptr)entry; - p->sched.sp = (uintptr)p->kstack+KSTACK; + p->sched.sp = (uintptr)p; } /* diff --git a/sys/src/9/teg2/syscall.c b/sys/src/9/teg2/syscall.c index d444e7971..6d5c6ba1f 100644 --- a/sys/src/9/teg2/syscall.c +++ b/sys/src/9/teg2/syscall.c @@ -342,7 +342,7 @@ forkchild(Proc *p, Ureg *ureg) { Ureg *cureg; - p->sched.sp = (ulong)p->kstack+KSTACK-sizeof(Ureg); + p->sched.sp = (ulong)p - sizeof(Ureg); p->sched.pc = (ulong)forkret; cureg = (Ureg*)(p->sched.sp); diff --git a/sys/src/9/teg2/trap.c b/sys/src/9/teg2/trap.c index 697a5ae3a..af134f8ce 100644 --- a/sys/src/9/teg2/trap.c +++ b/sys/src/9/teg2/trap.c @@ -819,7 +819,7 @@ trap(Ureg *ureg) splhi(); /* paranoia */ if(up != nil) - rem = ((char*)ureg)-up->kstack; + rem = ((char*)ureg)-((char*)up-KSTACK); else rem = ((char*)ureg)-((char*)m+sizeof(Mach)); if(rem < 1024) { @@ -957,9 +957,9 @@ dumpstackwithureg(Ureg *ureg) delay(20); 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; diff --git a/sys/src/9/xen/mmu.c b/sys/src/9/xen/mmu.c index 250d08371..03017e88d 100644 --- a/sys/src/9/xen/mmu.c +++ b/sys/src/9/xen/mmu.c @@ -237,10 +237,10 @@ mmuswitch(Proc* proc) //XXX doesn't work for some reason, but it's not needed for uniprocessor //pdb = (ulong*)proc->mmupdb->va; //xenupdate(&pdb[PDX(MACHADDR)], m->pdb[PDX(MACHADDR)]); - taskswitch(proc->mmupdb, (ulong)(proc->kstack+KSTACK)); + taskswitch(proc->mmupdb, (ulong)proc); } else - taskswitch(0, (ulong)(proc->kstack+KSTACK)); + taskswitch(0, (ulong)proc); } void diff --git a/sys/src/9/xen/trap.c b/sys/src/9/xen/trap.c index 72f7e98eb..7527461fc 100644 --- a/sys/src/9/xen/trap.c +++ b/sys/src/9/xen/trap.c @@ -263,9 +263,9 @@ _dumpstack(Ureg *ureg) x += print("ktrace /kernel/path %.8lux %.8lux <pc, ureg->sp); i = 0; if(up - && (ulong)&l >= (ulong)up->kstack - && (ulong)&l <= (ulong)up->kstack+KSTACK) - estack = (ulong)up->kstack+KSTACK; + && (ulong)&l >= (ulong)up - KSTACK + && (ulong)&l <= (ulong)up) + estack = (ulong)up; else if((ulong)&l >= (ulong)m->stack && (ulong)&l <= (ulong)m+BY2PG) estack = (ulong)m+MACHSIZE; @@ -710,7 +710,7 @@ kprocchild(Proc *p, void (*entry)(void)) * to linkproc(). */ p->sched.pc = (ulong)entry; - p->sched.sp = (ulong)p->kstack+KSTACK-BY2WD; + p->sched.sp = (ulong)p - BY2WD; } void @@ -723,7 +723,7 @@ forkchild(Proc *p, Ureg *ureg) * - the return PC * - trap's argument (ur) */ - p->sched.sp = (ulong)p->kstack+KSTACK-(sizeof(Ureg)+2*BY2WD); + p->sched.sp = (ulong)p - (sizeof(Ureg)+2*BY2WD); p->sched.pc = (ulong)forkret; cureg = (Ureg*)(p->sched.sp+2*BY2WD); diff --git a/sys/src/9/zynq/trap.c b/sys/src/9/zynq/trap.c index 92bdd4107..c245be526 100644 --- a/sys/src/9/zynq/trap.c +++ b/sys/src/9/zynq/trap.c @@ -26,9 +26,9 @@ _dumpstack(Ureg *ureg) x += iprint("ktrace /arm/9zynq %.8lux %.8lux %.8lux <pc, ureg->sp, ureg->r14); 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; @@ -521,7 +521,7 @@ void kprocchild(Proc *p, void (*entry)(void)) { p->sched.pc = (uintptr) entry; - p->sched.sp = (uintptr) p->kstack + KSTACK; + p->sched.sp = (uintptr) p; } void @@ -530,7 +530,7 @@ forkchild(Proc *p, Ureg *ureg) Ureg *cureg; p->sched.pc = (uintptr) forkret; - p->sched.sp = (uintptr) p->kstack + KSTACK - sizeof(Ureg); + p->sched.sp = (uintptr) p - sizeof(Ureg); cureg = (Ureg*) p->sched.sp; memmove(cureg, ureg, sizeof(Ureg)); -- cgit v1.2.3