~kris/9p

9hist

16c2bd6d14bab9dea7d12a7db27524c85f1a2671 — David du Colombier 31 years ago 4f9e39d
Plan 9 from Bell Labs 1995-01-09
6 files changed, 37 insertions(+), 36 deletions(-)

M carrera/clock.c
M carrera/trap.c
M pc/clock.c
M port/proc.c
M port/taslock.c
M power/clock.c
M carrera/clock.c => carrera/clock.c +2 -7
@@ 78,13 78,8 @@ clock(Ureg *ur)
	if(up == 0 || up->state != Running)
		return;

	if(anyready()) {
		n = up->inlock;
		if(n == 0)
			sched();
		else
			up->inlock = n-1;
	}
	if(anyready() && !up->inlock)
		sched();

	/* user profiling clock */
	if(ur->status & KUSER)

M carrera/trap.c => carrera/trap.c +1 -1
@@ 397,7 397,7 @@ intr(Ureg *ur)
	}

	/* preemptive scheduling */
	if(up && up->state == Running && anyhigher() && up->inlock == 0)
	if(up && up->state == Running && anyhigher() && !up->inlock)
		sched();
}


M pc/clock.c => pc/clock.c +1 -1
@@ 45,7 45,7 @@ clock(Ureg *ur, void *arg)
	uartclock();

	if(up && up->state == Running){
		if(anyready())
		if(anyready() && !up->inlock)
			sched();
	
		/* user profiling clock */

M port/proc.c => port/proc.c +10 -4
@@ 115,7 115,6 @@ anyhigher(void)
	Proc *p;
	int pri;

	return runq.n;
	pri = up->pri;
	for(p=runq.head; p; p=p->rnext)
		if(p->pri <= pri)


@@ 961,6 960,13 @@ accounttime(void)
		p->pri += priconst[p->nice];
	}

	if(up) {
		i = up->inlock-1;
		if(i < 0)
			i = 0;
		up->inlock = i;
	}

	/* only one processor gets to compute system load averages */
	if(m->machno != 0)
		return;


@@ 974,8 980,8 @@ accounttime(void)

	/*
	 * decay per-process cpu usage
	 *	pri = (7/8)*pri twice per second
	 *	tc = (7/8)^2/(1-(7/8)^2) = 3.27 sec
	 *	pri = (3/4)*pri twice per second
	 *	tc = (3/4)^2/(1-(3/4)^2) = 1.286 sec
	 */
	m0ticks--;
	if(m0ticks <= 0) {


@@ 984,7 990,7 @@ accounttime(void)
		for(i=conf.nproc-1; i!=0; i--,p++)
			if(p->state != Dead) {
				pri = p->pri;
				pri -= pri >> 3;
				pri -= pri >> 2;
				p->pri = pri;
			}
	}

M port/taslock.c => port/taslock.c +22 -22
@@ 38,33 38,23 @@ lock(Lock *l)
	}
}

void
ilock(Lock *l)
int
canlock(Lock *l)
{
	ulong x;

	x = splhi();
	if(tas(&l->key) == 0){
		l->sr = x;
		return;
	}
	int n;

	for(;;){
		while(l->key)
			;
		if(tas(&l->key) == 0){
			l->sr = x;
			return;
	if(up) {
		n = up->inlock;
		up->inlock = n+2;
		if(tas(&l->key)) {
			up->inlock = n;
			return 0;
		}
		return 1;
	}
}

int
canlock(Lock *l)
{
	if(tas(&l->key))
		return 0;

	return 1;
}



@@ 73,13 63,23 @@ unlock(Lock *l)
{
	int n;

	l->key = 0;
	if(up) {
		n = up->inlock-2;
		if(n < 0)
			n = 0;
		up->inlock = n;
	}
	l->key = 0;
}

void
ilock(Lock *l)
{
	ulong sr;

	sr = splhi();
	lock(l);
	l->sr = sr;
}

void


@@ 88,6 88,6 @@ iunlock(Lock *l)
	ulong sr;

	sr = l->sr;
	l->key = 0;
	unlock(l);
	splx(sr);
}

M power/clock.c => power/clock.c +1 -1
@@ 103,7 103,7 @@ clock(Ureg *ur)
	if(up == 0 || (ur->status&IEP) == 0 || up->state != Running)
		return;

	if(anyready())
	if(anyready() && !up->inlock)
		sched();

	/* user profiling clock */