diff options
author | cinap_lenrek <cinap_lenrek@rei2.9hal> | 2012-02-16 18:04:08 +0100 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@rei2.9hal> | 2012-02-16 18:04:08 +0100 |
commit | 77c21a062c7cf272e59df95955388f9724bff218 (patch) | |
tree | e4b119c82c995eb8dee611c64ed2320d1c0f9971 /sys/src | |
parent | 083612b34eb152ea20b31aa5d7fbef1c11e4173e (diff) |
kernel: remove duppage debug, add comments, cleanup
Diffstat (limited to 'sys/src')
-rw-r--r-- | sys/src/9/port/fault.c | 7 | ||||
-rw-r--r-- | sys/src/9/port/page.c | 33 | ||||
-rw-r--r-- | sys/src/9/port/portfns.h | 2 |
3 files changed, 17 insertions, 25 deletions
diff --git a/sys/src/9/port/fault.c b/sys/src/9/port/fault.c index b5c59d80f..7338181bc 100644 --- a/sys/src/9/port/fault.c +++ b/sys/src/9/port/fault.c @@ -140,8 +140,8 @@ fixfault(Segment *s, ulong addr, int read, int doputmmu) lkp = *pg; lock(lkp); - if(lkp->ref <= 0) - panic("fault: lkp->ref %d <= 0", lkp->ref); + if(lkp->ref < 1) + panic("fault: lkp->ref %d < 1", lkp->ref); if(lkp->image == &swapimage) ref = lkp->ref + swapcount(lkp->daddr); else @@ -149,7 +149,6 @@ fixfault(Segment *s, ulong addr, int read, int doputmmu) if(ref == 1 && lkp->image){ /* save a copy of the original for the image cache */ duppage(lkp); - ref = lkp->ref; } unlock(lkp); @@ -246,7 +245,7 @@ retry: } n = devtab[c->type]->read(c, kaddr, ask, daddr); if(n != ask) - faulterror(Eioload, c, 0); + error(Eioload); if(ask < BY2PG) memset(kaddr+ask, 0, BY2PG-ask); diff --git a/sys/src/9/port/page.c b/sys/src/9/port/page.c index abce72a6b..17466ec7a 100644 --- a/sys/src/9/port/page.c +++ b/sys/src/9/port/page.c @@ -266,7 +266,7 @@ auxpage(void) static int dupretries = 15000; -int +void duppage(Page *p) /* Always call with p locked */ { Page *np; @@ -275,32 +275,27 @@ duppage(Page *p) /* Always call with p locked */ retries = 0; retry: - /* don't dup shared page */ - if(p->ref != 1){ - print("duppage: p->ref %d != 1\n", p->ref); - return 0; - } - - /* don't dup pages with no image */ - if(p->image == nil || p->image->notext){ - print("duppage: noimage\n"); - return 0; - } + /* don't dup pages that are shared or have no image */ + if(p->ref != 1 || p->image == nil || p->image->notext) + return; if(retries++ > dupretries){ print("duppage %d, up %p\n", retries, up); dupretries += 100; if(dupretries > 100000) - panic("duppage\n"); + panic("duppage"); uncachepage(p); - return 1; + return; } /* * normal lock ordering is to call * lock(&palloc) before lock(p). * To avoid deadlock, we have to drop - * our locks and try again. + * our locks and try again. as the page + * is from the image cache, this might + * let someone else come in and grab it + * so we check page ref above. */ if(!canlock(&palloc)){ unlock(p); @@ -314,7 +309,7 @@ retry: if(palloc.freecount < swapalloc.highwater) { unlock(&palloc); uncachepage(p); - return 1; + return; } color = getpgcolor(p->va); @@ -326,7 +321,7 @@ retry: if(np == 0) { unlock(&palloc); uncachepage(p); - return 1; + return; } pageunchain(np); @@ -344,7 +339,7 @@ retry: */ lock(np); if(np->ref != 0) /* should never happen */ - panic("duppage: np->ref %d != 0\n", np->ref); + panic("duppage: np->ref %d != 0", np->ref); unlock(&palloc); /* Cache the new version */ @@ -355,8 +350,6 @@ retry: cachepage(np, p->image); unlock(np); uncachepage(p); - - return 0; } void diff --git a/sys/src/9/port/portfns.h b/sys/src/9/port/portfns.h index 3c9d43ee6..135c8d0d3 100644 --- a/sys/src/9/port/portfns.h +++ b/sys/src/9/port/portfns.h @@ -82,7 +82,7 @@ void dumpaproc(Proc*); void dumpregs(Ureg*); void dumpstack(void); Fgrp* dupfgrp(Fgrp*); -int duppage(Page*); +void duppage(Page*); void dupswap(Page*); void edfinit(Proc*); char* edfadmit(Proc*); |