~kris/9p

9hist

ea0fbf112196ff58ed183e5a4ee08c372ac5ac66 — David du Colombier 25 years ago f07c80a
Plan 9 from Bell Labs 2001-08-03
6 files changed, 68 insertions(+), 45 deletions(-)

M alphapc/trap.c
M pc/sdata.c
M port/chan.c
M port/devdup.c
M port/devproc.c
M port/portfns.h
M alphapc/trap.c => alphapc/trap.c +7 -2
@@ 157,7 157,7 @@ smcheck(ulong code)
}

void
mcheck(void *x)
mcheck(Ureg *ur, void *x)
{
	Mcheck *m;
	uvlong *data;


@@ 173,6 173,11 @@ mcheck(void *x)
		if (col++ == 2)
			col = 0;
	}
	if(col != 2)
		print("\n");
	print("\n");
	dumpregs(ur);
	prflush();
	firmware();
}



@@ 280,7 285,7 @@ trap(Ureg *ur)
			clock(ur);
			break;
		case 2:	/* machine check */
			mcheck((void*)(KZERO|(ulong)ur->a2));
			mcheck(ur, (void*)(KZERO|(ulong)ur->a2));
			break;
		case 3:	/* device */
			intr(ur);

M pc/sdata.c => pc/sdata.c +0 -4
@@ 1662,10 1662,6 @@ atapnp(void)
			 */
			break;
		case (0x0646<<16)|0x1095:	/* CMD 646 */
			/*
			 * Is this correct?
			 */
			pi |= 0x0f;
//for(i = 0; i <= 4; i++) print("bar%d: addr %lux size %d\n", i, p->mem[i].bar, p->mem[i].size);
			break;
		case (0x0571<<16)|0x1106:	/* VIA 82C686 */

M port/chan.c => port/chan.c +2 -2
@@ 554,9 554,9 @@ cunmount(Chan *mnt, Chan *mounted)
	Mount *f, **p;

if(mnt->umh)	/* should not happen */
	print("cmount newp extra umh\n");
	print("cunmount newp extra umh\n");
if(mounted && mounted->umh)
	print("cmount old extra umh\n");
	print("cunmount old extra umh\n");

	pg = up->pgrp;
	wlock(&pg->ns);

M port/devdup.c => port/devdup.c +4 -13
@@ 28,7 28,7 @@ dupgen(Chan *c, char *, Dirtab*, int, int s, Dir *dp)
	if((f=fgrp->fd[s/2]) == nil)
		return 0;
	if(s & 1){
		p = 0600;
		p = 0400;
		sprint(up->genbuf, "%dctl", s/2);
	}else{
		p = perm[f->mode&3];


@@ 101,7 101,7 @@ dupread(Chan *c, void *va, long n, vlong offset)
{
	char *a = va;
	char buf[256];
	int fd, twicefd;
	int fd, twicefd, m;
	Fgrp *f;

	if(c->qid.type == QTDIR)


@@ 113,7 113,7 @@ dupread(Chan *c, void *va, long n, vlong offset)
		if(fd<0 || f->nfd<=fd)
			error(Ebadfd);
		c = fdtochan(fd, -1, 0, 0);
		snprint(buf, sizeof buf, "%d %ld", fd, c->iounit);
		procfdprint(c, fd, 0, buf, sizeof buf);
		return readstr((ulong)offset, va, n, buf);
	}
	panic("dupread");


@@ 121,17 121,8 @@ dupread(Chan *c, void *va, long n, vlong offset)
}

static long
dupwrite(Chan *c, void*, long, vlong)
dupwrite(Chan*, void*, long, vlong)
{
	int fd, twicefd;

	twicefd = c->qid.path - 1;
	fd = twicefd/2;
	if(twicefd & 1){
print("writing ctl file\n");
		print("do ctl write\n");
		return -1;
	}
	panic("dupwrite");
	return 0;		/* not reached */
}

M port/devproc.c => port/devproc.c +54 -24
@@ 341,12 341,35 @@ procoffset(long offset, char *va, int *np)
}

