| plan 9 kernel history: overview | file list | diff list |
1992/0824/port/devproc.c (diff list | history)
| 1992/0814/sys/src/9/port/devproc.c:21,27 – 1992/0824/sys/src/9/port/devproc.c:21,28 (short | long | prev | next) | ||
| 1990/0227 | }; | |
| 1992/0814 | #define STATSIZE (2*NAMELEN+12+7*12) | |
| 1990/0227 |
| |
| 1992/0824 | Dirtab procdir[] = { | |
| 1991/1109 | "ctl", {Qctl}, 0, 0000, "mem", {Qmem}, 0, 0000, "note", {Qnote}, 0, 0000, | |
| 1992/0814/sys/src/9/port/devproc.c:53,65 – 1992/0824/sys/src/9/port/devproc.c:54,67 | ||
| 1992/0428 | ||
| 1991/1109 | void procctlreq(Proc*, char*, int); int procctlmemio(Proc*, ulong, int, void*, int); | |
| 1991/1110 |
| |
| 1992/0824 | Chan* proctext(Chan*, Proc*); Segment* txt2data(Proc*, Segment*); | |
| 1991/1110 | int procstopped(void*); | |
| 1991/1109 | ||
| 1990/0227 | int procgen(Chan *c, Dirtab *tab, int ntab, int s, Dir *dp) { | |
| 1992/0824 | Qid qid; | |
| 1990/0227 | Proc *p; char buf[NAMELEN]; | |
| 1991/1109 | ulong pid, path, perm; | |
| 1992/0814/sys/src/9/port/devproc.c:73,79 – 1992/0824/sys/src/9/port/devproc.c:75,82 | ||
| 1990/0227 | if(pid == 0) return 0; sprint(buf, "%d", pid); | |
| 1991/1112 |
| |
| 1992/0824 | qid = (Qid){CHDIR|((s+1)<<QSHIFT), pid}; devdir(c, qid, buf, 0, p->user, CHDIR|0555, dp); | |
| 1990/0227 | return 1; } if(s >= NPROC) | |
| 1992/0814/sys/src/9/port/devproc.c:80,85 – 1992/0824/sys/src/9/port/devproc.c:83,89 | ||
| 1990/0227 | return -1; if(tab) panic("procgen"); | |
| 1992/0824 | ||
| 1990/0227 | tab = &procdir[s]; | |
| 1991/0705 | path = c->qid.path&~(CHDIR|((1<<QSHIFT)-1)); /* slot component */ | |
| 1991/1109 | ||
| 1992/0814/sys/src/9/port/devproc.c:88,94 – 1992/0824/sys/src/9/port/devproc.c:92,99 | ||
| 1991/1109 | if(perm == 0) perm = p->procmode; | |
| 1992/0824 | qid = (Qid){path|tab->qid.path, c->qid.vers}; devdir(c, qid, tab->name, tab->length, p->user, perm, dp); | |
| 1990/0227 | return 1; } | |
| 1992/0814/sys/src/9/port/devproc.c:156,162 – 1992/0824/sys/src/9/port/devproc.c:161,166 | ||
| 1991/1112 | error(Eperm); | |
| 1991/1110 | tc = proctext(c, p); | |
| 1990/0227 | tc->offset = 0; | |
| 1991/1110 | ||
| 1990/0227 | return tc; | |
| 1991/1110 | ||
| 1990/0227 | case Qctl: | |
| 1992/0814/sys/src/9/port/devproc.c:168,178 – 1992/0824/sys/src/9/port/devproc.c:172,183 | ||
| 1990/0227 | break; | |
| 1990/1110 | case Qnotepg: | |
| 1990/1115 |
| |
| 1992/0824 | if(omode!=OWRITE || pg->pgrpid == 1) | |
| 1990/11211 | error(Eperm); | |
| 1992/0824 | c->pgrpid.path = pg->pgrpid+1; | |
| 1992/0428 | c->pgrpid.vers = p->noteid; | |
| 1990/1110 | break; | |
| 1992/0824 | ||
| 1990/0227 | default: | |
| 1992/0114 | pprint("procopen %lux\n", c->qid); | |
| 1990/11211 | error(Egreg); | |
| 1992/0814/sys/src/9/port/devproc.c:263,268 – 1992/0824/sys/src/9/port/devproc.c:268,277 | ||
| 1990/0227 | } | |
| 1991/1110 | if(offset >= KZERO) { | |
| 1992/0824 | /* Protect crypt key memory */ if(offset >= palloc.cmembase && offset < palloc.cmemtop) error(Eperm); | |
| 1992/0128 | /* validate physical kernel addresses */ | |
| 1992/0628 | if(offset < (ulong)end) { if(offset+n > (ulong)end) | |
| 1992/0814/sys/src/9/port/devproc.c:332,342 – 1992/0824/sys/src/9/port/devproc.c:341,346 | ||
| 1991/0712 | if(offset+n > STATSIZE) n = STATSIZE - offset; | |
| 1992/0423 |
| |
| 1992/0328 |
| |
| 1992/0423 |
| |
| 1991/0712 | j = sprint(statbuf, "%-27s %-27s %-11s ", | |
| 1991/1105 | p->text, p->user, p->psstate ? p->psstate : statename[p->state]); | |
| 1990/0227 | for(i=0; i<6; i++){ | |
| 1992/0814/sys/src/9/port/devproc.c:424,430 – 1992/0824/sys/src/9/port/devproc.c:428,435 | ||
| 1991/1110 | pxu = (User*)b; | |
| 1991/1111 | hi = offset+n; /* Check for floating point registers */ | |
| 1992/0824 | if(offset >= (ulong)&u->fpsave && hi <= (ulong)&u->fpsave+sizeof(FPsave)){ | |
| 1991/1111 | memmove(b+(offset-USERADDR), a, n); break; } | |
| 1992/0814/sys/src/9/port/devproc.c:598,606 – 1992/0824/sys/src/9/port/devproc.c:603,611 | ||
| 1991/1110 | int | |
| 1991/1109 | procctlmemio(Proc *p, ulong offset, int n, void *va, int read) { | |
| 1992/0824 | KMap *k; | |
| 1991/1113 | Pte *pte; | |
| 1991/1109 | Page *pg; | |
| 1991/1110 | Segment *s; | |
| 1992/0423 | ulong soff, l; | |
| 1991/1109 | char *a = va, *b; | |
| 1992/0814/sys/src/9/port/devproc.c:660,667 – 1992/0824/sys/src/9/port/devproc.c:665,672 | ||
| 1991/1110 | Segment * txt2data(Proc *p, Segment *s) { | |
| 1992/0824 | Segment *ps; | |
| 1991/1110 | ps = newseg(SG_DATA, s->base, s->size); ps->image = s->image; | |