| plan 9 kernel history: overview | file list | diff list |
1990/0614/port/proc.c (diff list | history)
| 1990/0614/sys/src/9/port/proc.c:303,320 – 1990/0617/sys/src/9/port/proc.c:303,325 (short | long | prev | next) | ||
|
Use kmap in postnote to access Proc.upage.
rsc Mon Mar 20 17:14:03 2006 | ||
| 1990/0227 | postnote(Proc *p, int dolock, char *n, int flag) { User *up; | |
| 1990/0617 | KMap *k; | |
| 1990/0227 | int s; Rendez *r; if(dolock) lock(&p->debug); | |
| 1990/0617 | k = kmap(p->upage); up = (User*)VA(k); | |
| 1990/0227 | if(flag!=NUser && (up->notify==0 || up->notified)) up->nnote = 0; /* force user's hand */ | |
| 1990/0617 | else if(up->nnote == NNOTE-1){ kunmap(k); | |
| 1990/0227 | return 0; | |
| 1990/0617 | } | |
| 1990/0227 | strcpy(up->note[up->nnote].msg, n); up->note[up->nnote++].flag = flag; | |
| 1990/0617 | kunmap(k); | |
| 1990/0227 | if(dolock) unlock(&p->debug); if(r = p->r){ /* assign = */ | |
| 1990/0614/sys/src/9/port/proc.c:398,404 – 1990/0617/sys/src/9/port/proc.c:403,409 | ||
| 1990/0227 | /* * Pass info through back door, to avoid huge Proc's */ | |
| 1990/03081 |
| |
| 1990/0617 | p->waitmsg = (((ulong)&w)&(BY2PG-1)); | |
| 1990/03081 | c->state = Exiting; | |
| 1990/0227 | if(p->state == Inwait) ready(p); | |
| 1990/0614/sys/src/9/port/proc.c:499,504 – 1990/0617/sys/src/9/port/proc.c:504,510 | ||
| 1990/0227 | pwait(Waitmsg *w) { Proc *c, *p; | |
| 1990/0617 | KMap *k; | |
| 1990/0227 | ulong cpid; p = u->p; | |
| 1990/0614/sys/src/9/port/proc.c:515,521 – 1990/0617/sys/src/9/port/proc.c:521,526 | ||
| 1990/0324 | lock(&p->wait.queue); /* wait until child is finished */ | |
| 1990/0227 | c = p->child; if(c == 0){ | |
| 1990/0324 | unlock(&p->wait.queue); | |
| 1990/0227 | sched(); | |
| 1990/0614/sys/src/9/port/proc.c:522,530 – 1990/0617/sys/src/9/port/proc.c:527,537 | ||
| 1990/0227 | goto again; } p->child = 0; | |
| 1990/0617 | k = kmap(c->upage); | |
| 1990/0227 | if(w) | |
| 1990/0617 | *w = *(Waitmsg*)(p->waitmsg|VA(k)); cpid = ((Waitmsg*)(p->waitmsg|VA(k)))->pid; kunmap(k); | |
| 1990/0227 | p->time[TCUser] += c->time[TUser] + c->time[TCUser]; p->time[TCSys] += c->time[TSys] + c->time[TCSys]; p->time[TCReal] += c->time[TReal]; | |
| 1990/0614/sys/src/9/port/proc.c:566,573 – 1990/0617/sys/src/9/port/proc.c:573,581 | ||
| 1990/0227 | Proc *p; int n; ulong upa; | |
| 1990/0424 | int lastvar; /* used to compute stack address */ | |
| 1990/0617 | User *up; KMap *k; | |
| 1990/0227 | /* * Kernel stack | |
| 1990/0614/sys/src/9/port/proc.c:574,590 – 1990/0617/sys/src/9/port/proc.c:582,599 | ||
| 1990/0227 | */ p = newproc(); p->upage = newpage(1, 0, USERADDR|(p->pid&0xFFFF)); | |
| 1990/0617 | k = kmap(p->upage); upa = VA(k); up = (User*)upa; up->p = p; | |
| 1990/0227 | /* * Save time: only copy u-> data and useful stack */ | |
| 1990/0617 | memcpy(up, u, sizeof(User)); | |
| 1990/0227 | n = USERADDR+BY2PG - (ulong)&lastvar; n = (n+32) & ~(BY2WD-1); /* be safe & word align */ | |
| 1990/0617 | memcpy((void*)(upa+BY2PG-n), (void*)(USERADDR+BY2PG-n), n); | |
| 1990/0227 | /* * Refs | |
| 1990/0614/sys/src/9/port/proc.c:593,598 – 1990/0617/sys/src/9/port/proc.c:602,608 | ||
| 1990/0227 | for(n=0; n<=up->maxfd; n++) up->fd[n] = 0; up->maxfd = 0; | |
| 1990/0617 | kunmap(k); | |
| 1990/0227 | /* * Sched | |