From f03ce73820cb2fc346aec604d2e1391b4be561c2 Mon Sep 17 00:00:00 2001 From: David du Colombier <0intro@gmail.com> Date: Wed, 26 Feb 2003 00:00:00 +0000 Subject: [PATCH] Plan 9 from Bell Labs 2003-02-26 --- pc/vgas3.c | 8 ++++++++ pc/vgasavage.c | 9 ++++++--- port/devproc.c | 10 ---------- port/portclock.c | 18 ++++++++++++++++-- port/proc.c | 3 +-- 5 files changed, 31 insertions(+), 17 deletions(-) diff --git a/pc/vgas3.c b/pc/vgas3.c index 8436b9e5972f263c3978b3c28b41e8cc79311d3c..dc2d6b5d3521bad0535caa5b41a87abe1bc84433 100644 --- a/pc/vgas3.c +++ b/pc/vgas3.c @@ -18,6 +18,8 @@ enum { SAVAGE3D = 0x8A20, /* PCI DID */ SAVAGE3DMV = 0x8A21, SAVAGE4 = 0x8A22, + PROSAVAGEP = 0x8A25, + PROSAVAGEK = 0x8A26, SAVAGEMXMV = 0x8C10, SAVAGEMX = 0x8C11, SAVAGEIXMV = 0x8C12, @@ -127,6 +129,8 @@ s3linear(VGAscr* scr, int* size, int* align) id = (vgaxi(Crtx, 0x2D)<<8)|vgaxi(Crtx, 0x2E); switch(id){ /* find mmio */ case SAVAGE4: + case PROSAVAGEP: + case PROSAVAGEK: case SUPERSAVAGEIXC16: /* * We could assume that the MMIO registers @@ -227,6 +231,8 @@ s3load(VGAscr* scr, Cursor* curs) case SAVAGEMXMV: case SAVAGEIXMV: case SAVAGE4: + case PROSAVAGEP: + case PROSAVAGEK: case SUPERSAVAGEIXC16: dolock = 0; p += scr->storage; @@ -577,6 +583,8 @@ s3drawinit(VGAscr *scr) break; case SUPERSAVAGEIXC16: case SAVAGE4: + case PROSAVAGEP: + case PROSAVAGEK: /* scr->mmio is set by s3linear */ savageinit(scr); break; diff --git a/pc/vgasavage.c b/pc/vgasavage.c index b2a183cfe8e722488ebe300d55aeb0231575a0ec..ceffbb9cc4a630839aa08598a213ba6621dab133 100644 --- a/pc/vgasavage.c +++ b/pc/vgasavage.c @@ -18,7 +18,8 @@ enum { SAVAGE3D = 0x8A20, /* PCI DID */ SAVAGE3DMV = 0x8A21, SAVAGE4 = 0x8A22, - SAVAGE4A = 0x8A26, + PROSAVAGEP = 0x8A25, + PROSAVAGEK = 0x8A26, SAVAGEMXMV = 0x8C10, SAVAGEMX = 0x8C11, SAVAGEIXMV = 0x8C12, @@ -363,7 +364,8 @@ savagewaitidle(VGAscr *scr) switch(scr->id){ case SAVAGE4: - case SAVAGE4A: + case PROSAVAGEP: + case PROSAVAGEK: /* wait for engine idle and FIFO empty */ statw = (ulong*)((uchar*)scr->mmio+AltStatus0); mask = CBEMask | Ge2Idle; @@ -492,7 +494,8 @@ savageinit(VGAscr *scr) /* if you add chip IDs here be sure to update savagewaitidle */ switch(scr->id){ case SAVAGE4: - case SAVAGE4A: + case PROSAVAGEP: + case PROSAVAGEK: case SAVAGEIXMV: case SUPERSAVAGEIXC16: case SAVAGEMXMV: diff --git a/port/devproc.c b/port/devproc.c index 22481649b6e993b621ebe0c3b4474d2fd867c2bd..124d3be2be78388c8ca1ade7700020a577fe13a0 100644 --- a/port/devproc.c +++ b/port/devproc.c @@ -1197,16 +1197,6 @@ procctlreq(Proc *p, char *va, int n) case CMwired: procwired(p, atoi(cb->f[1])); break; - case CMfair: - if(!iseve()) - error(Eperm); - unfair = 0; - break; - case CMunfair: - if(!iseve()) - error(Eperm); - unfair = 1; - break; } poperror(); diff --git a/port/portclock.c b/port/portclock.c index 6fc0b060bc4caf3fdba6e1a7253d0e7560095b6a..9da9eeda5c3c9f56bd07d0bb318f2cdf617dc4a7 100644 --- a/port/portclock.c +++ b/port/portclock.c @@ -95,6 +95,8 @@ timerdel(Timer *dt) void hzclock(Ureg *ur) { + int callsched; + m->ticks++; if(m->proc) m->proc->pc = ur->pc; @@ -124,8 +126,20 @@ hzclock(Ureg *ur) if(up == 0 || up->state != Running) return; - /* i.e. don't deschedule an EDF process here! */ - if(anyready() && !edf->isedf(up)){ + if(up->fixedpri){ + /* fixed priority processes are only preempted by + * higher piority processes. + */ + if(anyhigher()) + callsched = 1; + } else { + /* floating priority processes are are preempted + * by all sorts of things. + */ + if(anyready() && !edf->isedf(up)) + callsched = 1; + } + if(callsched){ sched(); splhi(); } diff --git a/port/proc.c b/port/proc.c index 8d999a68590729d5d7802be1f3ba305dacd36ef2..27e3322a5b776311f66119c488e0685957375393 100644 --- a/port/proc.c +++ b/port/proc.c @@ -9,7 +9,6 @@ int nrdy; Ref noteidalloc; long delayedscheds; /* statistics */ -int unfair; /* unfair scheduling */ static Ref pidalloc; @@ -229,7 +228,7 @@ loop: */ spllo(); for(;;){ - if(!unfair && (++(m->fairness) & 0x3) == 0){ + if((++(m->fairness) & 0x3) == 0){ /* * once in a while, run process that's been waiting longest * regardless of movetime