~kris/9p

9hist

2dbff7551b815536e88352d0af6836ce32831c55 — David du Colombier 29 years ago dffe599
Plan 9 from Bell Labs 1997-02-20
8 files changed, 20 insertions(+), 18 deletions(-)

M carrera/fns.h
M pc/fns.h
M port/devmnt.c
M port/portdat.h
M port/portfns.h
M port/proc.c
M port/taslock.c
M power/fns.h
M carrera/fns.h => carrera/fns.h +1 -0
@@ 142,3 142,4 @@ void*	ifroute(ulong);
ulong	ifunroute(ulong);
void	parseip(char*, char*);
void	mpegintr(void);
#define coherence()

M pc/fns.h => pc/fns.h +1 -0
@@ 129,3 129,4 @@ ulong	ifunroute(ulong);
void	parseip(char*, char*);

#define	dcflush(a, b)
#define coherence()

M port/devmnt.c => port/devmnt.c +3 -13
@@ 768,19 768,9 @@ mntgate(Mnt *m)
	lock(m);
	m->rip = 0;
	for(q = m->queue; q; q = q->list) {
		if(q->done == 0) {
			x = splhi();	/* because sleep also does */
			lock(&q->r);
			if(q->r.p) {
				unlock(&q->r);
				splx(x);
				unlock(m);
				wakeup(&q->r);
				return;
			}
			unlock(&q->r);
			splx(x);
		}
		if(q->done == 0)
		if(wakeup(&q->r))
			break;
	}
	unlock(m);
}

M port/portdat.h => port/portdat.h +0 -1
@@ 50,7 50,6 @@ struct Ref

struct Rendez
{
	Lock;
	Proc	*p;
};


M port/portfns.h => port/portfns.h +1 -1
@@ 286,7 286,7 @@ long		userwrite(char*, int);
void		validaddr(ulong, ulong, int);
void		vcacheinval(Page*, ulong);
void*		vmemchr(void*, int, int);
void		wakeup(Rendez*);
int		wakeup(Rendez*);
Chan*		walk(Chan*, char*, int);
void		wlock(RWlock*);
void		wunlock(RWlock*);

M port/proc.c => port/proc.c +11 -3
@@ 390,6 390,8 @@ sleep1(Rendez *r, int (*f)(void*), void *arg)
	}
	r->p = up;

	coherence();	/* force memory state to reflect processor state */

	/*
	 * if condition happened, never mind
	 */


@@ 477,15 479,18 @@ tsleep(Rendez *r, int (*fn)(void*), void *arg, int ms)
/*
 * Expects that only one process can call wakeup for any given Rendez
 */
void
int
wakeup(Rendez *r)
{
	Proc *p;
	int s;
	int s, rv;

	coherence();	/* force memory state to reflect processor state */

	rv = 0;
	p = r->p;
	if(p == 0)
		return;
		return rv;

	s = splhi();
	lock(&p->rlock);


@@ 496,10 501,13 @@ wakeup(Rendez *r)
			panic("wakeup: state");
		p->r = 0;
		ready(p);
		rv = 1;
	}

	unlock(&p->rlock);
	splx(s);

	return rv;
}

int

M port/taslock.c => port/taslock.c +2 -0
@@ 96,6 96,7 @@ unlock(Lock *l)
{
	l->key = 0;
	l->pc = 0;
	coherence();
}

void


@@ 107,4 108,5 @@ iunlock(Lock *l)
	l->key = 0;
	l->pc = 0;
	splx(sr);
	coherence();
}

M power/fns.h => power/fns.h +1 -0
@@ 84,3 84,4 @@ void	wbflush(void);
Page*	lkpage(Segment*, ulong);
void	lkpgfree(Page*);
#define vcacheinval(s)
#define coherence()