~kris/9p

9hist

bbd817e55da38e75d55b2a5f5bc3660e724a61b7 — David du Colombier 31 years ago 9f9c452
Plan 9 from Bell Labs 1995-01-05
8 files changed, 30 insertions(+), 22 deletions(-)

M pc/devfloppy.c
M pc/fns.h
M pc/kbd.c
M pc/mem.h
M pc/trap.c
M port/devproc.c
M port/proc.c
M port/sysproc.c
M pc/devfloppy.c => pc/devfloppy.c +1 -1
@@ 13,7 13,7 @@ typedef	struct Drive		Drive;
typedef	struct Controller	Controller;
typedef struct Type		Type;

#define DPRINT if(floppydebug)kprint
#define DPRINT if(floppydebug)print
int floppydebug;

/* bits in the registers */

M pc/fns.h => pc/fns.h +3 -1
@@ 97,7 97,7 @@ int	xchgw(ushort*, int);

#define	waserror()	(up->nerrlab++, setlabel(&up->errlab[up->nerrlab-1]))
#define	kmapperm(x)	kmap(x)
#define getcallerpc(x)	(*(ulong*)(x))
#define getcallerpc(x)	(((ulong*)(&x))[-1])
#define KADDR(a)	((void*)((ulong)(a)|KZERO))
#define PADDR(a)	((ulong)(a)&~KZERO)



@@ 123,3 123,5 @@ Block*	iallocb(int);
void*	ifroute(ulong);
ulong	ifunroute(ulong);
void	parseip(char*, char*);

#define	dcflush(a, b)

M pc/kbd.c => pc/kbd.c +1 -1
@@ 188,7 188,7 @@ mousecmd(int cmd)
		c = inb(Data);
	} while(c == 0xFE || c == 0);
	if(c != 0xFA){
		kprint("mouse returns %2.2ux to the %2.2ux command\n", c, cmd);
		print("mouse returns %2.2ux to the %2.2ux command\n", c, cmd);
		return -1;
	}
	return 0;

M pc/mem.h => pc/mem.h +1 -0
@@ 119,5 119,6 @@
 *  flag register bits that we care about
 */
#define IFLAG	0x200
#define IE	0x200

#define getpgcolor(a)	0

M pc/trap.c => pc/trap.c +5 -6
@@ 466,9 466,9 @@ syscall(Ureg *ur, void *arg)
	 */
	ur->ax = ret;

	splhi();
	if(up->scallnr == NOTED)
		noted(ur, *(ulong*)(sp+BY2WD));
	splhi();

	if(up->scallnr!=RFORK && (up->procctl || up->nnote))
		notify(ur);


@@ 556,7 556,7 @@ noted(Ureg *ur, ulong arg0)
	if(!up->notified) {
		qunlock(&up->debug);
		pprint("call to noted() when not notified\n");
		return;
		pexit("Suicide", 0);
	}
	up->notified = 0;



@@ 571,15 571,15 @@ noted(Ureg *ur, ulong arg0)

	nur->flags = (up->svflags&0xffffff00) | (nur->flags&0xff);
	memmove(ur, nur, sizeof(Ureg));
	qunlock(&up->debug);

	switch(arg0){
	case NCONT:
		if(!okaddr(nur->pc, 1, 0) || !okaddr(nur->usp, BY2WD, 0)){
			pprint("suicide: trap in noted\n");
			qunlock(&up->debug);
			pexit("Suicide", 0);
		}
		qunlock(&up->debug);
		return;
		break;

	default:
		pprint("unknown noted arg 0x%lux\n", arg0);


@@ 589,7 589,6 @@ noted(Ureg *ur, ulong arg0)
	case NDFLT:
		if(up->lastnote.flag == NDebug)
			pprint("suicide: %s\n", up->lastnote.msg);
		qunlock(&up->debug);
		pexit(up->lastnote.msg, up->lastnote.flag!=NDebug);
	}
}

M port/devproc.c => port/devproc.c +6 -4
@@ 812,11 812,13 @@ procctlmemio(Proc *p, ulong offset, int n, void *va, int read)

	k = kmap(pg);
	b = (char*)VA(k);
	b += offset&(BY2PG-1);
	if(read == 1)
		memmove(a, b+(offset&(BY2PG-1)), n);
	else
		memmove(b+(offset&(BY2PG-1)), a, n);

		memmove(a, b, n);
	else {
		memmove(b, a, n);
		dcflush(b, n);
	}
	kunmap(k);

	/* Ensure the process sees text page changes */

M port/proc.c => port/proc.c +13 -8
@@ 29,7 29,6 @@ typedef struct
	int	n;
} Schedq;

int	nrdy;
Schedq	runq;
int	priconst[NiceMax];



@@ 107,14 106,21 @@ sched(void)
int
anyready(void)
{
	return nrdy;
	return runq.n;
}

int
anyhigher(void)
{
	Proc *p;
	int pri;

	return nrdy;
	pri = up->pri;
	for(p=runq.head; p; p=p->rnext)
		if(p->pri < pri)
			if(p->wired == 0 || p->wired == m)
				return runq.n;
	return 0;
}

void


@@ 132,7 138,6 @@ ready(Proc *p)
		runq.head = p;
	runq.tail = p;
	runq.n++;
	nrdy++;
	p->state = Ready;
	unlock(&runq);
	splx(s);


@@ 200,7 205,6 @@ found:
	bp->rnext = 0;

	runq.n--;
	nrdy--;

	if(bp->state != Ready)
		print("runproc %s %d %s\n", bp->text, bp->pid, statename[bp->state]);


@@ 769,7 773,7 @@ procdump(void)
			print(" %d(%d)", p->pid, p->pri);
		print("\n");
	}
	print("nrdy %d\n", nrdy);
	print("nrdy %d\n", runq.n);
}

void


@@ 849,15 853,16 @@ procctl(Proc *p)
		state = p->psstate;
		p->psstate = "Stopped";
		/* free a waiting debugger */
		spllo();
		qlock(&p->debug);
		if(p->pdbg) {
			wakeup(&p->pdbg->sleep);
			p->pdbg = 0;
		}
		qunlock(&p->debug);
		splhi();
		p->state = Stopped;
		sched();		/* sched returns spllo() */
		splhi();
		p->psstate = state;
		return;
	}


@@ 964,7 969,7 @@ accounttime(void)
	pri = nrun;
	nrun = 0;

	pri = (nrdy+pri)*1000;
	pri = (runq.n+pri)*1000;
	m->load = (m->load*19+pri)/20;

	/*

M port/sysproc.c => port/sysproc.c +0 -1
@@ 397,7 397,6 @@ sysexec(ulong *arg)
	/*
	 *  '/' processes are higher priority (hack to make /ip more responsive).
	 */
	up->nice = NiceNormal;
	if(devchar[tc->type] == L'/') {
		up->nice = NiceRoot;
		up->pri = 0;