static int
procqidwidth(Chan *c)
{
	char buf[32];

	return sprint(buf, "%lud", c->qid.vers);
}

int
procfdprint(Chan *c, int fd, int w, char *s, int ns)
{
	int n;

	if(w == 0)
		w = procqidwidth(c);
	n = snprint(s, ns, "%3d %.2s %C %4ld (%.16llux %*lud %.2ux) %5ld %8lld %s\n",
		fd,
		&"r w rw"[(c->mode&3)<<1],
		devtab[c->type]->dc, c->dev,
		c->qid.path, w, c->qid.vers, c->qid.type,
		c->iounit, c->offset, c->name->s);
	return n;
}

static int
procfds(Proc *p, char *va, int count, long offset)
{
	Fgrp *f;
	Chan *c;
	int n, i, w, ww;
	char buf[32];

	qlock(&p->debug);
	f = p->fgrp;


@@ 370,7 393,7 @@ procfds(Proc *p, char *va, int count, long offset)
		c = f->fd[i];
		if(c == nil)
			continue;
		ww = sprint(buf, "%lud", c->qid.vers);
		ww = procqidwidth(c);
		if(ww > w)
			w = ww;
	}


@@ 378,14 401,7 @@ procfds(Proc *p, char *va, int count, long offset)
		c = f->fd[i];
		if(c == nil)
			continue;
		n += snprint(va+n, count-n, "%3d %.2s %C %4ld (%.16llux %*lud %.2ux) %8lld ",
			i,
			&"r w rw"[(c->mode&3)<<1],
			devtab[c->type]->dc, c->dev,
			c->qid.path, w, c->qid.vers, c->qid.type,
			c->offset);
		n += readstr(0, va+n, count-n, c->name->s);
		n += snprint(va+n, count-n, "\n");
		n += procfdprint(c, i, w, va+n, count-n);
		offset = procoffset(offset, va, &n);
	}
	unlock(f);


@@ 945,11 961,26 @@ procstopwait(Proc *p, int ctl)
		error(Eprocdied);
}

static void
procctlcloseone(Proc *p, Fgrp *f, int fd)
{
	Chan *c;

	c = f->fd[fd];
	if(c == nil)
		return;
	f->fd[fd] = nil;
	unlock(f);
	qunlock(&p->debug);
	cclose(c);
	qlock(&p->debug);
	lock(f);
}

void
procctlclosefiles(Proc *p)
procctlclosefiles(Proc *p, int all, int fd)
{
	int i;
	Chan *c;
	Fgrp *f;

	f = p->fgrp;


@@ 958,17 989,11 @@ procctlclosefiles(Proc *p)

	lock(f);
	f->ref++;
	for(i = 0; i < f->maxfd; i++) {
		c = f->fd[i];
		if(c != 0) {
			f->fd[i] = 0;
			unlock(f);
			qunlock(&p->debug);
			cclose(c);
			qlock(&p->debug);
			lock(f);
		}
	}
	if(all)
		for(i = 0; i < f->maxfd; i++)
			procctlcloseone(p, f, i);
	else
		procctlcloseone(p, f, fd);
	unlock(f);
	closefgrp(f);
}


@@ 1028,8 1053,13 @@ procctlreq(Proc *p, char *va, int n)
	}
	else
	if(strncmp(buf, "closefiles", 10) == 0)
		procctlclosefiles(p);
		procctlclosefiles(p, 1, 0);
	else
	if(strncmp(buf, "close", 5) == 0){
		if(n < 6)
			error(Ebadctl);
		procctlclosefiles(p, 0, atoi(buf+6));
	}else
	if(strncmp(buf, "pri", 3) == 0) {
		if(n < 4)
			error(Ebadctl);

M port/portfns.h => port/portfns.h +1 -0
@@ 203,6 203,7 @@ ulong		procalarm(ulong);
int		proccounter(char *name);
void		procctl(Proc*);
void		procdump(void);
int		procfdprint(Chan*, int, int, char*, int);
void		procinit0(void);
void		procflushseg(Segment*);
Proc*		proctab(int);