M pc/vga.c => pc/vga.c +1 -1
@@ 159,7 159,7 @@ vga1(void)
crout(Cmode, 0xe3); /* turn off address wrap &
* word mode */
crout(Cmsl, 0x40); /* 1 pixel per scan line */
- crout(Cvertend, MAXY); /* 480 lne display */
+ crout(Cvertend, MAXY-1); /* 480 lne display */
srout(Smode, 0x06); /* extended memory,
* odd/even off */
srout(Sclock, 0x01); /* 8 bits/char */
M port/devlance.c => port/devlance.c +0 -2
@@ 241,8 241,6 @@ lancestclose(Queue *q)
}
/*
- * assume the q is locked external to this routine
- *
* the ``connect'' control message specifyies the type
*/
Proc *lanceout;
M port/portdat.h => port/portdat.h +2 -2
@@ 53,10 53,10 @@ struct Rendez
struct QLock
{
+ Lock use; /* to use object */
Proc *head; /* next process waiting for object */
Proc *tail; /* last process waiting for object */
- Lock use; /* to use object */
- Lock queue; /* to access list */
+ int locked; /* flag */
};
struct Alarm
M port/qlock.c => port/qlock.c +27 -24
@@ 8,34 8,38 @@
void
qlock(QLock *q)
{
- Proc *p;
+ Proc *p, *mp;
- if(canlock(&q->use))
- return;
- lock(&q->queue);
- if(canlock(&q->use)){
- unlock(&q->queue);
+ lock(&q->use);
+ if(!q->locked) {
+ q->locked = 1;
+ unlock(&q->use);
return;
}
- if(u == 0)
- panic("qlock");
p = q->tail;
+ mp = u->p;
if(p == 0)
- q->head = u->p;
+ q->head = mp;
else
- p->qnext = u->p;
- q->tail = u->p;
- u->p->qnext = 0;
- u->p->state = Queueing;
-/* u->p->qlock = q; /* DEBUG */
- unlock(&q->queue);
+ p->qnext = mp;
+ q->tail = mp;
+ mp->qnext = 0;
+ mp->state = Queueing;
+ unlock(&q->use);
sched();
}
int
canqlock(QLock *q)
{
- return canlock(&q->use);
+ lock(&q->use);
+ if(q->locked) {
+ unlock(&q->use);
+ return 0;
+ }
+ q->locked = 1;
+ unlock(&q->use);
+ return 1;
}
void
@@ 43,17 47,16 @@ qunlock(QLock *q)
{
Proc *p;
- lock(&q->queue);
-/* u->p->qlock = 0; /* DEBUG */
- if(q->head){
- p = q->head;
+ lock(&q->use);
+ p = q->head;
+ if(p) {
q->head = p->qnext;
if(q->head == 0)
q->tail = 0;
- unlock(&q->queue);
- ready(p);
- }else{
unlock(&q->use);
- unlock(&q->queue);
+ ready(p);
+ return;
}
+ q->locked = 0;
+ unlock(&q->use);
}