From 839973a485a7954e4696455119414256dbea361a Mon Sep 17 00:00:00 2001 From: David du Colombier <0intro@gmail.com> Date: Tue, 25 Feb 1992 00:00:00 +0000 Subject: [PATCH] Plan 9 from Bell Labs 1992-02-25 --- gnot/devport.c | 13 +++++++++++++ port/devroot.c | 8 ++++++-- port/segment.c | 6 ++++-- 3 files changed, 23 insertions(+), 4 deletions(-) diff --git a/gnot/devport.c b/gnot/devport.c index 7c195cdd34d32a6c01e54fa4e32da67b20f5f419..b2b2aec66ea6ff9e42f5fd54ffc9f8cdc123efe8 100644 --- a/gnot/devport.c +++ b/gnot/devport.c @@ -8,13 +8,18 @@ #include "devtab.h" +#define ROMADDR 0x40000000 +#define ROMSIZE ((256*1024)/8) + enum { Qdir, Qdata, + Qrom }; Dirtab portdir[]={ "data", {Qdata}, 0, 0666, + "rom", {Qrom}, ROMSIZE, 0444, }; #define NPORT (sizeof portdir/sizeof(Dirtab)) @@ -132,6 +137,14 @@ portread(Chan *c, char *a, long n, ulong offset) } P_qunlock(s); break; + case Qrom: + if(offset >= ROMSIZE) + return 0; + if(offset+n > ROMSIZE) + n = ROMSIZE - offset; + memmove(a, ((char*)ROMADDR)+offset, n); + return n; + break; default: panic("portread"); } diff --git a/port/devroot.c b/port/devroot.c index c22dc50965855814ec71cf6335d39c9176d0618d..1050768b9bfd2f0d5537530162e17a269d02ddc1 100644 --- a/port/devroot.c +++ b/port/devroot.c @@ -45,12 +45,14 @@ int nroot; int rootgen(Chan *c, Dirtab *tab, int ntab, int i, Dir *dp) { - if(tab==0 || i>=ntab) + if(i >= nroot) return -1; + if(i < NROOT) - tab += i; + tab = &rootdir[i]; else tab = rootmap[i - NROOT]; + devdir(c, tab->qid, tab->name, tab->length, eve, tab->perm, dp); return 1; } @@ -92,6 +94,8 @@ rootwalk(Chan *c, char *name) c->qid.path = Qdir|CHDIR; return 1; } + if((c->qid.path & ~CHDIR) != Qdir) + error(Enonexist); return devwalk(c, name, rootdir, nroot, rootgen); } diff --git a/port/segment.c b/port/segment.c index e7459d9f1fed502f4679556d3bd2fe32eb810bfe..ba4c7b0c2a46164e17057592ba0021110b42c935 100644 --- a/port/segment.c +++ b/port/segment.c @@ -274,7 +274,9 @@ imagereclaim(void) for(;;) { lock(&palloc); for(p = palloc.head; p; p = p->next) - if(p->image && p->ref == 0 && p->image != &swapimage) + if(p->image) + if(p->ref == 0) + if(p->image != &swapimage) break; unlock(&palloc); @@ -282,7 +284,7 @@ imagereclaim(void) break; lockpage(p); - if(p->ref == 0 && p->image != &swapimage) + if(p->ref == 0) uncachepage(p); unlockpage(p); }