~kris/9p

9hist

a0f13cda69c20fd7a9697638c5241d0b71292150 — David du Colombier 23 years ago dfffd21
Plan 9 from Bell Labs 2003-04-05
6 files changed, 33 insertions(+), 8 deletions(-)

M boot/bootip.c
M pc/mmu.c
M port/devroot.c
M port/page.c
M port/qlock.c
M port/taslock.c
M boot/bootip.c => boot/bootip.c +0 -1
@@ 61,7 61,6 @@ configip(void)
	case -1:
		fatal("configuring ip: %r");
	case 0:
		print("exec-ing ipconfig\n");
		exec("/boot/ipconfig", arg);
		fatal("execing /ipconfig");
	default:

M pc/mmu.c => pc/mmu.c +6 -6
@@ 327,14 327,14 @@ mmukmapsync(ulong va)

	mach0 = MACHP(0);

	lock(&mmukmaplock);
	ilock(&mmukmaplock);

	if((pte = mmuwalk(mach0->pdb, va, 1, 0)) == nil){
		unlock(&mmukmaplock);
		iunlock(&mmukmaplock);
		return 0;
	}
	if(!(*pte & PTESIZE) && mmuwalk(mach0->pdb, va, 2, 0) == nil){
		unlock(&mmukmaplock);
		iunlock(&mmukmaplock);
		return 0;
	}
	entry = *pte;


@@ 349,7 349,7 @@ mmukmapsync(ulong va)
	else
		mmuflushtlb(PADDR(m->pdb));

	unlock(&mmukmaplock);
	iunlock(&mmukmaplock);

	return 1;
}


@@ 376,7 376,7 @@ mmukmap(ulong pa, ulong va, int size)
	ova = va;

	pae = pa + size;
	lock(&mmukmaplock);
	ilock(&mmukmaplock);
	while(pa < pae){
		table = &mach0->pdb[PDX(va)];
		/*


@@ 457,7 457,7 @@ mmukmap(ulong pa, ulong va, int size)
		va += pgsz;
		sync++;
	}
	unlock(&mmukmaplock);
	iunlock(&mmukmaplock);

	/*
	 * If something was added

M port/devroot.c => port/devroot.c +7 -0
@@ 221,6 221,13 @@ rootread(Chan *c, void *buf, long n, vlong off)
		return 0;
	if(offset+n > d->length)
		n = d->length - offset;
#ifdef asdf
print("[%d] kaddr %.8ulx base %.8ulx offset %ld (%.8ulx), n %d %.8ulx %.8ulx %.8ulx\n", 
		t, buf, data, offset, offset, n,
		((ulong*)(data+offset))[0],
		((ulong*)(data+offset))[1],
		((ulong*)(data+offset))[2]);
#endif asdf
	memmove(buf, data+offset, n);
	return n;
}

M port/page.c => port/page.c +1 -1
@@ 66,7 66,7 @@ static void
pageunchain(Page *p)
{
	if(canlock(&palloc))
		panic("pageunchain");
		panic("pageunchain (palloc %p)", &palloc);
	if(p->prev)
		p->prev->next = p->next;
	else

M port/qlock.c => port/qlock.c +2 -0
@@ 23,6 23,8 @@ qlock(QLock *q)
	if(up != nil && up->nlocks)
		print("qlock: %lux: nlocks %lud", getcallerpc(&q), up->nlocks);

	if(q->use.key == 0x55555555)
		panic("qlock: q %p, key 5*\n", q);
	lock(&q->use);
	rwstats.qlock++;
	if(!q->locked) {

M port/taslock.c => port/taslock.c +17 -0
@@ 43,12 43,15 @@ lock(Lock *l)
{
	int i;
	ulong pc;
Lock *_l = l;

	pc = getcallerpc(&l);

	lockstats.locks++;
	if(up)
		up->nlocks++;	/* prevent being scheded */
	if(l->key == 0x55555555)
		panic("lock(1): l %p, key 5*, pc %.lux, %p\n", l, pc, _l);
	if(tas(&l->key) == 0){
		if(up)
			up->lastlock = l;


@@ 57,6 60,8 @@ lock(Lock *l)
		l->isilock = 0;
		return 0;
	}
	if(l->key == 0x55555555)
		panic("lock(1a): l %p, key 5*, pc %.lux, %p\n", l, pc, _l);
	if(up)
		up->nlocks--;	/* didn't get the lock, allow scheding */



@@ 64,14 69,24 @@ lock(Lock *l)
	for(;;){
		lockstats.inglare++;
		i = 0;
	if(l->key == 0x55555555)
		panic("lock(2): l %p, key 5*, pc %.lux, %p\n", l, pc, _l);
		while(l->key){
			if(i++ > 100000000){
				i = 0;
	if(l->key == 0x55555555)
		panic("lock(3): l %p, key 5*, pc %.lux, %p\n", l, pc, _l);
				lockloop(l, pc);
	if(l->key == 0x55555555)
		panic("lock(4): l %p, key 5*, pc %.lux, %p\n", l, pc, _l);
			}
		}
	if(l->key == 0x55555555)
		panic("lock(5): l %p, key 5*, pc %.lux, %p\n", l, pc, _l);
		if(up)
			up->nlocks++;
	if(l->key == 0x55555555)
		panic("lock(6): l %p, key 5*, pc %.lux, %p\n", l, pc, _l);
		if(tas(&l->key) == 0){
			if(up)
				up->lastlock = l;


@@ 80,6 95,8 @@ lock(Lock *l)
			l->isilock = 0;
			return 1;
		}
	if(l->key == 0x55555555)
		panic("lock(7): l %p, key 5*, pc %.lux, %p\n", l, pc, _l);
		if(up)
			up->nlocks--;
	}