~kris/9p

9hist

3451543e87c70c9de6eb445a2c08e5b62df8e698 — David du Colombier 36 years ago 52ddbb1
Plan 9 from Bell Labs 1990-07-20
5 files changed, 76 insertions(+), 4 deletions(-)

M gnot/dat.h
M port/devcons.c
M port/page.c
M power/dat.h
M power/fns.h
M gnot/dat.h => gnot/dat.h +1 -1
@@ 454,7 454,7 @@ enum {
	Sctlqid = Sdataqid-1,
	Slowqid = Sctlqid,
	Streamhi= (9*1024),	/* byte count high water mark */
	Streambhi= 16,		/* block count high water mark */
	Streambhi= 32,		/* block count high water mark */
};

#define	PRINTSIZE	256

M port/devcons.c => port/devcons.c +70 -0
@@ 290,6 290,7 @@ enum{
	Qdir,
	Qcons,
	Qcputime,
	Qlog,
	Qnull,
	Qpgrpid,
	Qpid,


@@ 301,6 302,7 @@ enum{
Dirtab consdir[]={
	"cons",		Qcons,		0,	0600,
	"cputime",	Qcputime,	72,	0600,
	"log",		Qlog,		sizeof(SYSLOG->buf),	0600,
	"null",		Qnull,		0,	0600,
	"pgrpid",	Qpgrpid,	12,	0600,
	"pid",		Qpid,		12,	0600,


@@ 496,6 498,9 @@ consread(Chan *c, void *buf, long n)
	case Quser:
		return readstr(c->offset, buf, n, u->p->pgrp->user);

	case Qlog:
		return readlog(c->offset, buf, n);

	case Qnull:
		return 0;



@@ 588,3 593,68 @@ consuserstr(Error *e, char *buf)
{
	strcpy(buf, u->p->pgrp->user);
}

/*
 *  crash info
 */
void
sysloginit(void)
{
	Syslog *s;
	char *p;

	s = SYSLOG;
	if(s->magic!=SYSLOGMAGIC || s->next>=&s->buf[sizeof(s->buf)]
	|| s->next<s->buf){
		s->next = s->buf;
		s->magic = SYSLOGMAGIC;
	}
}

void
syslog(char *p, int n)
{
	int i;
	Syslog *s;
	char *end;

	s = SYSLOG;
	end = &s->buf[sizeof(s->buf)];
	while(n-- > 0){
		*s->next++ = *p++;
		if(s->next >= end)
			s->next = s->buf;
	}
}

long
readlog(ulong off, char *buf, ulong n)
{
	Syslog *s;
	int i;
	char *p;
	char *end;

	s = SYSLOG;

	/* past end */
	if(off >= sizeof(s->buf))
		return 0;

	/* trim length */
	if(off + n >= sizeof(s->buf))
		n = sizeof(s->buf) - off;

	/* point to start of area to be read */
	end = &s->buf[sizeof(s->buf)];
	p = s->next + off;
	if(p > end)
		p -= sizeof(s->buf);

	for(i = 0; i < n; i++){
		*buf++ = *p++;
		if(p >= end)
			p = s->buf;
	}
	return n;
}

M port/page.c => port/page.c +1 -0
@@ 493,6 493,7 @@ segaddr(Seg *s, ulong min, ulong max)

	if(max < min)
		return 0;
if(max > 20*1024*1024) pprint("segaddr %lux\n", max);
	if(min != s->minva)	/* can't grow down yet (stacks: fault.c) */
		return 0;
	max = (max+(BY2PG-1)) & ~(BY2PG-1);

M power/dat.h => power/dat.h +3 -3
@@ 694,11 694,11 @@ extern	FPsave	initfp;
/*
 *  kernel based system log, passed between crashes
 */
#define SYSLOG		((Syslog *)(0x80001B00))
#define SYSLOGMAGIC	0x12345678
#define SYSLOG		((Syslog *)(0xa0001B00))
#define SYSLOGMAGIC	0x87654321
struct Syslog
{
	ulong	magic;
	char	*next;
	char	buf[16*1024];
	char	buf[8*1024];
};

M power/fns.h => power/fns.h +1 -0
@@ 139,6 139,7 @@ void	putbq(Blist*, Block*);
int	putq(Queue*, Block*);
void	putstrn(char*, long);
ulong	pwait(Waitmsg*);
int	readlog(ulong, char*, ulong);
int	readnum(ulong, char*, ulong, ulong, int);
void	ready(Proc*);
void	rooterrstr(Error*, char*);