~kris/9p

9hist

bf675d7062050f74703ce11165847a8bd3bb86f6 — David du Colombier 34 years ago 998da1e
Plan 9 from Bell Labs 1992-07-01
5 files changed, 40 insertions(+), 27 deletions(-)

M gnot/devhifi.c
M gnot/devisdn.c
M gnot/trap.c
M port/alarm.c
M port/proc.c
M gnot/devhifi.c => gnot/devhifi.c +7 -4
@@ 15,7 15,7 @@

#define DPRINT 	if(hifidebug)kprint

#define	BSIZE	4096
#define	BSIZE	4000

typedef struct Hifichan
{


@@ 433,9 433,9 @@ Top:
	for(;;){
		qlock(hp);
		while(hp->ri != hp->wi){
			if(hp->rq)
				PUTNEXT(hp->rq, hp->inb[hp->ri]);
			else
			if(hp->rq){
				FLOWCTL(hp->rq, hp->inb[hp->ri]);
			}else
				freeb(hp->inb[hp->ri]);
			if(hp->renable)
				hp->inb[hp->ri] = allocb(BSIZE);


@@ 583,6 583,7 @@ Loop:
		if(n > m){
			hp->toolong++;
			bp->wptr = bp->base;
			bp->rptr = bp->base;
			SET(hifi->opreg, hp->opreg | Rres);
			return wake;
		}


@@ 613,6 614,7 @@ Loop:
					hp->badcount++;
			}
			bp->wptr = bp->base;
			bp->rptr = bp->base;
		}else
			bp->wptr = p;
	}else{


@@ 627,6 629,7 @@ Loop:
			i = NEXT(hp->wi);
			if(i == hp->ri){
				bp->wptr = bp->base;
				bp->rptr = bp->base;
				return wake;
			}else{
				bp->flags |= S_DELIM;

M gnot/devisdn.c => gnot/devisdn.c +9 -9
@@ 15,7 15,7 @@

#define DPRINT 	if(isdndebug)kprint

#define	BSIZE	260
#define	BSIZE	200	/* should be 260, but for xalloc */

Isdn *	isdndev;
Isdn *	isdndevN;


@@ 412,7 412,7 @@ isdnkproc(void *arg)
	Isdn *ip = (Isdn *)arg;
	int i;

	if (waserror()) {
	if(waserror()){
		devctl(ip, Enr, 0);
		ip->kstart = 0;
		wakeup(&ip->kctlr);


@@ 421,7 421,7 @@ isdnkproc(void *arg)
	/*
	 *  create a number of blocks for input
	 */
	for (i=0; i<NB; i++)
	for(i=0; i<NB; i++)
		if (!ip->inb[i])
			ip->inb[i] = allocb(BSIZE);
	ip->ri = 0;


@@ 429,19 429,19 @@ isdnkproc(void *arg)
	devctl(ip, 0, Enr);
	ip->kstart = 1;
	wakeup(&ip->kctlr);
	for (;;) {
	for(;;){
		qlock(ip);
		if (!ip->rq) {
		if (!ip->rq){
			qunlock(ip);
			break;
		}
		while (ip->ri != ip->wi) {
			PUTNEXT(ip->rq, ip->inb[ip->ri]);
		while (ip->ri != ip->wi){
			FLOWCTL(ip->rq, ip->inb[ip->ri]);
			ip->inb[ip->ri] = allocb(BSIZE);
			ip->ri = NEXT(ip->ri);
		}
		i = 0;
		while (ip->so != ip->ro) {
		while(ip->so != ip->ro){
			freeb(ip->outb[ip->so]);
			ip->so = NEXT(ip->so);
			i++;


@@ 453,7 453,7 @@ isdnkproc(void *arg)
	}
	devctl(ip, Enr, 0);
	sleep(&ip->kr, tEmpty, ip);
	while (ip->so != ip->ro) {
	while(ip->so != ip->ro){
		freeb(ip->outb[ip->so]);
		ip->so = NEXT(ip->so);
	}

M gnot/trap.c => gnot/trap.c +1 -1
@@ 322,7 322,7 @@ syscall(Ureg *aur)
		if(sp<(USTKTOP-BY2PG) || sp>(USTKTOP-sizeof(Sargs)))
			validaddr(sp, sizeof(Sargs), 0);

		u->s = *((Sargs*)(sp+BY2WD));
		u->s = *((Sargs*)(sp+1*BY2WD));
		u->p->psstate = sysctab[u->scallnr];

		ret = (*systab[u->scallnr])(u->s.args);

M port/alarm.c => port/alarm.c +5 -4
@@ 12,10 12,9 @@ Talarm	talarm;
void
alarmkproc(void *arg)
{
	int i, n;
	ulong now;
	Proc *rp;
	int s;
	ulong now;
	int i, n, s;

	USED(arg);



@@ 67,12 66,14 @@ checkalarms(void)

		if(p->twhen == 0) {
			talarm.list = p->tlink;
			p->trend = 0;
			continue;
		}
		if(now < p->twhen)
			break;
		talarm.list = p->tlink;
		wakeup(p->trend);
		talarm.list = p->tlink;
		p->trend = 0;
	}

	unlock(&talarm);

M port/proc.c => port/proc.c +18 -9
@@ 326,26 326,35 @@ void
tsleep(Rendez *r, int (*fn)(void*), void *arg, int ms)
{
	ulong when;
	Proc *p, *f, **l, **i;
	Proc *p, *f, **l;

	p = u->p;
	when = MS2TK(ms)+MACHP(0)->ticks;
	i = &talarm.list;

	lock(&talarm);
	/* take out of list if checkalarm didn't */
	if(p->trend) {
		l = &talarm.list;
		for(f = *l; f; f = f->tlink) {
			if(f == p) {
				*l = p->tlink;
				break;
			}
			l = &f->tlink;
		}
	}
	/* insert in increasing time order */
	l = &talarm.list;
	for(f = talarm.list; f; f = f->tlink) {
		if(f == p)
			*l = p->tlink;
		if(f->twhen && f->twhen < when)
			i = &f->tlink;
	for(f = *l; f; f = f->tlink) {
		if(f->twhen >= when)
			break;
		l = &f->tlink;
	}
	p->trend = r;
	p->twhen = when;
	p->tlink = *i;
	p->tfn = fn;
	*i = p;
	p->tlink = *l;
	*l = p;
	unlock(&talarm);

	sleep(r, tfn, arg);