| plan 9 kernel history: overview | file list | diff list |
1992/0824/port/segment.c (diff list | history)
| 1992/0822/sys/src/9/port/segment.c:62,70 – 1992/0824/sys/src/9/port/segment.c:62,68 (short | long | prev | next) | ||
| 1991/0726 | return; i = s->image; | |
| 1992/0314 |
| |
| 1992/0824 | if(i && i->s == s && s->ref == 1) { | |
| 1991/0726 | lock(i); if(s->ref == 1) i->s = 0; | |
| 1992/0822/sys/src/9/port/segment.c:94,100 – 1992/0824/sys/src/9/port/segment.c:92,98 | ||
| 1991/0705 | Page **pg, **endpages; endpte = &s->map[SEGMAPSIZE]; | |
| 1992/0824 | for(p = s->map; p < endpte; p++) { | |
| 1991/0705 | if(*p) { endpages = &((*p)->pages[PTEPERTAB]); for(pg = (*p)->pages; pg < endpages; pg++) | |
| 1992/0822/sys/src/9/port/segment.c:101,115 – 1992/0824/sys/src/9/port/segment.c:99,115 | ||
| 1991/0705 | if(*pg) (*pg)->va += offset; } | |
| 1992/0824 | } | |
| 1991/0705 | } Segment* | |
| 1992/0430 | dupseg(Segment *s, int share) | |
| 1991/0705 | { | |
| 1992/0824 | int i; | |
| 1991/0705 | Pte *pte; Segment *n; | |
| 1992/0824 | SET(n); | |
| 1991/0705 | switch(s->type&SG_TYPE) { | |
| 1991/0706 | case SG_TEXT: /* New segment shares pte set */ | |
| 1991/0705 | case SG_SHARED: | |
| 1992/0822/sys/src/9/port/segment.c:121,127 – 1992/0824/sys/src/9/port/segment.c:121,127 | ||
| 1991/0706 | case SG_STACK: qlock(&s->lk); | |
| 1991/0705 | n = newseg(s->type, s->base, s->size); | |
| 1991/0706 |
| |
| 1992/0824 | break; | |
| 1991/0705 | ||
| 1992/0430 | case SG_BSS: /* Just copy on write */ qlock(&s->lk); | |
| 1992/0822/sys/src/9/port/segment.c:132,138 – 1992/0824/sys/src/9/port/segment.c:132,138 | ||
| 1992/0430 | return s; } n = newseg(s->type, s->base, s->size); | |
| 1992/0824 | break; | |
| 1992/0430 | ||
| 1991/0706 | case SG_DATA: /* Copy on write plus demand load info */ qlock(&s->lk); | |
| 1992/0822/sys/src/9/port/segment.c:148,166 – 1992/0824/sys/src/9/port/segment.c:148,162 | ||
| 1991/0705 | n->image = s->image; n->fstart = s->fstart; n->flen = s->flen; | |
| 1992/0314 | ||
| 1991/0705 |
| |
| 1991/0706 |
| |
| 1991/0705 |
| |
| 1992/0824 | break; | |
| 1991/0705 | } | |
| 1992/0824 | for(i = 0; i < SEGMAPSIZE; i++) if(pte = s->map[i]) n->map[i] = ptecpy(pte); | |
| 1991/0705 |
| |
| 1992/0520 |
| |
| 1992/0824 | n->flushme = s->flushme; qunlock(&s->lk); return n; | |
| 1991/0705 | } void | |
| 1992/0822/sys/src/9/port/segment.c:320,327 – 1992/0824/sys/src/9/port/segment.c:316,323 | ||
| 1991/0705 | ||
| 1991/1125 | qlock(&s->lk); | |
| 1992/0824 | /* We may start with the bss overlapping the data */ | |
| 1991/0705 | if(addr < s->base) { | |
| 1992/0114 | error(Enovmem); | |
| 1992/0822/sys/src/9/port/segment.c:337,359 – 1992/0824/sys/src/9/port/segment.c:333,353 | ||
| 1991/0705 | return 0; } | |
| 1991/0830 |
| |
| 1991/0705 |
| |
| 1992/0307 |
| |
| 1992/0824 | if(newtop >= ns->base && newtop < ns->top) { | |
| 1991/0705 | qunlock(&s->lk); | |
| 1992/0114 |
| |
| 1992/0824 | error(Esoverlap); | |
| 1991/0705 | } } | |
| 1992/0824 | if(newsize > (PTEMAPMEM*SEGMAPSIZE)/BY2PG) { qunlock(&s->lk); return -1; } | |
| 1991/0705 | s->top = newtop; s->size = newsize; qunlock(&s->lk); | |
| 1992/0822/sys/src/9/port/segment.c:424,430 – 1992/0824/sys/src/9/port/segment.c:418,424 | ||
| 1991/0705 | continue; | |
| 1991/0803 | if((newtop > ns->base && newtop <= ns->top) || (va >= ns->base && va < ns->top)) | |
| 1992/0114 |
| |
| 1992/0824 | error(Esoverlap); | |
| 1991/0705 | } | |
| 1991/0731 | for(ps = physseg; ps->name; ps++) | |