From 3cfbb8523f7fdef04a8e53f148ca62a15d0c5c90 Mon Sep 17 00:00:00 2001 From: David du Colombier <0intro@gmail.com> Date: Sat, 27 Apr 1991 00:00:00 +0000 Subject: [PATCH] Plan 9 from Bell Labs 1991-04-27 --- gnot/dat.h | 1 - gnot/devcons.c | 6 - gnot/devincon.c | 6 - gnot/devport.c | 6 - port/chan.c | 284 +++++++++++++++++++++++----------------------- port/dev.c | 21 +--- port/devarp.c | 6 - port/devbit.c | 6 - port/devboot.c | 6 - port/devcons.c | 6 - port/devdk.c | 6 - port/devdup.c | 6 - port/devenv.c | 6 - port/devip.c | 6 - port/deviproute.c | 6 - port/devkprof.c | 6 - port/devlance.c | 6 - port/devmnt.c | 47 +------- port/devnonet.c | 6 - port/devpipe.c | 6 - port/devproc.c | 6 - port/devroot.c | 6 - port/devscsi.c | 6 - port/devsrv.c | 6 - port/devwren.c | 6 - port/fault.c | 1 + power/dat.h | 1 - power/devbit3.c | 6 - power/devhotrod.c | 6 - power/devhs.c | 6 - power/devrtc.c | 6 - power/faultmips.c | 1 - ss/dat.h | 11 +- 33 files changed, 158 insertions(+), 359 deletions(-) diff --git a/gnot/dat.h b/gnot/dat.h index 2b8fa8c7325b3b984a63f5def3ecc2ea7416a194..b6436d1ebf901b793d6a0a92cf656a6f7d9ebaf6 100644 --- a/gnot/dat.h +++ b/gnot/dat.h @@ -177,7 +177,6 @@ struct Dev long (*write)(Chan*, void*, long, ulong); void (*remove)(Chan*); void (*wstat)(Chan*, char*); - Chan *(*clwalk)(Chan*, char*); }; struct Dirtab diff --git a/gnot/devcons.c b/gnot/devcons.c index d66f8c3a4d1fe131fa425f645691f1147399d5a8..cb2d9f235ece14b79b673b5c68ddc3a658987d63 100644 --- a/gnot/devcons.c +++ b/gnot/devcons.c @@ -495,12 +495,6 @@ conswalk(Chan *c, char *name) return devwalk(c, name, consdir, NCONS, consgen); } -Chan* -consclwalk(Chan *c, char *name) -{ - return devclwalk(c, name); -} - void consstat(Chan *c, char *dp) { diff --git a/gnot/devincon.c b/gnot/devincon.c index f4dc06a669619b77863a55656bb33a64f1366d31..f8db939f60f098fdbf0c14d27ad11fc9aed293c2 100644 --- a/gnot/devincon.c +++ b/gnot/devincon.c @@ -359,12 +359,6 @@ inconwalk(Chan *c, char *name) return devwalk(c, name, 0, 0, streamgen); } -Chan* -inconclwalk(Chan *c, char *name) -{ - return devclwalk(c, name); -} - void inconstat(Chan *c, char *dp) { diff --git a/gnot/devport.c b/gnot/devport.c index cd4f3e88223a7f8ba5cf3cf05ed25240774e94c4..2b1d16be59e9d00eb83cb9cdf07775b409f37754 100644 --- a/gnot/devport.c +++ b/gnot/devport.c @@ -83,12 +83,6 @@ portwalk(Chan *c, char *name) return devwalk(c, name, portdir, NPORT, devgen); } -Chan* -portclwalk(Chan *c, char *name) -{ - return devclwalk(c, name); -} - void portstat(Chan *c, char *db) { diff --git a/port/chan.c b/port/chan.c index 2d7962d4c5485b08c75b634db4a8b239826e47b6..376f44d50acade792d610ac080a8055a608d39d2 100644 --- a/port/chan.c +++ b/port/chan.c @@ -11,18 +11,6 @@ struct{ Chan *free; }chanalloc; -/* - * used by namec, domount, and walk to point - * to the current mount entry during name resolution - */ -typedef struct Finger Finger; -struct Finger { - Chan *c; /* channel we're walking */ - int needcl; /* true if we need to clone c before using it */ - Mount *mnt; /* last mount point we ran traversed */ - ulong mountid; /* id of that mount point */ -}; - int incref(Ref *r) { @@ -95,7 +83,9 @@ loop: c->dev = 0; c->offset = 0; c->mnt = 0; + c->stream = 0; c->aux = 0; + c->mntindex = 0; c->mchan = 0; c->mqid = (Qid){0, 0}; return c; @@ -292,13 +282,15 @@ clone(Chan *c, Chan *nc) return (*devtab[c->type].clone)(c, nc); } -void -domount(Finger *f) +Chan* +domount(Chan *c) { int i; + ulong mntid; Mtab *mt; + Mount *mnt; Pgrp *pg; - Chan *mc; + Chan *nc, *mc; pg = u->p->pgrp; /* @@ -306,101 +298,110 @@ domount(Finger *f) */ mt = pg->mtab; for(i=0; inmtab; i++,mt++) - if(mt->c && eqchan(mt->c, f->c, 1)) + if(mt->c && eqchan(mt->c, c, 1)) goto Found; /* * No; c is unaffected */ - return; + return c; /* * Yes; move c through table */ Found: lock(pg); - if(!eqchan(mt->c, f->c, 1)){ /* table changed underfoot */ + if(!eqchan(mt->c, c, 1)){ /* table changed underfoot */ pprint("domount: changed underfoot?\n"); unlock(pg); - return; + return c; } - f->mnt = mt->mnt; - f->mountid = f->mnt->mountid; - mc = mt->mnt->c; + mnt = mt->mnt; + mntid = mnt->mountid; + mc = mnt->c; incref(mc); unlock(pg); - close(f->c); - f->c = mc; - f->needcl = 1; + if(waserror()){ + close(mc); + nexterror(); + } + nc = clone(mc, 0); + close(mc); + poperror(); + close(c); + nc->mnt = mnt; + nc->mountid = mntid; + return nc; } -int -walk(Finger *f, char *name, int domnt) +Chan* +walk(Chan *ac, char *name, int domnt) { + Mount *mnt; int first = 1; - Mount *mnt = f->mnt; - ulong mountid = f->mountid; - Chan *c = f->c; - Chan *mc; + Chan *c = ac; + Chan *nc, *mc; Pgrp *pg = u->p->pgrp; /* * name may be empty if the file name is "/", "#c" etc. */ - if(name[0]){ - for(;;){ - if(!first || f->needcl){ - mc = (*devtab[c->type].clwalk)(c, name); - if(mc){ - close(c); - c = mc; - break; - } - } else { - if((*devtab[c->type].walk)(c, name) != 0){ - break; - } - } - if(!(c->flag&CMOUNT)) - goto Notfound; - if(mnt == 0) - panic("walk"); /* ??? is this safe ??? */ - lock(pg); - if(mnt->term){ - unlock(pg); - goto Notfound; - } - if(mountid != mnt->mountid){ - pprint("walk: changed underfoot? '%s'\n", name); - unlock(pg); - goto Notfound; - } - mnt = mnt->next; - mountid = mnt->mountid; - mc = mnt->c; - incref(mc); + Again: + if(name[0] && (*devtab[c->type].walk)(c, name)==0){ + if(!(c->flag&CMOUNT)) + goto Notfound; + mnt = c->mnt; + if(mnt == 0) + panic("walk"); + lock(pg); + if(mnt->term){ unlock(pg); - if(!first) - close(c); - c = mc; - first = 0; + goto Notfound; } - - /* - * we get here only if we have a cloned and walked - * channel - */ + if(c->mountid != mnt->mountid){ + pprint("walk: changed underfoot? '%s'\n", name); + unlock(pg); + goto Notfound; + } + mnt = mnt->next; + mc = mnt->c; + incref(mc); + unlock(pg); + if(waserror()){ + close(mc); + nexterror(); + } + if(mnt == 0) + panic("walk 1"); + nc = clone(mc, 0); + close(mc); + poperror(); if(!first) - close(f->c); - f->c = c; - f->needcl = 0; - f->mnt = 0; + close(c); + nc->mnt = mnt; + nc->mountid = mnt->mountid; + c = nc; + first = 0; + goto Again; + } + + if(name[0]) /* walk succeeded */ c->flag &= ~CMOUNT; + + if(domnt){ + if(waserror()){ + if(!first) + close(c); + return 0; + } + c = domount(c); + poperror(); } - if(domnt) - domount(f); + if(!first) + close(ac); + - return 1; + return c; Notfound: if(!first) @@ -409,22 +410,22 @@ walk(Finger *f, char *name, int domnt) } /* - * f->c is a mounted non-creatable directory. find a creatable one. + * c is a mounted non-creatable directory. find a creatable one. */ -void -createdir(Finger *f) +Chan* +createdir(Chan *c) { Mount *mnt; Pgrp *pg = u->p->pgrp; - Chan *mc; + Chan *mc, *nc; lock(pg); if(waserror()){ unlock(pg); nexterror(); } - mnt = f->mnt; - if(f->mountid != mnt->mountid){ + mnt = c->mnt; + if(c->mountid != mnt->mountid){ pprint("createdir: changed underfoot?\n"); error(Enocreate); } @@ -436,10 +437,16 @@ createdir(Finger *f) mc = mnt->c; incref(mc); unlock(pg); + if(waserror()){ + close(mc); + nexterror(); + } + nc = clone(mc, 0); poperror(); - close(f->c); - f->needcl = 1; - f->c = mc; + close(c); + close(mc); + nc->mnt = mnt; + return nc; } void @@ -447,19 +454,6 @@ saveregisters(void) { } -void -doclone(Finger *f) -{ - Chan *nc; - - if(f->needcl == 0) - return; - nc = clone(f->c, 0); - close(f->c); - f->c = nc; - f->needcl = 0; -} - /* * Turn a name into a channel. * &name[0] is known to be a valid address. It may be a kernel address. @@ -467,11 +461,11 @@ doclone(Finger *f) Chan* namec(char *name, int amode, int omode, ulong perm) { + Chan *c, *nc, *cc; int t; int mntok, isdot; char *p; char *elem; - Finger f; if(name[0] == 0) error(Enonexist); @@ -492,11 +486,8 @@ namec(char *name, int amode, int omode, ulong perm) elem = u->elem; mntok = 1; isdot = 0; - f.mnt = 0; if(name[0] == '/'){ - f.c = u->slash; - incref(f.c); - f.needcl = 1; + c = clone(u->slash, 0); /* * Skip leading slashes. */ @@ -514,19 +505,16 @@ namec(char *name, int amode, int omode, ulong perm) elem[0]=0; }else name = nextelem(name, elem); - f.c = (*devtab[t].attach)(elem); - f.needcl = 0; + c = (*devtab[t].attach)(elem); }else{ - f.c = u->dot; - incref(f.c); - f.needcl = 1; + c = clone(u->dot, 0); name = skipslash(name); /* eat leading ./ */ if(*name == 0) isdot = 1; } if(waserror()){ - close(f.c); + close(c); nexterror(); } @@ -537,15 +525,16 @@ namec(char *name, int amode, int omode, ulong perm) * current directory. */ if(mntok && !isdot && !(amode==Amount && elem[0]==0)) - domount(&f); /* see case Atodir below */ + c = domount(c); /* see case Atodir below */ /* * How to treat the last element of the name depends on the operation. * Therefore do all but the last element by the easy algorithm. */ while(*name){ - if(walk(&f, elem, mntok) == 0) + if((nc=walk(c, elem, mntok)) == 0) error(Enonexist); + c = nc; name = nextelem(name, elem); } @@ -555,10 +544,11 @@ namec(char *name, int amode, int omode, ulong perm) switch(amode){ case Aaccess: if(isdot) - domount(&f); + c = domount(c); else{ - if(walk(&f, elem, mntok) == 0) + if((nc=walk(c, elem, mntok)) == 0) error(Enonexist); + c = nc; } break; @@ -567,26 +557,26 @@ namec(char *name, int amode, int omode, ulong perm) * Directories (e.g. for cd) are left before the mount point, * so one may mount on / or . and see the effect. */ - if(walk(&f, elem, 0) == 0) + if((nc=walk(c, elem, 0)) == 0) error(Enonexist); - if(!(f.c->qid.path & CHDIR)) + c = nc; + if(!(c->qid.path & CHDIR)) error(Enotdir); break; case Aopen: if(isdot) - domount(&f); + c = domount(c); else{ - if(walk(&f, elem, mntok) == 0) + if((nc=walk(c, elem, mntok)) == 0) error(Enonexist); + c = nc; } Open: - saveregisters(); /* else error() in open has wrong value of c saved */ - if(f.needcl) - doclone(&f); - f.c = (*devtab[f.c->type].open)(f.c, omode); + saveregisters(); /* else error() in open has wrong value of c saved */ + c = (*devtab[c->type].open)(c, omode); if(omode & OCEXEC) - f.c->flag |= CCEXEC; + c->flag |= CCEXEC; break; case Amount: @@ -595,37 +585,51 @@ namec(char *name, int amode, int omode, ulong perm) * the second mount to be attached to the original directory, not * the replacement. */ - if(walk(&f, elem, 0) == 0) + if((nc=walk(c, elem, 0)) == 0) error(Enonexist); + c = nc; break; case Acreate: if(isdot) error(Eisdir); - if(walk(&f, elem, 1) != 0){ + + /* + * Walk the element before trying to create it + * to see if it exists. We clone the channel + * first, just in case someone is trying to + * use clwalk outside the kernel. + */ + cc = clone(c, 0); + if(waserror()){ + close(cc); + nexterror(); + } + if((nc=walk(cc, elem, 1)) != 0){ + poperror(); + close(c); + c = nc; omode |= OTRUNC; goto Open; } - if((f.c->flag&(CMOUNT|CCREATE)) == CMOUNT) - createdir(&f); - if(f.needcl) - doclone(&f); - (*devtab[f.c->type].create)(f.c, elem, omode, perm); + close(cc); + poperror(); + + /* + * the file didn't exist, try the create + */ + if((c->flag&(CMOUNT|CCREATE)) == CMOUNT) + c = createdir(c); + (*devtab[c->type].create)(c, elem, omode, perm); if(omode & OCEXEC) - f.c->flag |= CCEXEC; + c->flag |= CCEXEC; break; default: panic("unknown namec access %d\n", amode); } - if(f.needcl) - doclone(&f); poperror(); - if(f.c->flag & CMOUNT){ - f.c->mnt = f.mnt; - f.c->mountid = f.mountid; - } - return f.c; + return c; } /* diff --git a/port/dev.c b/port/dev.c index 51f0af94567ebd843c41f53aa359ae367c901992..1e79186c8d7697a3d4c97a4f78a3d2fd1d5122b7 100644 --- a/port/dev.c +++ b/port/dev.c @@ -77,6 +77,7 @@ devclone(Chan *c, Chan *nc) nc->offset = c->offset; nc->flag = c->flag; nc->mnt = c->mnt; + nc->mountid = c->mountid; nc->aux = c->aux; nc->mchan = c->mchan; nc->mqid = c->mqid; @@ -108,26 +109,6 @@ devwalk(Chan *c, char *name, Dirtab *tab, int ntab, Devgen *gen) } } -Chan* -devclwalk(Chan *c, char *name) -{ - Chan *nc; - - nc = 0; - if(waserror()){ - if(nc) - close(nc); - return 0; - } - nc = (*devtab[c->type].clone)(c, 0); - if((*devtab[nc->type].walk)(nc, name) == 0){ - close(nc); - nc = 0; - } - poperror(); - return nc; -} - void devstat(Chan *c, char *db, Dirtab *tab, int ntab, Devgen *gen) { diff --git a/port/devarp.c b/port/devarp.c index e026aae838bb1de0d61bc8ee92f082460fe5fcc8..a990d40e85dee96899b861ee2fd32611c701b089 100644 --- a/port/devarp.c +++ b/port/devarp.c @@ -81,12 +81,6 @@ arpwalk(Chan *c, char *name) return devwalk(c, name, arptab, (long)Narptab, devgen); } -Chan* -arpclwalk(Chan *c, char *name) -{ - return devclwalk(c, name); -} - void arpstat(Chan *c, char *db) { diff --git a/port/devbit.c b/port/devbit.c index 4df1bddc7a769ac9af2ad5f8061daeb98a3ad1de..9a2e0c00bfc553ddf56bd3ef72eb3ee5f5cb0669 100644 --- a/port/devbit.c +++ b/port/devbit.c @@ -194,12 +194,6 @@ bitwalk(Chan *c, char *name) return devwalk(c, name, bitdir, NBIT, devgen); } -Chan* -bitclwalk(Chan *c, char *name) -{ - return devclwalk(c, name); -} - void bitstat(Chan *c, char *db) { diff --git a/port/devboot.c b/port/devboot.c index e32e3e0a3e0aee35ab2b97457a0cdceed8eb6dbe..9e50239f326dafc6e801b1aa4cb45bbf34450109 100644 --- a/port/devboot.c +++ b/port/devboot.c @@ -47,12 +47,6 @@ bootwalk(Chan *c, char *name) return devwalk(c, name, bootdir, NBOOT, devgen); } -Chan* -bootclwalk(Chan *c, char *name) -{ - return devclwalk(c, name); -} - void bootstat(Chan *c, char *dp) { diff --git a/port/devcons.c b/port/devcons.c index e16ead37b0b3b4bea82f555ee2e59a2ee804485c..dc86b13d1bb99cd3746a298626e76bb43f61bb67 100644 --- a/port/devcons.c +++ b/port/devcons.c @@ -406,12 +406,6 @@ conswalk(Chan *c, char *name) return devwalk(c, name, consdir, NCONS, devgen); } -Chan* -consclwalk(Chan *c, char *name) -{ - return devclwalk(c, name); -} - void consstat(Chan *c, char *dp) { diff --git a/port/devdk.c b/port/devdk.c index 3571ca5e2f963187f38bda62f9cda0a3c627efae..b21c1ca4588256688d1d19d2a8de693d34f573e2 100644 --- a/port/devdk.c +++ b/port/devdk.c @@ -753,12 +753,6 @@ dkwalk(Chan *c, char *name) return devwalk(c, name, dksubdir, Nsubdir, streamgen); } -Chan* -dkclwalk(Chan *c, char *name) -{ - return devclwalk(c, name); -} - void dkstat(Chan *c, char *dp) { diff --git a/port/devdup.c b/port/devdup.c index 9ec8cd45a549ef71a3db6a48aedc2869998186e3..4a0ca33f741112bd88a56e38657070233d8deab0 100644 --- a/port/devdup.c +++ b/port/devdup.c @@ -46,12 +46,6 @@ dupclone(Chan *c, Chan *nc) return devclone(c, nc); } -Chan* -dupclwalk(Chan *c, char *name) -{ - return devclwalk(c, name); -} - int dupwalk(Chan *c, char *name) { diff --git a/port/devenv.c b/port/devenv.c index 5f46e9a9b2911f869c82ad98a78d2dd75547b94d..e450c0ba785c7127997f036d4f0ed1079572b7d5 100644 --- a/port/devenv.c +++ b/port/devenv.c @@ -270,12 +270,6 @@ envwalk(Chan *c, char *name) return 0; } -Chan* -envclwalk(Chan *c, char *name) -{ - return devclwalk(c, name); -} - void envstat(Chan *c, char *db) { diff --git a/port/devip.c b/port/devip.c index da85e5899dd698cdf162553bed9b549ec904cb6b..9391bb7975347555be13942f5e70e55633ef918d 100644 --- a/port/devip.c +++ b/port/devip.c @@ -135,12 +135,6 @@ ipwalk(Chan *c, char *name) return devwalk(c, name, ipsubdir, Nipsubdir, streamgen); } -Chan* -ipclwalk(Chan *c, char *name) -{ - return devclwalk(c, name); -} - void ipstat(Chan *c, char *db) { diff --git a/port/deviproute.c b/port/deviproute.c index 11621332be154d0ba4988de3ec558a2904db9e11..2a6abb6f721f949b5b557f3dc4ec498a073f1ec2 100644 --- a/port/deviproute.c +++ b/port/deviproute.c @@ -222,12 +222,6 @@ iproutewalk(Chan *c, char *name) return devwalk(c, name, iproutetab, (long)Niproutetab, devgen); } -Chan* -iprouteclwalk(Chan *c, char *name) -{ - return devclwalk(c, name); -} - void iproutestat(Chan *c, char *db) { diff --git a/port/devkprof.c b/port/devkprof.c index e86ec62beec9cbc7232f16edd05385534ee47592..680986450445660df6831831741795c01d777546 100644 --- a/port/devkprof.c +++ b/port/devkprof.c @@ -63,12 +63,6 @@ kprofwalk(Chan *c, char *name) return devwalk(c, name, kproftab, (long)Nkproftab, devgen); } -Chan* -kprofclwalk(Chan *c, char *name) -{ - return devclwalk(c, name); -} - void kprofstat(Chan *c, char *db) { diff --git a/port/devlance.c b/port/devlance.c index 6ed728028d42c3b645fb1f94cf4214a54abcbc36..9ea8ead26a314df25387a2cf373e301262e4134b 100644 --- a/port/devlance.c +++ b/port/devlance.c @@ -581,12 +581,6 @@ lancewalk(Chan *c, char *name) return devwalk(c, name, 0, 0, streamgen); } -Chan* -lanceclwalk(Chan *c, char *name) -{ - return devclwalk(c, name); -} - void lancestat(Chan *c, char *dp) { diff --git a/port/devmnt.c b/port/devmnt.c index 91ac489416534ca549fcb12fc0fd780171183cc0..091ab782b795e2c16e13ba4c9f0721cde01c6a93 100644 --- a/port/devmnt.c +++ b/port/devmnt.c @@ -353,6 +353,7 @@ mntclone(Chan *c, Chan *nc) nc->flag = c->flag; nc->offset = c->offset; nc->mnt = c->mnt; + nc->mountid = c->mountid; nc->aux = c->aux; nc->mntindex = c->mntindex; nc->mchan = c->mchan; @@ -390,50 +391,6 @@ mntwalk(Chan *c, char *name) return found; } -Chan * -mntclwalk(Chan *c, char *name) -{ - Mnt *m; - Mnthdr *mh; - Chan *nc; - - nc = newchan(); - mh = 0; - if(waserror()){ - close(nc); - if(mh) - mhfree(mh); - return 0; - } - m = mntdev(c, 0); - mh = mhalloc(); - mh->thdr.type = Tclwalk; - mh->thdr.fid = c->fid; - mh->thdr.newfid = nc->fid; - strcpy(mh->thdr.name, name); - mntxmit(m, mh); - if(mh->rhdr.fid == mh->thdr.fid){ - /* - * hack to indicate the most common error - */ - errors("directory entry not found"); - } - nc->type = c->type; - nc->dev = c->dev; - nc->mode = c->mode; - nc->flag = c->flag; - nc->offset = c->offset; - nc->mnt = c->mnt; - nc->aux = c->aux; - nc->mchan = c->mchan; - nc->mqid = c->qid; - nc->qid = mh->rhdr.qid; - incref(m); - poperror(); - mhfree(mh); - return nc; -} - void mntstat(Chan *c, char *dp) { @@ -784,7 +741,7 @@ mntxmit(Mnt *m, Mnthdr *mh) print("type mismatch %d %d\n", mh->rhdr.type, mh->thdr.type+1); error(Ebadmsg); } - if(mh->rhdr.fid!=mh->thdr.fid && mh->thdr.type!=Tclwalk){ + if(mh->rhdr.fid != mh->thdr.fid){ print("fid mismatch %d %d type %d\n", mh->rhdr.fid, mh->thdr.fid, mh->rhdr.type); error(Ebadmsg); } diff --git a/port/devnonet.c b/port/devnonet.c index 315bdc221114b242aefd33e71c597a06cb233f77..51538ad551635034d090628eec4ddfec2abc26c3 100644 --- a/port/devnonet.c +++ b/port/devnonet.c @@ -202,12 +202,6 @@ nonetwalk(Chan *c, char *name) return devwalk(c, name, nosubdir, Nsubdir, streamgen); } -Chan* -nonetclwalk(Chan *c, char *name) -{ - return devclwalk(c, name); -} - void nonetstat(Chan *c, char *dp) { diff --git a/port/devpipe.c b/port/devpipe.c index 905f3b366d84d030ecc2d64f5b25633a7c1cdf5c..e41a1b8f87c437005af0b3a4af1ee940a9afbdda 100644 --- a/port/devpipe.c +++ b/port/devpipe.c @@ -125,12 +125,6 @@ pipewalk(Chan *c, char *name) return devwalk(c, name, pipedir, NPIPEDIR, pipegen); } -Chan* -pipeclwalk(Chan *c, char *name) -{ - return devclwalk(c, name); -} - void pipestat(Chan *c, char *db) { diff --git a/port/devproc.c b/port/devproc.c index e89f2459acc195d7e88ae4a47485e5bb1f046b6c..6ee99317128caa505c9bdb5967cda42b615ee6d4 100644 --- a/port/devproc.c +++ b/port/devproc.c @@ -101,12 +101,6 @@ procwalk(Chan *c, char *name) return devwalk(c, name, 0, 0, procgen); } -Chan* -procclwalk(Chan *c, char *name) -{ - return devclwalk(c, name); -} - void procstat(Chan *c, char *db) { diff --git a/port/devroot.c b/port/devroot.c index 1318207652b76ef9fc6f39577686b0ec61e073f4..2394b9f97ba5f6e3bc1d82a1b83f46d6418c0888 100644 --- a/port/devroot.c +++ b/port/devroot.c @@ -61,12 +61,6 @@ rootwalk(Chan *c, char *name) return devwalk(c, name, rootdir, nroot, devgen); } -Chan* -rootclwalk(Chan *c, char *name) -{ - return devclwalk(c, name); -} - void rootstat(Chan *c, char *dp) { diff --git a/port/devscsi.c b/port/devscsi.c index beeae49edd7350fc866a4887d9d47030a78a5d64..c10dfaac9153ea51c6ba12e108931a6880fb7034 100644 --- a/port/devscsi.c +++ b/port/devscsi.c @@ -95,12 +95,6 @@ scsiwalk(Chan *c, char *name) return devwalk(c, name, 0, 0, scsigen); } -Chan* -scsiclwalk(Chan *c, char *name) -{ - return devclwalk(c, name); -} - void scsistat(Chan *c, char *db) { diff --git a/port/devsrv.c b/port/devsrv.c index 79797e2324407633462782181cda099542508321..58e6e4b61c9dd7f011eb399b41eddc3b5e7a7840 100644 --- a/port/devsrv.c +++ b/port/devsrv.c @@ -104,12 +104,6 @@ srvwalk(Chan *c, char *name) return 1; } -Chan* -srvclwalk(Chan *c, char *name) -{ - return devclwalk(c, name); -} - void srvstat(Chan *c, char *db) { diff --git a/port/devwren.c b/port/devwren.c index 448d08c9d172d1a0d5186159f8bf34945ae5ab53..bddc62cc6319d817afadfb4aec269001b8011a5b 100644 --- a/port/devwren.c +++ b/port/devwren.c @@ -170,12 +170,6 @@ wrenwalk(Chan *c, char *name) return devwalk(c, name, wrendir, NWREN, wrengen); } -Chan* -wrenclwalk(Chan *c, char *name) -{ - return devclwalk(c, name); -} - void wrenstat(Chan *c, char *db) { diff --git a/port/fault.c b/port/fault.c index 0feeaca3dd54d9c0271ec2e060dd406c53d080b2..e87d01c85a6514da962a91750b4b2e3797b8c917 100644 --- a/port/fault.c +++ b/port/fault.c @@ -19,6 +19,7 @@ fault(ulong addr, int read) int i, touched = 0; KMap *k, *k1; + m->pfault++; s = seg(u->p, addr); if(s == 0){ if(addr > USTKTOP) diff --git a/power/dat.h b/power/dat.h index 42d4ae0c9b5834db1741ba3b4ef37f245e730826..42a578c00c9e31be15f0741d111c5254367bd020 100644 --- a/power/dat.h +++ b/power/dat.h @@ -193,7 +193,6 @@ struct Dev long (*write)(Chan*, void*, long, ulong); void (*remove)(Chan*); void (*wstat)(Chan*, char*); - Chan *(*clwalk)(Chan*, char*); }; struct Dirtab diff --git a/power/devbit3.c b/power/devbit3.c index bf1a9931143b6a9543d9d892d0fe12a57751b81c..a21bab846cc034a76197144226126071d5968f0a 100644 --- a/power/devbit3.c +++ b/power/devbit3.c @@ -68,12 +68,6 @@ bit3clone(Chan *c, Chan *nc) return devclone(c, nc); } -Chan* -bit3clwalk(Chan *c, char *name) -{ - return devclwalk(c, name); -} - int bit3walk(Chan *c, char *name) { diff --git a/power/devhotrod.c b/power/devhotrod.c index 1a1ef940a2007e16b1221593b9639b680903fa5d..51af70930fcfb4c5f6fc355fa7b8a2a742889df9 100644 --- a/power/devhotrod.c +++ b/power/devhotrod.c @@ -152,12 +152,6 @@ hotrodwalk(Chan *c, char *name) return devwalk(c, name, hotroddir, NHOTRODDIR, devgen); } -Chan* -hotrodclwalk(Chan *c, char *name) -{ - return devclwalk(c, name); -} - void hotrodstat(Chan *c, char *dp) { diff --git a/power/devhs.c b/power/devhs.c index 2538e41b1b0f286fc5dc92a044e8b028833c7ca8..0e890244385962e04bf33e09a3d7c0a564f7d8bb 100644 --- a/power/devhs.c +++ b/power/devhs.c @@ -184,12 +184,6 @@ hsvmewalk(Chan *c, char *name) return devwalk(c, name, 0, 0, streamgen); } -Chan* -hsvmeclwalk(Chan *c, char *name) -{ - return devclwalk(c, name); -} - void hsvmestat(Chan *c, char *dp) { diff --git a/power/devrtc.c b/power/devrtc.c index a48ad14ad226f273080b355b8b761b5015847e62..c1709ed6279a78da7dfcf6f68316bd173cf751ab 100644 --- a/power/devrtc.c +++ b/power/devrtc.c @@ -104,12 +104,6 @@ rtcwalk(Chan *c, char *name) return 0; } -Chan* -rtcclwalk(Chan *c, char *name) -{ - return devclwalk(c, name); -} - void rtcstat(Chan *c, char *dp) { diff --git a/power/faultmips.c b/power/faultmips.c index 0b7e360373f02491144cfad39e08ee32997cbc1f..a86a63ca34e92ac2026d008dbfbe9d8bd292b379 100644 --- a/power/faultmips.c +++ b/power/faultmips.c @@ -17,7 +17,6 @@ faultmips(Ureg *ur, int user, int code) extern char *excname[]; int read; - m->pfault++; addr = ur->badvaddr; addr &= ~(BY2PG-1); read = !(code==CTLBM || code==CTLBS); diff --git a/ss/dat.h b/ss/dat.h index eb49e3eed720814600fbd45418671825f649ec17..8ff5f445cfd27a04882c8144796a2ce4b6824bc3 100644 --- a/ss/dat.h +++ b/ss/dat.h @@ -111,6 +111,7 @@ struct Chan Stream *stream; /* for stream channels */ void *aux; Qid pgrpid; /* for #p/notepg */ + int mntindex; /* for devmnt */ }; Chan *mchan; /* channel to mounted server */ Qid mqid; /* qid of root of mount point */ @@ -178,7 +179,6 @@ struct Dev long (*write)(Chan*, void*, long, ulong ); void (*remove)(Chan*); void (*wstat)(Chan*, char*); - Chan *(*clwalk)(Chan*, char*); }; struct Dirtab @@ -227,6 +227,15 @@ struct Mach char pidhere[NTLBPID]; /* is this tlbpid possibly in this mmu? */ int lastpid; /* last pid allocated on this machine */ Proc *pidproc[NTLBPID]; /* process that owns this pid on this mach */ + + int tlbfault; + int tlbpurge; + int pfault; + int cs; + int syscall; + int spinlock; + int intr; + int stack[1]; };