M carrera/screen.c => carrera/screen.c +3 -0
@@ 586,6 586,7 @@ cursoron(int dolock)
{
Dac *d;
Point p;
+ int s;
p = mousexy();
@@ 593,6 594,7 @@ cursoron(int dolock)
if(dolock)
lock(&cursor);
+ s = splhi();
p.x += 296; /* adjusted by experiment */
p.y += 9; /* adjusted by experiment */
@@ 603,6 605,7 @@ cursoron(int dolock)
d->cr2 = p.y&0xFF;
d->cr2 = (p.y>>8)&0xF;
+ splx(s);
if(dolock)
unlock(&cursor);
return 0;
M port/proc.c => port/proc.c +9 -7
@@ 30,7 30,6 @@ typedef struct
} Schedq;
int nrdy;
-int lastreadied;
Schedq runq[Nrq];
char *statename[] =
@@ 122,11 121,16 @@ anyready(void)
int
anyhigher(void)
{
- int x;
+ Schedq *rq;
+
+ if(nrdy == 0)
+ return 0;
- x = lastreadied;
- lastreadied = 0;
- return nrdy && x >= up->priority;
+ for(rq = &runq[Nrq-1]; rq > &runq[up->priority]; rq--)
+ if(rq->head != nil)
+ return 1;
+
+ return 0;
}
enum
@@ 177,8 181,6 @@ ready(Proc *p)
nrdy++;
p->readytime = m->ticks;
p->state = Ready;
- if(p->priority > lastreadied)
- lastreadied = p->priority;
unlock(runq);
splx(s);
}