| plan 9 kernel history: overview | file list | diff list |
1993/0309/port/devproc.c (diff list | history)
| 1990/0227/sys/src/9/port/devproc.c:82,87 – 1990/03081/sys/src/9/port/devproc.c:82,88 (short | long) | ||
| 1990/0227 | Chan* procattach(char *spec) { | |
| 1990/03081 | Chan *c; | |
| 1990/0227 | return devattach('p', spec); } | |
| 1990/0227/sys/src/9/port/devproc.c:110,115 – 1990/03081/sys/src/9/port/devproc.c:111,121 | ||
| 1990/0227 | Orig *o; Chan *tc; | |
| 1990/03081 | if(c->qid == CHDIR){ if(omode != OREAD) error(0, Eperm); goto done; } | |
| 1990/0227 | p = proctab(SLOT(c->qid)); if((p->pid&PIDMASK) != PID(c->qid)) Died: | |
| 1990/0227/sys/src/9/port/devproc.c:156,161 – 1990/03081/sys/src/9/port/devproc.c:162,168 | ||
| 1990/0227 | */ if(p->state != Dead) c->qid |= (p->pid&PIDMASK)<<PIDSHIFT; | |
| 1990/03081 | done: | |
| 1990/0227 | c->mode = omode; c->flag |= COPEN; c->offset = 0; | |
| 1990/03081/sys/src/9/port/devproc.c:147,155 – 1990/0424/sys/src/9/port/devproc.c:147,158 (short | long) | ||
| 1990/0227 | case Qnote: break; case Qdir: | |
| 1990/0424 | if(omode!=OREAD) error(0, Eperm); break; case Qmem: | |
| 1990/0227 | if(omode!=OREAD) error(0, Eperm); break; | |
| 1990/0424/sys/src/9/port/devproc.c:147,161 – 1990/0614/sys/src/9/port/devproc.c:147,158 (short | long) | ||
| 1990/0227 | case Qnote: break; case Qdir: | |
| 1990/0614 | case Qmem: | |
| 1990/0227 | case Qproc: case Qstatus: | |
| 1990/0424 | if(omode!=OREAD) error(0, Eperm); break; | |
| 1990/0227 |
| |
| 1990/0424/sys/src/9/port/devproc.c:204,209 – 1990/0614/sys/src/9/port/devproc.c:201,208 | ||
| 1990/0227 | Seg *s; Orig *o; Page *pg; | |
| 1990/0614 | KMap *k; PTE *pte, *opte; | |
| 1990/0227 | int i; long l; long pid; | |
| 1990/0424/sys/src/9/port/devproc.c:240,253 – 1990/0614/sys/src/9/port/devproc.c:239,263 | ||
| 1990/0227 | unlock(o); error(0, Egreg); } | |
| 1990/0614 | pte = &o->pte[(c->offset-o->va)>>PGSHIFT]; if(s->mod){ opte = pte; while(pte = pte->nextmod) /* assign = */ if(pte->proc == p) break; if(pte == 0) pte = opte; } pg = pte->page; | |
| 1990/0227 | unlock(o); if(pg == 0){ | |
| 1990/0614 | pprint("nonresident page addr %lux (complain to rob)\n", c->offset); | |
| 1990/0227 | memset(a, 0, n); }else{ | |
| 1990/0614 | k = kmap(pg); b = (char*)VA(k); | |
| 1990/0227 | memcpy(a, b+(c->offset&(BY2PG-1)), n); | |
| 1990/0614 | kunmap(k); | |
| 1990/0227 | } return n; } | |
| 1990/0424/sys/src/9/port/devproc.c:259,273 – 1990/0614/sys/src/9/port/devproc.c:269,285 | ||
| 1990/0227 | pg = p->upage; if(pg==0 || (p->pid&PIDMASK)!=PID(c->qid)) error(0, Eprocdied); | |
| 1990/0614 | k = kmap(pg); b = (char*)VA(k); | |
| 1990/0227 | memcpy(a, b+(c->offset-USERADDR), n); | |
| 1990/0614 | kunmap(k); | |
| 1990/0227 | return n; } /* kernel memory. BUG: shouldn't be so easygoing. BUG: mem mapping? */ | |
| 1990/0614 | if(c->offset>=KZERO && c->offset<KZERO+conf.npage0*BY2PG){ if(c->offset+n > KZERO+conf.npage0*BY2PG) n = KZERO+conf.npage0*BY2PG - c->offset; | |
| 1990/0227 | memcpy(a, (char*)c->offset, n); return n; } | |
| 1990/0424/sys/src/9/port/devproc.c:282,289 – 1990/0614/sys/src/9/port/devproc.c:294,303 | ||
| 1990/0227 | } if((p->pid&PIDMASK) != PID(c->qid)) error(0, Eprocdied); | |
| 1990/0614 | k = kmap(p->upage); up = (User*)VA(k); | |
| 1990/0227 | if(up->p != p){ | |
| 1990/0614 | kunmap(k); | |
| 1990/0227 | pprint("note read u/p mismatch"); error(0, Egreg); } | |
| 1990/0424/sys/src/9/port/devproc.c:297,302 – 1990/0614/sys/src/9/port/devproc.c:311,317 | ||
| 1990/0227 | memcpy(&up->note[0], &up->note[1], up->nnote*sizeof(Note)); n = ERRLEN; } | |
| 1990/0614 | kunmap(k); | |
| 1990/0227 | unlock(&p->debug); return n; | |
| 1990/0424/sys/src/9/port/devproc.c:318,324 – 1990/0614/sys/src/9/port/devproc.c:333,339 | ||
| 1990/0227 | l = p->time[i]; if(i == TReal) l = MACHP(0)->ticks - l; | |
| 1990/0614 | l = TK2MS(l); | |
| 1990/0227 | readnum(0, statbuf+2*NAMELEN+12+NUMSIZE*i, NUMSIZE, l, NUMSIZE); } memcpy(a, statbuf+c->offset, n); | |
| 1990/0424/sys/src/9/port/devproc.c:333,338 – 1990/0614/sys/src/9/port/devproc.c:348,354 | ||
| 1990/0227 | { Proc *p; User *up; | |
| 1990/0614 | KMap *k; | |
| 1990/0227 | char buf[ERRLEN]; if(c->qid & CHDIR) | |
| 1990/0424/sys/src/9/port/devproc.c:355,365 – 1990/0614/sys/src/9/port/devproc.c:371,384 | ||
| 1990/0227 | error(0, Ebadctl); break; case Qnote: | |
| 1990/0614 | k = kmap(p->upage); up = (User*)VA(k); | |
| 1990/0227 | if(up->p != p){ | |
| 1990/0614 | kunmap(k); | |
| 1990/0227 | pprint("note write u/p mismatch"); error(0, Egreg); } | |
| 1990/0614 | kunmap(k); | |
| 1990/0227 | if(n >= ERRLEN-1) error(0, Etoobig); if(n>=4 && strncmp(va, "sys:", 4)==0) | |
| 1990/0614/sys/src/9/port/devproc.c:4,9 – 1990/0914/sys/src/9/port/devproc.c:4,10 (short | long) | ||
| 1990/0227 | #include "dat.h" #include "fns.h" #include "errno.h" | |
| 1990/0914 | #include "io.h" | |
| 1990/0227 | #include "devtab.h" | |
| 1990/0614/sys/src/9/port/devproc.c:280,285 – 1990/0914/sys/src/9/port/devproc.c:281,291 | ||
| 1990/0614 | if(c->offset>=KZERO && c->offset<KZERO+conf.npage0*BY2PG){ if(c->offset+n > KZERO+conf.npage0*BY2PG) n = KZERO+conf.npage0*BY2PG - c->offset; | |
| 1990/0914 | memcpy(a, (char*)c->offset, n); return n; } else if(c->offset>=UNCACHED && c->offset<UNCACHED+conf.npage0*BY2PG){ if(c->offset+n > UNCACHED+conf.npage0*BY2PG) n = UNCACHED+conf.npage0*BY2PG - c->offset; | |
| 1990/0227 | memcpy(a, (char*)c->offset, n); return n; } | |
| 1990/0914/sys/src/9/port/devproc.c:4,11 – 1990/1110/sys/src/9/port/devproc.c:4,13 (short | long) | ||
| 1990/0227 | #include "dat.h" #include "fns.h" #include "errno.h" | |
| 1990/0914 |
| |
| 1990/0227 | ||
| 1990/1110 | /* BUG mips only TAKE IT OUT */ #include "io.h" | |
| 1990/0227 | #include "devtab.h" enum{ | |
| 1990/0914/sys/src/9/port/devproc.c:13,18 – 1990/1110/sys/src/9/port/devproc.c:15,21 | ||
| 1990/0227 | Qctl, Qmem, Qnote, | |
| 1990/1110 | Qnotepg, | |
| 1990/0227 | Qproc, Qstatus, Qtext, | |
| 1990/0914/sys/src/9/port/devproc.c:22,27 – 1990/1110/sys/src/9/port/devproc.c:25,31 | ||
| 1990/0227 | "ctl", Qctl, 0, 0600, "mem", Qmem, 0, 0600, "note", Qnote, 0, 0600, | |
| 1990/1110 | "notepg", Qnotepg, 0, 0200, | |
| 1990/0227 | "proc", Qproc, sizeof(Proc), 0600, "status", Qstatus, NAMELEN+12+6*12, 0600, "text", Qtext, 0, 0600, | |
| 1990/0914/sys/src/9/port/devproc.c:109,114 – 1990/1110/sys/src/9/port/devproc.c:113,119 | ||
| 1990/0227 | procopen(Chan *c, int omode) { Proc *p; | |
| 1990/1110 | Pgrp *pg; | |
| 1990/0227 | Orig *o; Chan *tc; | |
| 1990/0914/sys/src/9/port/devproc.c:118,123 – 1990/1110/sys/src/9/port/devproc.c:123,129 | ||
| 1990/03081 | goto done; } | |
| 1990/0227 | p = proctab(SLOT(c->qid)); | |
| 1990/1110 | pg = p->pgrp; | |
| 1990/0227 | if((p->pid&PIDMASK) != PID(c->qid)) Died: error(0, Eprocdied); | |
| 1990/0914/sys/src/9/port/devproc.c:147,157 – 1990/1110/sys/src/9/port/devproc.c:153,170 | ||
| 1990/0227 | case Qctl: case Qnote: break; | |
| 1990/1110 | case Qnotepg: if(omode != OWRITE) error(0, Eperm); c->pgrpid = (pg->pgrpid<<PIDSHIFT)|((pg->index+1)<<QSHIFT); break; | |
| 1990/0227 | case Qdir: | |
| 1990/0614 | case Qmem: | |
| 1990/0227 | case Qproc: case Qstatus: | |
| 1990/0424 |
| |
| 1990/1110 | if(omode != OREAD) | |
| 1990/0424 | error(0, Eperm); break; | |
| 1990/0227 | default: | |
| 1990/0914/sys/src/9/port/devproc.c:264,270 – 1990/1110/sys/src/9/port/devproc.c:277,283 | ||
| 1990/0227 | } /* u area */ | |
| 1990/1110 | if(c->offset>=USERADDR && c->offset<USERADDR+BY2PG){ | |
| 1990/0227 | if(c->offset+n > USERADDR+BY2PG) n = USERADDR+BY2PG - c->offset; pg = p->upage; | |
| 1990/0914/sys/src/9/port/devproc.c:283,289 – 1990/1110/sys/src/9/port/devproc.c:296,303 | ||
| 1990/0614 | n = KZERO+conf.npage0*BY2PG - c->offset; | |
| 1990/0914 | memcpy(a, (char*)c->offset, n); return n; | |
| 1990/1110 | }else if(c->offset>=UNCACHED && c->offset<UNCACHED+conf.npage0*BY2PG){ /* BUT mips only TAKE IT OUT */ | |
| 1990/0914 | if(c->offset+n > UNCACHED+conf.npage0*BY2PG) n = UNCACHED+conf.npage0*BY2PG - c->offset; | |
| 1990/0227 | memcpy(a, (char*)c->offset, n); | |
| 1990/0914/sys/src/9/port/devproc.c:353,358 – 1990/1110/sys/src/9/port/devproc.c:367,373 | ||
| 1990/0227 | procwrite(Chan *c, void *va, long n) { Proc *p; | |
| 1990/1110 | Pgrp *pg; | |
| 1990/0227 | User *up; | |
| 1990/0614 | KMap *k; | |
| 1990/0227 | char buf[ERRLEN]; | |
| 1990/0914/sys/src/9/port/devproc.c:359,364 – 1990/1110/sys/src/9/port/devproc.c:374,399 | ||
| 1990/0227 | if(c->qid & CHDIR) error(0, Eisdir); | |
| 1990/1110 | /* * Special case: don't worry about process, just use remembered group */ if(QID(c->qid) == Qnotepg){ pg = pgrptab(SLOT(c->pgrpid)); lock(&pg->debug); if(waserror()){ unlock(&pg->debug); nexterror(); } if((pg->pgrpid&PIDMASK) != PID(c->pgrpid)){ unlock(&pg->debug); goto Died; } pgrpnote(pg, va, n, NUser); unlock(&pg->debug); return n; } | |
| 1990/0227 | p = proctab(SLOT(c->qid)); lock(&p->debug); if(waserror()){ | |
| 1990/1110/sys/src/9/port/devproc.c:155,161 – 1990/1115/sys/src/9/port/devproc.c:155,161 (short | long) | ||
| 1990/0227 | break; | |
| 1990/1110 | case Qnotepg: | |
| 1990/1115 | if(omode!=OWRITE || pg->pgrpid==1) /* easy to do by mistake */ | |
| 1990/1110 | error(0, Eperm); c->pgrpid = (pg->pgrpid<<PIDSHIFT)|((pg->index+1)<<QSHIFT); break; | |
| 1990/1115/sys/src/9/port/devproc.c:22,49 – 1990/11211/sys/src/9/port/devproc.c:22,49 (short | long) | ||
| 1990/0227 | }; Dirtab procdir[]={ | |
| 1990/1110 |
| |
| 1990/0227 |
| |
| 1990/11211 | "ctl", {Qctl}, 0, 0600, "mem", {Qmem}, 0, 0600, "note", {Qnote}, 0, 0600, "notepg", {Qnotepg}, 0, 0200, "proc", {Qproc}, sizeof(Proc), 0600, "status", {Qstatus}, NAMELEN+12+6*12, 0600, "text", {Qtext}, 0, 0600, | |
| 1990/0227 | }; /* | |
| 1990/11211 | * Qids are, in path: | |
| 1990/0227 | * 4 bits of file type (qids above) | |
| 1990/11211 | * 24 bits of process slot number + 1 * in vers, * 32 bits of pid, for consistency checking * If notepg, c->pgrpid.path is pgrp slot, .vers is pgrpid. | |
| 1990/0227 | */ #define NPROC (sizeof procdir/sizeof(Dirtab)) #define QSHIFT 4 /* location in qid of proc slot # */ | |
| 1990/11211 | #define QID(q) (((q).path&0x0000000F)>>0) #define SLOT(q) ((((q).path&0x0FFFFFFF0)>>QSHIFT)-1) #define PID(q) ((q).vers) | |
| 1990/0227 | int procgen(Chan *c, Dirtab *tab, int ntab, int s, Dir *dp) | |
| 1990/1115/sys/src/9/port/devproc.c:52,58 – 1990/11211/sys/src/9/port/devproc.c:52,58 | ||
| 1990/0227 | char buf[NAMELEN]; ulong pid; | |
| 1990/11211 | if(c->qid.path == CHDIR){ | |
| 1990/0227 | if(s >= conf.nproc) return -1; p = proctab(s); | |
| 1990/1115/sys/src/9/port/devproc.c:60,66 – 1990/11211/sys/src/9/port/devproc.c:60,66 | ||
| 1990/0227 | if(pid == 0) return 0; sprint(buf, "%d", pid); | |
| 1990/11211 | devdir(c, (Qid){CHDIR|((s+1)<<QSHIFT), pid}, buf, 0, CHDIR|0500, dp); | |
| 1990/0227 | return 1; } if(s >= NPROC) | |
| 1990/1115/sys/src/9/port/devproc.c:68,74 – 1990/11211/sys/src/9/port/devproc.c:68,75 | ||
| 1990/0227 | if(tab) panic("procgen"); tab = &procdir[s]; | |
| 1990/11211 | devdir(c, (Qid){(~CHDIR)&(c->qid.path|tab->qid.path), c->qid.vers}, tab->name, tab->length, tab->perm, dp); | |
| 1990/0227 | return 1; } | |
| 1990/1115/sys/src/9/port/devproc.c:117,132 – 1990/11211/sys/src/9/port/devproc.c:118,133 | ||
| 1990/0227 | Orig *o; Chan *tc; | |
| 1990/03081 |
| |
| 1990/11211 | if(c->qid.path == CHDIR){ | |
| 1990/03081 | if(omode != OREAD) | |
| 1990/11211 | error(Eperm); | |
| 1990/03081 | goto done; } | |
| 1990/0227 | p = proctab(SLOT(c->qid)); | |
| 1990/1110 | pg = p->pgrp; | |
| 1990/0227 |
| |
| 1990/11211 | if(p->pid != PID(c->qid)) | |
| 1990/0227 | Died: | |
| 1990/11211 | error(Eprocdied); | |
| 1990/0227 | omode = openmode(omode); switch(QID(c->qid)){ | |
| 1990/1115/sys/src/9/port/devproc.c:144,150 – 1990/11211/sys/src/9/port/devproc.c:145,151 | ||
| 1990/0227 | } if(!(tc->flag&COPEN) || tc->mode!=OREAD) goto Close; | |
| 1990/11211 | if(p->pid != PID(c->qid)) | |
| 1990/0227 | goto Close; qlock(tc); tc->offset = 0; | |
| 1990/1115/sys/src/9/port/devproc.c:156,163 – 1990/11211/sys/src/9/port/devproc.c:157,165 | ||
| 1990/1110 | case Qnotepg: | |
| 1990/1115 | if(omode!=OWRITE || pg->pgrpid==1) /* easy to do by mistake */ | |
| 1990/1110 |
| |
| 1990/11211 | error(Eperm); c->pgrpid.path = pg->index+1; c->pgrpid.vers = pg->pgrpid; | |
| 1990/1110 | break; | |
| 1990/0227 | case Qdir: | |
| 1990/1115/sys/src/9/port/devproc.c:165,181 – 1990/11211/sys/src/9/port/devproc.c:167,183 | ||
| 1990/0227 | case Qproc: case Qstatus: | |
| 1990/1110 | if(omode != OREAD) | |
| 1990/0424 |
| |
| 1990/11211 | error(Eperm); | |
| 1990/0424 | break; | |
| 1990/0227 | default: pprint("unknown qid in devopen\n"); | |
| 1990/11211 | error(Egreg); | |
| 1990/0227 | } /* * Affix pid to qid */ if(p->state != Dead) | |
| 1990/11211 | c->qid.vers = p->pid; | |
| 1990/03081 | done: | |
| 1990/0227 | c->mode = omode; c->flag |= COPEN; | |
| 1990/1115/sys/src/9/port/devproc.c:186,204 – 1990/11211/sys/src/9/port/devproc.c:188,206 | ||
| 1990/0227 | void proccreate(Chan *c, char *name, int omode, ulong perm) { | |
| 1990/11211 | error(Eperm); | |
| 1990/0227 | } void procremove(Chan *c) { | |
| 1990/11211 | error(Eperm); | |
| 1990/0227 | } void procwstat(Chan *c, char *db) { | |
| 1990/11211 | error(Eperm); | |
| 1990/0227 | } void | |
| 1990/1115/sys/src/9/port/devproc.c:222,228 – 1990/11211/sys/src/9/port/devproc.c:224,230 | ||
| 1990/0227 | long pid; User *up; | |
| 1990/11211 | if(c->qid.path & CHDIR) | |
| 1990/0227 | return devdirread(c, a, n, 0, 0, procgen); /* | |
| 1990/1115/sys/src/9/port/devproc.c:229,236 – 1990/11211/sys/src/9/port/devproc.c:231,238 | ||
| 1990/0227 | * BUG: should lock(&p->debug)? */ p = proctab(SLOT(c->qid)); | |
| 1990/11211 | if(p->pid != PID(c->qid)) error(Eprocdied); | |
| 1990/0227 | switch(QID(c->qid)){ case Qmem: | |
| 1990/1115/sys/src/9/port/devproc.c:243,257 – 1990/11211/sys/src/9/port/devproc.c:245,259 | ||
| 1990/0227 | if(s){ o = s->o; if(o == 0) | |
| 1990/11211 | error(Eprocdied); | |
| 1990/0227 | lock(o); | |
| 1990/11211 | if(s->o!=o || p->pid!=PID(c->qid)){ | |
| 1990/0227 | unlock(o); | |
| 1990/11211 | error(Eprocdied); | |
| 1990/0227 | } if(seg(p, c->offset) != s){ unlock(o); | |
| 1990/11211 | error(Egreg); | |
| 1990/0227 | } | |
| 1990/0614 | pte = &o->pte[(c->offset-o->va)>>PGSHIFT]; if(s->mod){ | |
| 1990/1115/sys/src/9/port/devproc.c:281,288 – 1990/11211/sys/src/9/port/devproc.c:283,290 | ||
| 1990/0227 | if(c->offset+n > USERADDR+BY2PG) n = USERADDR+BY2PG - c->offset; pg = p->upage; | |
| 1990/11211 | if(pg==0 || p->pid!=PID(c->qid)) error(Eprocdied); | |
| 1990/0614 | k = kmap(pg); b = (char*)VA(k); | |
| 1990/0227 | memcpy(a, b+(c->offset-USERADDR), n); | |
| 1990/1115/sys/src/9/port/devproc.c:296,307 – 1990/11211/sys/src/9/port/devproc.c:298,303 | ||
| 1990/0614 | n = KZERO+conf.npage0*BY2PG - c->offset; | |
| 1990/0914 | memcpy(a, (char*)c->offset, n); return n; | |
| 1990/1110 |
| |
| 1990/0914 |
| |
| 1990/0227 |
| |
| 1990/1115/sys/src/9/port/devproc.c:312,328 – 1990/11211/sys/src/9/port/devproc.c:308,324 | ||
| 1990/0227 | unlock(&p->debug); nexterror(); } | |
| 1990/11211 | if(p->pid != PID(c->qid)) error(Eprocdied); | |
| 1990/0614 | k = kmap(p->upage); up = (User*)VA(k); | |
| 1990/0227 | if(up->p != p){ | |
| 1990/0614 | kunmap(k); | |
| 1990/0227 | pprint("note read u/p mismatch"); | |
| 1990/11211 | error(Egreg); | |
| 1990/0227 | } if(n < ERRLEN) | |
| 1990/11211 | error(Etoosmall); | |
| 1990/0227 | if(up->nnote == 0) n = 0; else{ | |
| 1990/1115/sys/src/9/port/devproc.c:359,365 – 1990/11211/sys/src/9/port/devproc.c:355,361 | ||
| 1990/0227 | memcpy(a, statbuf+c->offset, n); return n; } | |
| 1990/11211 | error(Egreg); | |
| 1990/0227 | } | |
| 1990/1115/sys/src/9/port/devproc.c:372,391 – 1990/11211/sys/src/9/port/devproc.c:368,387 | ||
| 1990/0614 | KMap *k; | |
| 1990/0227 | char buf[ERRLEN]; | |
| 1990/11211 | if(c->qid.path & CHDIR) error(Eisdir); | |
| 1990/1110 | /* * Special case: don't worry about process, just use remembered group */ if(QID(c->qid) == Qnotepg){ | |
| 1990/11211 | pg = pgrptab(c->pgrpid.path-1); | |
| 1990/1110 | lock(&pg->debug); if(waserror()){ unlock(&pg->debug); nexterror(); } | |
| 1990/11211 | if(pg->pgrpid != c->pgrpid.vers){ | |
| 1990/1110 | unlock(&pg->debug); goto Died; } | |
| 1990/1115/sys/src/9/port/devproc.c:400,408 – 1990/11211/sys/src/9/port/devproc.c:396,404 | ||
| 1990/0227 | unlock(&p->debug); nexterror(); } | |
| 1990/11211 | if(p->pid != PID(c->qid)) | |
| 1990/0227 | Died: | |
| 1990/11211 | error(Eprocdied); | |
| 1990/0227 | switch(QID(c->qid)){ case Qctl: | |
| 1990/1115/sys/src/9/port/devproc.c:409,415 – 1990/11211/sys/src/9/port/devproc.c:405,411 | ||
| 1990/0227 | if(p->state==Broken && n>=4 && strncmp(va, "exit", 4)==0) ready(p); else | |
| 1990/11211 | error(Ebadctl); | |
| 1990/0227 | break; case Qnote: | |
| 1990/0614 | k = kmap(p->upage); | |
| 1990/1115/sys/src/9/port/devproc.c:417,450 – 1990/11211/sys/src/9/port/devproc.c:413,434 | ||
| 1990/0227 | if(up->p != p){ | |
| 1990/0614 | kunmap(k); | |
| 1990/0227 | pprint("note write u/p mismatch"); | |
| 1990/11211 | error(Egreg); | |
| 1990/0227 | } | |
| 1990/0614 | kunmap(k); | |
| 1990/0227 | if(n >= ERRLEN-1) | |
| 1990/11211 | error(Etoobig); | |
| 1990/0227 | if(n>=4 && strncmp(va, "sys:", 4)==0) | |
| 1990/11211 | error(Ebadarg); | |
| 1990/0227 | memcpy(buf, va, n); buf[n] = 0; if(!postnote(p, 0, buf, NUser)) | |
| 1990/11211 | error(Enonote); | |
| 1990/0227 | break; default: pprint("unknown qid in procwrite\n"); | |
| 1990/11211 | error(Egreg); | |
| 1990/0227 | } unlock(&p->debug); return n; | |
| 1990/11211/sys/src/9/port/devproc.c:371,376 – 1990/1126/sys/src/9/port/devproc.c:371,377 (short | long) | ||
| 1990/11211 | if(c->qid.path & CHDIR) error(Eisdir); | |
| 1990/1110 | ||
| 1990/1126 | p = proctab(SLOT(c->qid)); | |
| 1990/1110 | /* * Special case: don't worry about process, just use remembered group */ | |
| 1990/11211/sys/src/9/port/devproc.c:390,396 – 1990/1126/sys/src/9/port/devproc.c:391,396 | ||
| 1990/1110 | return n; } | |
| 1990/0227 |
| |
| 1990/1126/sys/src/9/port/devproc.c:5,13 – 1990/1128/sys/src/9/port/devproc.c:5,10 (short | long) | ||
| 1990/0227 | #include "fns.h" #include "errno.h" | |
| 1990/1110 |
| |
| 1990/0227 | #include "devtab.h" enum{ | |
| 1990/1126/sys/src/9/port/devproc.c:34,40 – 1990/1128/sys/src/9/port/devproc.c:31,37 | ||
| 1990/0227 | /* | |
| 1990/11211 | * Qids are, in path: | |
| 1990/0227 | * 4 bits of file type (qids above) | |
| 1990/11211 |
| |
| 1990/1128 | * 23 bits of process slot number + 1 | |
| 1990/11211 | * in vers, * 32 bits of pid, for consistency checking * If notepg, c->pgrpid.path is pgrp slot, .vers is pgrpid. | |
| 1990/1126/sys/src/9/port/devproc.c:42,48 – 1990/1128/sys/src/9/port/devproc.c:39,45 | ||
| 1990/0227 | #define NPROC (sizeof procdir/sizeof(Dirtab)) #define QSHIFT 4 /* location in qid of proc slot # */ | |
| 1990/11211 | #define QID(q) (((q).path&0x0000000F)>>0) | |
| 1990/1128 | #define SLOT(q) ((((q).path&0x07FFFFFF0)>>QSHIFT)-1) | |
| 1990/11211 | #define PID(q) ((q).vers) | |
| 1990/0227 | int | |
| 1990/1128/sys/src/9/port/devproc.c:374,390 – 1991/0212/sys/src/9/port/devproc.c:374,390 (short | long) | ||
| 1990/1110 | */ if(QID(c->qid) == Qnotepg){ | |
| 1990/11211 | pg = pgrptab(c->pgrpid.path-1); | |
| 1990/1110 |
| |
| 1991/0212 | qlock(&pg->debug); | |
| 1990/1110 | if(waserror()){ | |
| 1991/0212 | qunlock(&pg->debug); | |
| 1990/1110 | nexterror(); } | |
| 1990/11211 | if(pg->pgrpid != c->pgrpid.vers){ | |
| 1990/1110 |
| |
| 1991/0212 | qunlock(&pg->debug); | |
| 1990/1110 | goto Died; } pgrpnote(pg, va, n, NUser); | |
| 1991/0212 | qunlock(&pg->debug); | |
| 1990/1110 | return n; } | |
| 1991/0212/sys/src/9/port/devproc.c:269,280 – 1991/0318/sys/src/9/port/devproc.c:269,279 (short | long) | ||
| 1990/0227 | }else{ | |
| 1990/0614 | k = kmap(pg); b = (char*)VA(k); | |
| 1990/0227 |
| |
| 1991/0318 | memmove(a, b+(c->offset&(BY2PG-1)), n); | |
| 1990/0614 | kunmap(k); | |
| 1990/0227 | } return n; } | |
| 1990/1110 | if(c->offset>=USERADDR && c->offset<USERADDR+BY2PG){ | |
| 1990/0227 | if(c->offset+n > USERADDR+BY2PG) | |
| 1991/0212/sys/src/9/port/devproc.c:284,290 – 1991/0318/sys/src/9/port/devproc.c:283,289 | ||
| 1990/11211 | error(Eprocdied); | |
| 1990/0614 | k = kmap(pg); b = (char*)VA(k); | |
| 1990/0227 |
| |
| 1991/0318 | memmove(a, b+(c->offset-USERADDR), n); | |
| 1990/0614 | kunmap(k); | |
| 1990/0227 | return n; } | |
| 1991/0212/sys/src/9/port/devproc.c:293,299 – 1991/0318/sys/src/9/port/devproc.c:292,298 | ||
| 1990/0614 | if(c->offset>=KZERO && c->offset<KZERO+conf.npage0*BY2PG){ if(c->offset+n > KZERO+conf.npage0*BY2PG) n = KZERO+conf.npage0*BY2PG - c->offset; | |
| 1990/0914 |
| |
| 1991/0318 | memmove(a, (char*)c->offset, n); | |
| 1990/0914 | return n; | |
| 1990/0227 | } return 0; | |
| 1991/0212/sys/src/9/port/devproc.c:319,327 – 1991/0318/sys/src/9/port/devproc.c:318,326 | ||
| 1990/0227 | if(up->nnote == 0) n = 0; else{ | |
| 1991/0318 | memmove(va, up->note[0].msg, ERRLEN); | |
| 1990/0227 | up->nnote--; | |
| 1991/0318 | memmove(&up->note[0], &up->note[1], up->nnote*sizeof(Note)); | |
| 1990/0227 | n = ERRLEN; } | |
| 1990/0614 | kunmap(k); | |
| 1991/0212/sys/src/9/port/devproc.c:333,339 – 1991/0318/sys/src/9/port/devproc.c:332,338 | ||
| 1990/0227 | return 0; if(c->offset+n > sizeof(Proc)) n = sizeof(Proc) - c->offset; | |
| 1991/0318 | memmove(a, ((char*)p)+c->offset, n); | |
| 1990/0227 | return n; case Qstatus: | |
| 1991/0212/sys/src/9/port/devproc.c:349,355 – 1991/0318/sys/src/9/port/devproc.c:348,354 | ||
| 1990/0614 | l = TK2MS(l); | |
| 1990/0227 | readnum(0, statbuf+2*NAMELEN+12+NUMSIZE*i, NUMSIZE, l, NUMSIZE); } | |
| 1991/0318 | memmove(a, statbuf+c->offset, n); | |
| 1990/0227 | return n; } | |
| 1990/11211 | error(Egreg); | |
| 1991/0212/sys/src/9/port/devproc.c:417,423 – 1991/0318/sys/src/9/port/devproc.c:416,422 | ||
| 1990/11211 | error(Etoobig); | |
| 1990/0227 | if(n>=4 && strncmp(va, "sys:", 4)==0) | |
| 1990/11211 | error(Ebadarg); | |
| 1990/0227 |
| |
| 1991/0318 | memmove(buf, va, n); | |
| 1990/0227 | buf[n] = 0; if(!postnote(p, 0, buf, NUser)) | |
| 1990/11211 | error(Enonote); | |
| 1991/0318/sys/src/9/port/devproc.c:144,152 – 1991/0411/sys/src/9/port/devproc.c:144,152 (short | long) | ||
| 1990/0227 | goto Close; | |
| 1990/11211 | if(p->pid != PID(c->qid)) | |
| 1990/0227 | goto Close; | |
| 1991/0411 | qlock(&tc->rdl); | |
| 1990/0227 | tc->offset = 0; | |
| 1991/0411 | qunlock(&tc->rdl); | |
| 1990/0227 | return tc; case Qctl: case Qnote: | |
| 1991/0318/sys/src/9/port/devproc.c:206,212 – 1991/0411/sys/src/9/port/devproc.c:206,212 | ||
| 1990/0227 | } long | |
| 1991/0411 | procread(Chan *c, void *va, long n, ulong offset) | |
| 1990/0227 | { char *a = va, *b; char statbuf[2*NAMELEN+12+6*12]; | |
| 1991/0318/sys/src/9/port/devproc.c:236,244 – 1991/0411/sys/src/9/port/devproc.c:236,244 | ||
| 1990/0227 | /* * One page at a time */ | |
| 1991/0411 | if(((offset+n)&~(BY2PG-1)) != (offset&~(BY2PG-1))) n = BY2PG - (offset&(BY2PG-1)); s = seg(p, offset); | |
| 1990/0227 | if(s){ o = s->o; if(o == 0) | |
| 1991/0318/sys/src/9/port/devproc.c:248,258 – 1991/0411/sys/src/9/port/devproc.c:248,258 | ||
| 1990/0227 | unlock(o); | |
| 1990/11211 | error(Eprocdied); | |
| 1990/0227 | } | |
| 1991/0411 | if(seg(p, offset) != s){ | |
| 1990/0227 | unlock(o); | |
| 1990/11211 | error(Egreg); | |
| 1990/0227 | } | |
| 1990/0614 |
| |
| 1991/0411 | pte = &o->pte[(offset-o->va)>>PGSHIFT]; | |
| 1990/0614 | if(s->mod){ opte = pte; while(pte = pte->nextmod) /* assign = */ | |
| 1991/0318/sys/src/9/port/devproc.c:264,298 – 1991/0411/sys/src/9/port/devproc.c:264,298 | ||
| 1990/0614 | pg = pte->page; | |
| 1990/0227 | unlock(o); if(pg == 0){ | |
| 1990/0614 |
| |
| 1991/0411 | pprint("nonresident page addr %lux (complain to rob)\n", offset); | |
| 1990/0227 | memset(a, 0, n); }else{ | |
| 1990/0614 | k = kmap(pg); b = (char*)VA(k); | |
| 1991/0318 |
| |
| 1991/0411 | memmove(a, b+(offset&(BY2PG-1)), n); | |
| 1990/0614 | kunmap(k); | |
| 1990/0227 | } return n; } /* u area */ | |
| 1990/1110 |
| |
| 1990/0227 |
| |
| 1991/0411 | if(offset>=USERADDR && offset<USERADDR+BY2PG){ if(offset+n > USERADDR+BY2PG) n = USERADDR+BY2PG - offset; | |
| 1990/0227 | pg = p->upage; | |
| 1990/11211 | if(pg==0 || p->pid!=PID(c->qid)) error(Eprocdied); | |
| 1990/0614 | k = kmap(pg); b = (char*)VA(k); | |
| 1991/0318 |
| |
| 1991/0411 | memmove(a, b+(offset-USERADDR), n); | |
| 1990/0614 | kunmap(k); | |
| 1990/0227 | return n; } /* kernel memory. BUG: shouldn't be so easygoing. BUG: mem mapping? */ | |
| 1990/0614 |
| |
| 1991/0318 |
| |
| 1991/0411 | if(offset>=KZERO && offset<KZERO+conf.npage0*BY2PG){ if(offset+n > KZERO+conf.npage0*BY2PG) n = KZERO+conf.npage0*BY2PG - offset; memmove(a, (char*)offset, n); | |
| 1990/0914 | return n; | |
| 1990/0227 | } return 0; | |
| 1991/0318/sys/src/9/port/devproc.c:328,345 – 1991/0411/sys/src/9/port/devproc.c:328,345 | ||
| 1990/0227 | return n; case Qproc: | |
| 1991/0411 | if(offset >= sizeof(Proc)) | |
| 1990/0227 | return 0; | |
| 1991/0318 |
| |
| 1991/0411 | if(offset+n > sizeof(Proc)) n = sizeof(Proc) - offset; memmove(a, ((char*)p)+offset, n); | |
| 1990/0227 | return n; case Qstatus: | |
| 1991/0411 | if(offset >= sizeof statbuf) | |
| 1990/0227 | return 0; | |
| 1991/0411 | if(offset+n > sizeof statbuf) n = sizeof statbuf - offset; | |
| 1990/0227 | sprint(statbuf, "%-27s %-27s %-11s ", p->text, p->pgrp->user, statename[p->state]); for(i=0; i<6; i++){ l = p->time[i]; | |
| 1991/0318/sys/src/9/port/devproc.c:348,354 – 1991/0411/sys/src/9/port/devproc.c:348,354 | ||
| 1990/0614 | l = TK2MS(l); | |
| 1990/0227 | readnum(0, statbuf+2*NAMELEN+12+NUMSIZE*i, NUMSIZE, l, NUMSIZE); } | |
| 1991/0318 |
| |
| 1991/0411 | memmove(a, statbuf+offset, n); | |
| 1990/0227 | return n; } | |
| 1990/11211 | error(Egreg); | |
| 1991/0318/sys/src/9/port/devproc.c:356,362 – 1991/0411/sys/src/9/port/devproc.c:356,362 | ||
| 1990/0227 | long | |
| 1991/0411 | procwrite(Chan *c, void *va, long n, ulong offset) | |
| 1990/0227 | { Proc *p; | |
| 1990/1110 | Pgrp *pg; | |
| 1991/0411/sys/src/9/port/devproc.c:101,106 – 1991/0419/sys/src/9/port/devproc.c:101,112 (short | long) | ||
| 1990/0227 | return devwalk(c, name, 0, 0, procgen); } | |
| 1991/0419 | Chan* procclwalk(Chan *c, char *name) { return devclwalk(c, name); } | |
| 1990/0227 | void procstat(Chan *c, char *db) { | |
| 1991/0419/sys/src/9/port/devproc.c:101,112 – 1991/0427/sys/src/9/port/devproc.c:101,106 (short | long) | ||
| 1990/0227 | return devwalk(c, name, 0, 0, procgen); } | |
| 1991/0419 |
| |
| 1990/0227 | void procstat(Chan *c, char *db) { | |
| 1991/0427/sys/src/9/port/devproc.c:130,140 – 1991/0605/sys/src/9/port/devproc.c:130,142 (short | long) | ||
| 1990/0227 | switch(QID(c->qid)){ case Qtext: o = p->seg[TSEG].o; | |
| 1991/0605 | if(o==0 || p->state==Dead) | |
| 1990/0227 | goto Died; | |
| 1991/0605 | ||
| 1990/0227 | tc = o->chan; if(tc == 0) goto Died; | |
| 1991/0605 | ||
| 1990/0227 | if(incref(tc) == 0){ Close: close(tc); | |
| 1991/0427/sys/src/9/port/devproc.c:142,149 – 1991/0605/sys/src/9/port/devproc.c:144,153 | ||
| 1990/0227 | } if(!(tc->flag&COPEN) || tc->mode!=OREAD) goto Close; | |
| 1991/0605 | ||
| 1990/11211 | if(p->pid != PID(c->qid)) | |
| 1990/0227 | goto Close; | |
| 1991/0605 | ||
| 1991/0411 | qlock(&tc->rdl); | |
| 1990/0227 | tc->offset = 0; | |
| 1991/0411 | qunlock(&tc->rdl); | |
| 1991/0605/sys/src/9/port/devproc.c:328,333 – 1991/0614/sys/src/9/port/devproc.c:328,334 (short | long) | ||
| 1990/0227 | n = ERRLEN; } | |
| 1990/0614 | kunmap(k); | |
| 1991/0614 | poperror(); | |
| 1990/0227 | unlock(&p->debug); return n; | |
| 1991/0605/sys/src/9/port/devproc.c:387,392 – 1991/0614/sys/src/9/port/devproc.c:388,394 | ||
| 1990/1110 | goto Died; } pgrpnote(pg, va, n, NUser); | |
| 1991/0614 | poperror(); | |
| 1991/0212 | qunlock(&pg->debug); | |
| 1990/1110 | return n; } | |
| 1991/0605/sys/src/9/port/devproc.c:429,434 – 1991/0614/sys/src/9/port/devproc.c:431,437 | ||
| 1990/0227 | pprint("unknown qid in procwrite\n"); | |
| 1990/11211 | error(Egreg); | |
| 1990/0227 | } | |
| 1991/0614 | poperror(); | |
| 1990/0227 | unlock(&p->debug); return n; } | |
| 1991/0614/sys/src/9/port/devproc.c:14,19 – 1991/0705/sys/src/9/port/devproc.c:14,20 (short | long) | ||
| 1990/0227 | Qnote, | |
| 1990/1110 | Qnotepg, | |
| 1990/0227 | Qproc, | |
| 1991/0705 | Qsegment, | |
| 1990/0227 | Qstatus, Qtext, }; | |
| 1991/0614/sys/src/9/port/devproc.c:24,33 – 1991/0705/sys/src/9/port/devproc.c:25,44 | ||
| 1990/11211 | "note", {Qnote}, 0, 0600, "notepg", {Qnotepg}, 0, 0200, "proc", {Qproc}, sizeof(Proc), 0600, | |
| 1991/0705 | "segment", {Qsegment}, 0, 0400, | |
| 1990/11211 | "status", {Qstatus}, NAMELEN+12+6*12, 0600, "text", {Qtext}, 0, 0600, | |
| 1990/0227 | }; | |
| 1991/0705 | char *sname[]={ /* Segment type from portdat.h */ "Text", "Data", "Bss", "Stack", "Shared", "Phys", }; | |
| 1990/0227 | /* | |
| 1990/11211 | * Qids are, in path: | |
| 1990/0227 | * 4 bits of file type (qids above) | |
| 1991/0614/sys/src/9/port/devproc.c:47,53 – 1991/0705/sys/src/9/port/devproc.c:58,64 | ||
| 1990/0227 | { Proc *p; char buf[NAMELEN]; | |
| 1991/0705 | ulong pid, path; | |
| 1990/0227 | ||
| 1990/11211 | if(c->qid.path == CHDIR){ | |
| 1990/0227 | if(s >= conf.nproc) | |
| 1991/0614/sys/src/9/port/devproc.c:65,71 – 1991/0705/sys/src/9/port/devproc.c:76,83 | ||
| 1990/0227 | if(tab) panic("procgen"); tab = &procdir[s]; | |
| 1990/11211 |
| |
| 1991/0705 | path = c->qid.path&~(CHDIR|((1<<QSHIFT)-1)); /* slot component */ devdir(c, (Qid){path|tab->qid.path, c->qid.vers}, | |
| 1990/11211 | tab->name, tab->length, tab->perm, dp); | |
| 1990/0227 | return 1; } | |
| 1991/0614/sys/src/9/port/devproc.c:112,118 – 1991/0705/sys/src/9/port/devproc.c:124,130 | ||
| 1990/0227 | { Proc *p; | |
| 1990/1110 | Pgrp *pg; | |
| 1990/0227 |
| |
| 1991/0705 | Segment *s; | |
| 1990/0227 | Chan *tc; | |
| 1990/11211 | if(c->qid.path == CHDIR){ | |
| 1991/0614/sys/src/9/port/devproc.c:129,139 – 1991/0705/sys/src/9/port/devproc.c:141,151 | ||
| 1990/0227 | switch(QID(c->qid)){ case Qtext: | |
| 1991/0605 |
| |
| 1991/0705 | s = p->seg[TSEG]; if(s==0 || p->state==Dead || s->image==0) | |
| 1990/0227 | goto Died; | |
| 1991/0605 | ||
| 1990/0227 |
| |
| 1991/0705 | tc = s->image->c; | |
| 1990/0227 | if(tc == 0) goto Died; | |
| 1991/0605 | ||
| 1991/0614/sys/src/9/port/devproc.c:154,159 – 1991/0705/sys/src/9/port/devproc.c:166,172 | ||
| 1990/0227 | return tc; case Qctl: case Qnote: | |
| 1991/0705 | case Qsegment: | |
| 1990/0227 | break; | |
| 1990/1110 | case Qnotepg: | |
| 1991/0614/sys/src/9/port/devproc.c:213,229 – 1991/0705/sys/src/9/port/devproc.c:226,243 | ||
| 1991/0411 | procread(Chan *c, void *va, long n, ulong offset) | |
| 1990/0227 | { char *a = va, *b; | |
| 1991/0705 | char statbuf[NSEG*32]; | |
| 1990/0227 | Proc *p; | |
| 1991/0705 | Pte *pte; Segment *s; | |
| 1990/0227 | Page *pg; | |
| 1990/0614 | KMap *k; | |
| 1990/0227 |
| |
| 1991/0705 | int i, j; | |
| 1990/0227 | long l; long pid; User *up; | |
| 1991/0705 | ulong soff; Segment *sg; | |
| 1990/0227 | ||
| 1990/11211 | if(c->qid.path & CHDIR) | |
| 1990/0227 | return devdirread(c, a, n, 0, 0, procgen); | |
| 1991/0614/sys/src/9/port/devproc.c:242,273 – 1991/0705/sys/src/9/port/devproc.c:256,277 | ||
| 1990/0227 | */ | |
| 1991/0411 | if(((offset+n)&~(BY2PG-1)) != (offset&~(BY2PG-1))) n = BY2PG - (offset&(BY2PG-1)); | |
| 1991/0705 | s = seg(p, offset, 1); | |
| 1990/0227 | if(s){ | |
| 1991/0705 | if(p->pid!=PID(c->qid)){ qunlock(&s->lk); | |
| 1990/11211 | error(Eprocdied); | |
| 1990/0227 |
| |
| 1990/11211 |
| |
| 1990/0227 |
| |
| 1990/11211 |
| |
| 1990/0227 | } | |
| 1991/0411 |
| |
| 1990/0227 |
| |
| 1990/11211 |
| |
| 1990/0227 |
| |
| 1991/0411 |
| |
| 1990/0614 |
| |
| 1990/0227 |
| |
| 1991/0705 | soff = offset-s->base; pte = s->map[soff/PTEMAPMEM]; pg = 0; if(pte) pg = pte->pages[(soff&(PTEMAPMEM-1))/BY2PG]; s->steal++; qunlock(&s->lk); if(pagedout(pg)){ | |
| 1991/0411 | pprint("nonresident page addr %lux (complain to rob)\n", offset); | |
| 1990/0227 | memset(a, 0, n); }else{ | |
| 1991/0614/sys/src/9/port/devproc.c:276,281 – 1991/0705/sys/src/9/port/devproc.c:280,288 | ||
| 1991/0411 | memmove(a, b+(offset&(BY2PG-1)), n); | |
| 1990/0614 | kunmap(k); | |
| 1990/0227 | } | |
| 1991/0705 | qlock(&s->lk); s->steal--; qunlock(&s->lk); | |
| 1990/0227 | return n; } /* u area */ | |
| 1991/0614/sys/src/9/port/devproc.c:355,360 – 1991/0705/sys/src/9/port/devproc.c:362,380 | ||
| 1990/0227 | } | |
| 1991/0411 | memmove(a, statbuf+offset, n); | |
| 1990/0227 | return n; | |
| 1991/0705 | case Qsegment: j = 0; for(i = 0; i < NSEG; i++) if(sg = p->seg[i]) j += sprint(&statbuf[j], "%-6s %c %.8lux %.8lux %4d\n", sname[sg->type&SG_TYPE], sg->type&SG_RONLY ? 'R' : ' ', sg->base, sg->top, sg->ref); if(offset >= j) return 0; if(offset+n > j) n = j-offset; memmove(a, &statbuf[offset], n); return n; | |
| 1990/0227 | } | |
| 1990/11211 | error(Egreg); | |
| 1990/0227 | } | |
| 1991/0614/sys/src/9/port/devproc.c:404,414 – 1991/0705/sys/src/9/port/devproc.c:424,454 | ||
| 1990/0227 | switch(QID(c->qid)){ case Qctl: | |
| 1991/0705 | if(n >= 4 && strncmp(va, "exit", 4) == 0) { if(p->state == Broken) { ready(p); break; } } | |
| 1990/0227 | else | |
| 1990/11211 |
| |
| 1990/0227 |
| |
| 1991/0705 | if(n >= 4 && strncmp(va, "stop", 4) == 0) { p->procctl = Proc_stopme; break; } else if(n >= 5 && strncmp(va, "start", 5) == 0) { if(p->state == Stopped) { ready(p); break; } errors("not stopped"); } else if(n >= 4 && strncmp(va, "kill", 4) == 0) { p->procctl = Proc_exitme; break; } error(Ebadctl); | |
| 1990/0227 | case Qnote: | |
| 1990/0614 | k = kmap(p->upage); up = (User*)VA(k); | |
| 1991/0705/sys/src/9/port/devproc.c:19,24 – 1991/0712/sys/src/9/port/devproc.c:19,25 (short | long) | ||
| 1990/0227 | Qtext, }; | |
| 1991/0712 | #define STATSIZE (2*NAMELEN+12+6*12) | |
| 1990/0227 | Dirtab procdir[]={ | |
| 1990/11211 | "ctl", {Qctl}, 0, 0600, "mem", {Qmem}, 0, 0600, | |
| 1991/0705/sys/src/9/port/devproc.c:26,32 – 1991/0712/sys/src/9/port/devproc.c:27,33 | ||
| 1990/11211 | "notepg", {Qnotepg}, 0, 0200, "proc", {Qproc}, sizeof(Proc), 0600, | |
| 1991/0705 | "segment", {Qsegment}, 0, 0400, | |
| 1990/11211 |
| |
| 1991/0712 | "status", {Qstatus}, STATSIZE, 0600, | |
| 1990/11211 | "text", {Qtext}, 0, 0600, | |
| 1990/0227 | }; | |
| 1991/0705/sys/src/9/port/devproc.c:348,364 – 1991/0712/sys/src/9/port/devproc.c:349,366 | ||
| 1990/0227 | return n; case Qstatus: | |
| 1991/0411 |
| |
| 1991/0712 | if(offset >= STATSIZE) | |
| 1990/0227 | return 0; | |
| 1991/0411 |
| |
| 1990/0227 |
| |
| 1991/0712 | if(offset+n > STATSIZE) n = STATSIZE - offset; j = sprint(statbuf, "%-27s %-27s %-11s ", p->text, p->pgrp->user, statename[p->state]); | |
| 1990/0227 | for(i=0; i<6; i++){ l = p->time[i]; if(i == TReal) l = MACHP(0)->ticks - l; | |
| 1990/0614 | l = TK2MS(l); | |
| 1990/0227 |
| |
| 1991/0712 | readnum(0, statbuf+j+NUMSIZE*i, NUMSIZE, l, NUMSIZE); | |
| 1990/0227 | } | |
| 1991/0411 | memmove(a, statbuf+offset, n); | |
| 1990/0227 | return n; | |
| 1991/0712/sys/src/9/port/devproc.c:273,279 – 1991/0724/sys/src/9/port/devproc.c:273,279 (short | long) | ||
| 1991/0705 | s->steal++; qunlock(&s->lk); if(pagedout(pg)){ | |
| 1991/0411 |
| |
| 1991/0724 | pprint("nonresident page addr %lux (complain to philw)\n", offset); | |
| 1990/0227 | memset(a, 0, n); }else{ | |
| 1990/0614 | k = kmap(pg); | |
| 1991/0724/sys/src/9/port/devproc.c:27,33 – 1991/0807/sys/src/9/port/devproc.c:27,33 (short | long) | ||
| 1990/11211 | "notepg", {Qnotepg}, 0, 0200, "proc", {Qproc}, sizeof(Proc), 0600, | |
| 1991/0705 | "segment", {Qsegment}, 0, 0400, | |
| 1991/0712 |
| |
| 1991/0807 | "status", {Qstatus}, STATSIZE, 0400, | |
| 1990/11211 | "text", {Qtext}, 0, 0600, | |
| 1990/0227 | }; | |
| 1991/0807/sys/src/9/port/devproc.c:354,360 – 1991/0926/sys/src/9/port/devproc.c:354,360 (short | long) | ||
| 1991/0712 | if(offset+n > STATSIZE) n = STATSIZE - offset; j = sprint(statbuf, "%-27s %-27s %-11s ", | |
| 1991/0926 | p->text, p->pgrp->user, p->psstate ? p->psstate : statename[p->state]); | |
| 1990/0227 | for(i=0; i<6; i++){ l = p->time[i]; if(i == TReal) | |
| 1991/0926/sys/src/9/port/devproc.c:111,116 – 1991/1011/sys/src/9/port/devproc.c:111,122 (short | long) | ||
| 1990/0227 | int procwalk(Chan *c, char *name) { | |
| 1991/1011 | if(name[0] == '.' && name[1] == '.' && name[2] == '\0') { c->qid.path = Qdir|CHDIR; return 1; } | |
| 1990/0227 | return devwalk(c, name, 0, 0, procgen); } | |
| 1991/1011/sys/src/9/port/devproc.c:313,318 – 1991/1025/sys/src/9/port/devproc.c:313,324 (short | long) | ||
| 1991/0411 | memmove(a, (char*)offset, n); | |
| 1990/0914 | return n; | |
| 1990/0227 | } | |
| 1991/1025 | if(offset>=KZERO && offset<KZERO+conf.base1+conf.npage1*BY2PG){ if(offset+n > KZERO+conf.base1+conf.npage1*BY2PG) n = KZERO+conf.base1+conf.npage1*BY2PG - offset; memmove(a, (char*)offset, n); return n; } | |
| 1990/0227 | return 0; break; | |
| 1991/1025/sys/src/9/port/devproc.c:366,372 – 1991/1105/sys/src/9/port/devproc.c:366,372 (short | long) | ||
| 1991/0712 | if(offset+n > STATSIZE) n = STATSIZE - offset; j = sprint(statbuf, "%-27s %-27s %-11s ", | |
| 1991/0926 |
| |
| 1991/1105 | p->text, p->user, p->psstate ? p->psstate : statename[p->state]); | |
| 1990/0227 | for(i=0; i<6; i++){ l = p->time[i]; if(i == TReal) | |
| 1991/1105/sys/src/9/port/devproc.c:111,118 – 1991/1106/sys/src/9/port/devproc.c:111,117 (short | long) | ||
| 1990/0227 | int procwalk(Chan *c, char *name) { | |
| 1991/1011 |
| |
| 1991/1106 | if(strcmp(name, "..") == 0) { | |
| 1991/1011 | c->qid.path = Qdir|CHDIR; return 1; } | |
| Too many diffs (26 > 25). Stopping. | ||