From a0f13cda69c20fd7a9697638c5241d0b71292150 Mon Sep 17 00:00:00 2001 From: David du Colombier <0intro@gmail.com> Date: Sat, 5 Apr 2003 00:00:00 +0000 Subject: [PATCH] Plan 9 from Bell Labs 2003-04-05 --- boot/bootip.c | 1 - pc/mmu.c | 12 ++++++------ port/devroot.c | 7 +++++++ port/page.c | 2 +- port/qlock.c | 2 ++ port/taslock.c | 17 +++++++++++++++++ 6 files changed, 33 insertions(+), 8 deletions(-) diff --git a/boot/bootip.c b/boot/bootip.c index 682622a172e6feebc8d2c499a02682766bbe2254..285832e52ef0fae76b2e1cbcf5bebd796e5dbe5e 100644 --- a/boot/bootip.c +++ b/boot/bootip.c @@ -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: diff --git a/pc/mmu.c b/pc/mmu.c index 3e7080e8a9152181e7a33dd91c465195b69e9e95..140801fe85f4aea0e30bb88a4848f6afe51097b6 100644 --- a/pc/mmu.c +++ b/pc/mmu.c @@ -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 diff --git a/port/devroot.c b/port/devroot.c index e7bef3c194eca3edeca5fd54df98f0462418c082..b9aa37224f7343c4b0318835e8d1d5bafd66cff5 100644 --- a/port/devroot.c +++ b/port/devroot.c @@ -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; } diff --git a/port/page.c b/port/page.c index 0df601ed01270169d81f6fe570b924a344a70d19..1a0bdcfc3f2d9edbd0fab3343bfff522152e6f4c 100644 --- a/port/page.c +++ b/port/page.c @@ -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 diff --git a/port/qlock.c b/port/qlock.c index 0f14c41e71055fcd2fe385beeace44b50d9cb82c..385851e01f3ef2b248a24c1bed9fb54b3492fbb2 100644 --- a/port/qlock.c +++ b/port/qlock.c @@ -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) { diff --git a/port/taslock.c b/port/taslock.c index fd70e120f46d15f406fe0f7eea75549e4fec3c00..fd36223056854d1ae222408c3e8c32c51db287f6 100644 --- a/port/taslock.c +++ b/port/taslock.c @@ -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--; }