~kris/9p

9hist

6ff3b06fdbfaf75221bc599755a9c8380508dc0d — David du Colombier 33 years ago 1bdb048
Plan 9 from Bell Labs 1993-07-27
4 files changed, 32 insertions(+), 4 deletions(-)

M port/fault.c
M port/portdat.h
M port/qio.c
M port/sysproc.c
M port/fault.c => port/fault.c +29 -0
@@ 7,6 7,35 @@

void	faulterror(char*);

ulong
getpte(ulong addr)
{
	Pte **p, *etp;
	Segment *s;
	Page **pg;
	ulong soff;

	s = seg(up, addr, 1);
	if(s == 0)
		return -1;

	addr &= ~(BY2PG-1);
	soff = addr-s->base;
	p = &s->map[soff/PTEMAPMEM];
	if(*p == 0) {
		qunlock(&s->lk);
		return -1;
	}
	etp = *p;
	pg = &etp->pages[(soff&(PTEMAPMEM-1))/BY2PG];
	if(*pg == 0) {
		qunlock(&s->lk);
		return -1;
	}
	qunlock(&s->lk);
	return (*pg)->pa;
}

int
fault(ulong addr, int read)
{

M port/portdat.h => port/portdat.h +2 -1
@@ 599,7 599,8 @@ struct Proc
	void	*dbgreg;	/* User registers for devproc */
	ulong	svstatus;
	ulong	svr1;

int entpc;
int entr31;
	/*
	 *  machine specific MMU
	 */

M port/qio.c => port/qio.c +0 -1
@@ 407,7 407,6 @@ qread(Queue *q, void *vp, int len)
		if(q->state & Qclosed){
			unlock(q);
			splx(x);
print("Qclosed %lux\n", q);
			return 0;
		}


M port/sysproc.c => port/sysproc.c +1 -2
@@ 294,7 294,7 @@ sysexec(ulong *arg)
	if((ssize+4) & 7)
		ssize += 4;
	spage = (ssize+(BY2PG-1)) >> PGSHIFT;
print("ssize %d spage %lux\n", ssize, spage);

	/*
	 * Build the stack segment, putting it in kernel virtual for the moment
	 */


@@ 319,7 319,6 @@ print("ssize %d spage %lux\n", ssize, spage);
			argp = (char**)arg[1];
		}
		*argv++ = charp + (USTKTOP-TSTKTOP);
print("arg[%d] %s\n", i, *argp);
		n = strlen(*argp) + 1;
		memmove(charp, *argp++, n);
		charp += n;