| plan 9 kernel history: overview | file list | diff list |
1990/0614/port/devproc.c (diff list | history)
| 1990/0424/sys/src/9/port/devproc.c:147,161 – 1990/0614/sys/src/9/port/devproc.c:147,158 (short | long | prev | next) | ||
| 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) | |