~kris/9p

9hist

f5d804c9da2b89ed0e4169bc76d3643ba1dee8eb — David du Colombier 31 years ago bbd817e
Plan 9 from Bell Labs 1995-01-06
7 files changed, 36 insertions(+), 29 deletions(-)

M pc/devastar.c
M port/auth.c
M port/devpipe.c
M port/devproc.c
M port/portdat.h
M port/proc.c
M port/sysproc.c
M pc/devastar.c => pc/devastar.c +3 -3
@@ 411,14 411,14 @@ astarreset(void)
		}

		/* defaults */
		if(a->mem == 0)
			a->mem = 0xD4000;
		if(a->irq == 0)
			a->irq = 15;
		a->id = i;

		if(getisa(a->mem, Pagesize, 0) == 0)
		a->mem = getisa(a->mem, Pagesize, Pagesize);
		if(a->mem == 0)
			panic("astarreset: %lux", a->mem);
		a->mem & ~KZERO;

		if(astarsetup(a) < 0){
			xfree(a);

M port/auth.c => port/auth.c +3 -1
@@ 124,8 124,10 @@ sysfsession(ulong *arg)
	unlock(c);

	/* back off if someone else is doing an fsession */
	while(!canlock(&s->send))
	while(!canlock(&s->send)) {
		up->yield = 1;
		sched();
	}

	if(s->valid == 0){
		/*

M port/devpipe.c => port/devpipe.c +2 -0
@@ 302,6 302,8 @@ pipewrite(Chan *c, void *va, long n, ulong offset)

	USED(offset);

	if((getstatus()&IE) == 0)
		print("pipewrite hi %lux\n", getcallerpc(c));
	if(waserror()) {
		/* avoid notes when pipe is a mounted queue */
		if((c->flag & CMSG) == 0)

M port/devproc.c => port/devproc.c +1 -3
@@ 815,10 815,8 @@ procctlmemio(Proc *p, ulong offset, int n, void *va, int read)
	b += offset&(BY2PG-1);
	if(read == 1)
		memmove(a, b, n);
	else {
	else
		memmove(b, a, n);
		dcflush(b, n);
	}
	kunmap(k);

	/* Ensure the process sees text page changes */

M port/portdat.h => port/portdat.h +2 -1
@@ 586,7 586,8 @@ struct Proc

	Mach	*wired;		/* machine this process must run on */
	int	pri;		/* scheduling priority - low is high priority */
	int	nice;		/* time-passing algorithm - low is high priority */
	short	nice;		/* time-passing algorithm - low is high priority */
	short	yield;		/* force one lap in the runq */	

	void	*ureg;		/* User registers for notes */
	void	*dbgreg;	/* User registers for devproc */

M port/proc.c => port/proc.c +15 -17
@@ 119,7 119,7 @@ anyhigher(void)
	for(p=runq.head; p; p=p->rnext)
		if(p->pri < pri)
			if(p->wired == 0 || p->wired == m)
				return runq.n;
				return 1;
	return 0;
}



@@ 152,18 152,12 @@ loop:
	spllo();

	/* look for potential proc while not locked */
	for(p=runq.head; p; p=p->rnext) {
	for(p = runq.head; p; p=p->rnext) {
		/*
		 *  state is not saved
		 *  state is not saved or wired to another machine
		 */
		if(p->mach)
			continue;
		/*
		 *  wired to another machine
		 */
		if(p->wired && p->wired != m)
			continue;
		break;
		if(!(p->mach || (p->wired && p->wired != m)))
			break;
	}
	if(p == 0)
		goto loop;


@@ 173,12 167,14 @@ loop:

	/* find best proc while locked */
	bp = 0;
	for(p=runq.head; p; p=p->rnext) {
		if(p->mach)
			continue;
		if(p->wired && p->wired != m)
	for(p = runq.head; p; p=p->rnext) {
		if(p->mach || (p->wired && p->wired != m))
			continue;
		if(bp == 0 || p->pri < bp->pri)
		if(bp == 0) {
			p->yield = 0;
			bp = p;
		} else
		if(p->yield == 0 && p->pri < bp->pri)
			bp = p;
	}
	if(bp == 0) {


@@ 368,8 364,10 @@ sleep(Rendez *r, int (*f)(void*), void *arg)
	int s;

	sleep1(r, f, arg);
	if(up->notepending == 0)
	if(up->notepending == 0) {
		up->yield = 1;
		sched();	/* notepending may go true while asleep */
	}

	if(up->notepending) {
		up->notepending = 0;

M port/sysproc.c => port/sysproc.c +10 -4
@@ 462,11 462,17 @@ return0(void *a)
long
syssleep(ulong *arg)
{
	if(arg[0] == 0)
		sched();
	else
		tsleep(&up->sleep, return0, 0, arg[0]);
	int n;

	n = arg[0];
	if(n == 0) {
		up->yield = 1;
		sched();
		return 0;
	} 
	if(MS2TK(n) == 0)
		n = TK2MS(1);
	tsleep(&up->sleep, return0, 0, n);
	return 0;
}