~kris/9p

9hist

e6c2023d2b8b11f387b8a750d4e06e318710e66e — David du Colombier 32 years ago 1b82f96
Plan 9 from Bell Labs 1994-03-25
7 files changed, 32 insertions(+), 22 deletions(-)

M carrera/dat.h
M carrera/fns.h
M port/devmouse.c
M port/portdat.h
M port/portfns.h
M port/proc.c
M port/qlock.c
M carrera/dat.h => carrera/dat.h +11 -4
@@ 87,6 87,13 @@ struct Notsave

#define NCALLBACK	32

typedef struct Callbk Callbk;
struct Callbk
{
	void	(*func)(void*);
	void*	arg;
};

/* First FOUR members offsets known by l.s */
struct Mach
{


@@ 114,10 121,10 @@ struct Mach
	Schedq	hiq;
	Schedq	loq;

	void	(**cbin)(void);
	void	(**cbout)(void);
	void	(**cbend)(void);
	void	(*calls[NCALLBACK])(void);
	Callbk*	cbin;
	Callbk*	cbout;
	Callbk*	cbend;
	Callbk	calls[NCALLBACK];

	int	pfault;
	int	cs;

M carrera/fns.h => carrera/fns.h +1 -1
@@ 122,7 122,7 @@ void	hnputs(void*, ushort v);
ulong	nhgetl(void*);
ushort	nhgets(void*);

void	ifwrite(void*, Block*);
void	ifwrite(void*, Block*, int);
void*	ifinit(int);
void	ifjab(void);
ulong	ifaddr(void*);

M port/devmouse.c => port/devmouse.c +1 -0
@@ 313,6 313,7 @@ mousewrite(Chan *c, void *va, long n, ulong offset)
	Point pt;
	char buf[64];

	USED(offset);
	p = va;
	switch(c->qid.path){
	case CHDIR:

M port/portdat.h => port/portdat.h +1 -1
@@ 580,7 580,7 @@ struct Proc
	/* statistics */
	ulong	counter[Pcounter];	/* specialized per process counters */
	ulong	syscall[NSYSCALL];

ulong qpc;
	/*
	 *  machine specific MMU
	 */

M port/portfns.h => port/portfns.h +1 -1
@@ 16,7 16,7 @@ void		buzz(int, int);
void		cachedel(Image*, ulong);
void		cachepage(Page*, Image*);
void		callbacks(void);
int		newcallback(void (*)(void));
void		newcallback(void (*)(void*), void*);
int		cangetc(void*);
int		canlock(Lock*);
int		canpage(Proc*);

M port/proc.c => port/proc.c +15 -14
@@ 107,29 107,30 @@ anyready(void)
	return m->hiq.head != 0 || m->loq.head != 0;
}

int
newcallback(void (*func)(void))
void
newcallback(void (*func)(void*), void *a)
{
	*m->cbin = func;
	Callbk *c;

	c = m->cbin;
	if(++m->cbin >= m->cbend)
		m->cbin = m->calls;

	if(m->hiq.head == 0 && m->loq.head == 0)
		return 1;

	return 0;
	c->func = func;
	c->arg = a;
}

void
callbacks(void)
{
	void (*func)(void);
	Callbk *c;

	while(m->cbin != m->cbout) {
		func = *m->cbout;
		c = m->cbout;
		if(++m->cbout >= m->cbend)
			m->cbout = m->calls;
		func();

		c->func(c->arg);
	}
}



@@ 710,9 711,9 @@ procdump(void)
		s = p->psstate;
		if(s == 0)
			s = "kproc";
		print("%3d:%10s pc %8lux %8s (%s) ut %ld st %ld bss %lux\n",
		print("%3d:%10s pc %8lux %8s (%s) q %lux ut %ld st %ld bss %lux\n",
			p->pid, p->text, p->pc,  s, statename[p->state],
			p->time[0], p->time[1], bss);
			p->qpc, p->time[0], p->time[1], bss);
	}
}



@@ 843,7 844,7 @@ killbig(void)
		if(p->state == Dead || p->kp)
			continue;
		l = 0;
		for(i=1; i<NSEG; i++){
		for(i=1; i<NSEG; i++) {
			s = p->seg[i];
			if(s)
				l += s->top - s->base;


@@ 853,7 854,7 @@ killbig(void)
			max = l;
		}
	}
	print("%d: %s killed because no swap configured", kp->pid, kp->text);
	print("%d: %s killed because no swap configured\n", kp->pid, kp->text);
	kp->procctl = Proc_exitme;
	postnote(kp, 1, "killed: proc too big", NExit);
}

M port/qlock.c => port/qlock.c +2 -1
@@ 10,7 10,7 @@ qlock(QLock *q)
{
	Proc *p, *mp;

if(up==0) { iprint("QLOCK at ilevel PC=%lux\n", getcallerpc(0)); for(;;); }
up->qpc =  getcallerpc(0);

	lock(&q->use);
	if(!q->locked) {


@@ 34,6 34,7 @@ if(up==0) { iprint("QLOCK at ilevel PC=%lux\n", getcallerpc(0)); for(;;); }
int
canqlock(QLock *q)
{
up->qpc =  getcallerpc(0);
	if(!canlock(&q->use))
		return 0;
	if(q->locked){