~kris/9p

9hist

fc05fe1582e53e114a5fd41bd80f043e472670b8 — David du Colombier 34 years ago e58ecd7
Plan 9 from Bell Labs 1991-10-02
4 files changed, 30 insertions(+), 29 deletions(-)

M pc/vga.c
M port/devlance.c
M port/portdat.h
M port/qlock.c
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);
}