From 2768d03bd961bb6767231a035c1373381212827a Mon Sep 17 00:00:00 2001 From: David du Colombier <0intro@gmail.com> Date: Mon, 8 Aug 1994 00:00:00 +0000 Subject: [PATCH] Plan 9 from Bell Labs 1994-08-08 --- carrera/mmu.c | 2 -- port/portdat.h | 3 ++- port/proc.c | 12 +++++------- port/sysproc.c | 6 ++++-- port/taslock.c | 11 ++--------- 5 files changed, 13 insertions(+), 21 deletions(-) diff --git a/carrera/mmu.c b/carrera/mmu.c index 7643eaba7055e79093f36009369543500c417479..38171bfe0d64268df48bf22c439a4e57f02cb22c 100644 --- a/carrera/mmu.c +++ b/carrera/mmu.c @@ -47,13 +47,11 @@ kmapinit(void) { KMap *k, *klast; - lock(&kmaplock); kmapfree = kpte; klast = &kpte[KPTESIZE-1]; for(k=kpte; knext = k+1; k->next = 0; - unlock(&kmaplock); m->ktlbnext = TLBROFF; } diff --git a/port/portdat.h b/port/portdat.h index d321e7e967e10fbdc64b5d300ddf86109ab843fa..f90d55f7df1116f1ba5dbe209db7261098d50eec 100644 --- a/port/portdat.h +++ b/port/portdat.h @@ -577,7 +577,8 @@ struct Proc int (*notify)(void*, char*); Mach *mp; /* machine this process last ran on */ - ulong priority; /* priority level 0 is highest */ + ulong priority; /* priority level */ + ulong basepri; /* base priority level */ ulong movetime; /* last time process switched processors */ void *ureg; /* User registers for notes */ diff --git a/port/proc.c b/port/proc.c index 2007eaab5f707aacb61821d517f71c503e87f1af..e1bd3349f4e7231fc15d12f8947949b589337d26 100644 --- a/port/proc.c +++ b/port/proc.c @@ -119,13 +119,11 @@ ready(Proc *p) s = splhi(); - if(p->priority != 0){ - if(p->state == Running){ - if(p->priority < Nrq-1) - p->priority++; - } else - p->priority = 1; - } + if(p->state == Running){ + if(p->priority < Nrq-1) + p->priority++; + } else + p->priority = p->basepri; rq = &runq[p->priority]; lock(runq); diff --git a/port/sysproc.c b/port/sysproc.c index 46727502bc65b407d57fbb4c442f6e818a17067e..105291abc2f03105198e70f134d6663f936f4245 100644 --- a/port/sysproc.c +++ b/port/sysproc.c @@ -166,6 +166,7 @@ sysrfork(ulong *arg) */ flushmmu(); p->priority = up->priority; + p->basepri = up->basepri; p->mp = up->mp; ready(p); return pid; @@ -386,9 +387,10 @@ sysexec(ulong *arg) * '/' processes are high priority (hack to make /ip more responsive) */ if(devchar[tc->type] == L'/') - up->priority = 0; + up->basepri = 0; else - up->priority = 1; + up->basepri = 1; + up->priority = up->basepri; close(tc); /* diff --git a/port/taslock.c b/port/taslock.c index 5cb45191e1d1305e15ef20e3f25637d739d97e70..0e1bd45d6d83eb749e8f3f975e403f603323e2ef 100644 --- a/port/taslock.c +++ b/port/taslock.c @@ -8,19 +8,12 @@ void lock(Lock *l) { - int loop; - if(tas(&l->key) == 0) return; - loop = 50000000; for(;;){ - while(l->key) { - if(loop-- <= 0) { - dumpstack(); - panic("lock loop: lock %lux\n", l); - } - } + while(l->key) + ; if(tas(&l->key) == 0) return; }