| plan 9 kernel history: overview | file list | diff list |
1991/0411/port/devproc.c (diff list | history)
| 1991/0318/sys/src/9/port/devproc.c:144,152 – 1991/0411/sys/src/9/port/devproc.c:144,152 (short | long | prev | next) | ||
| 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; | |