| plan 9 kernel history: overview | file list | diff list |
1992/0114/port/segment.c (diff list | history)
| 1992/0111/sys/src/9/port/segment.c:57,63 – 1992/0114/sys/src/9/port/segment.c:57,63 (short | long | prev | next) | ||
| 1991/0705 | Segment *s; if(size > (SEGMAPSIZE*PTEPERTAB)) | |
| 1992/0114 | error(Enovmem); | |
| 1991/0705 | for(;;) { lock(&segalloc); | |
| 1992/0111/sys/src/9/port/segment.c:335,341 – 1992/0114/sys/src/9/port/segment.c:335,341 | ||
| 1991/0705 | s = u->p->seg[seg]; if(s == 0) | |
| 1992/0114 | error(Ebadarg); | |
| 1991/0705 | if(addr == 0) return s->base; | |
| 1992/0111/sys/src/9/port/segment.c:346,352 – 1992/0114/sys/src/9/port/segment.c:346,352 | ||
| 1991/0705 | /* We may start with the bss overlapping the data */ if(seg != BSEG || u->p->seg[DSEG] == 0 || addr < u->p->seg[DSEG]->base) { qunlock(&s->lk); | |
| 1991/1125 |
| |
| 1992/0114 | error(Enovmem); | |
| 1991/1125 | } | |
| 1991/0705 | addr = s->base; } | |
| 1992/0111/sys/src/9/port/segment.c:371,377 – 1992/0114/sys/src/9/port/segment.c:371,377 | ||
| 1991/0705 | if(newtop >= ns->base && newtop < ns->top) { qunlock(&s->lk); pprint("segments overlap\n"); | |
| 1992/0114 | error(Enovmem); | |
| 1991/0705 | } } | |
| 1992/0111/sys/src/9/port/segment.c:424,430 – 1992/0114/sys/src/9/port/segment.c:424,430 | ||
| 1991/0705 | ||
| 1991/1115 | USED(p); | |
| 1991/0705 | if(va&KZERO) /* BUG: Only ok for now */ | |
| 1992/0114 | error(Ebadarg); | |
| 1991/0705 | validaddr((ulong)name, 1, 0); vmemchr(name, 0, ~0); | |
| 1992/0111/sys/src/9/port/segment.c:434,440 – 1992/0114/sys/src/9/port/segment.c:434,440 | ||
| 1991/0705 | break; if(sno == NSEG) | |
| 1992/0114 | error(Enovmem); | |
| 1991/0705 | va = va&~(BY2PG-1); len = PGROUND(len); | |
| 1992/0111/sys/src/9/port/segment.c:445,451 – 1992/0114/sys/src/9/port/segment.c:445,451 | ||
| 1991/0705 | continue; | |
| 1991/0803 | if((newtop > ns->base && newtop <= ns->top) || (va >= ns->base && va < ns->top)) | |
| 1991/0705 |
| |
| 1992/0114 | error(Enovmem); | |
| 1991/0705 | } | |
| 1991/0731 | for(ps = physseg; ps->name; ps++) | |
| 1992/0111/sys/src/9/port/segment.c:452,461 – 1992/0114/sys/src/9/port/segment.c:452,461 | ||
| 1991/0705 | if(strcmp(name, ps->name) == 0) goto found; | |
| 1992/0114 | error(Ebadarg); | |
| 1991/0705 | found: if(len > ps->size) | |
| 1992/0114 | error(Enovmem); | |
| 1991/0705 | attr &= ~SG_TYPE; /* Turn off what we are not allowed */ attr |= ps->attr; /* Copy in defaults */ | |
| 1992/0111/sys/src/9/port/segment.c:480,486 – 1992/0114/sys/src/9/port/segment.c:480,486 | ||
| 1991/0705 | s = seg(u->p, arg[0], 1); if(s == 0) | |
| 1992/0114 | error(Ebadarg); | |
| 1991/0706 | s->flushme = 1; | |
| 1991/0705 | ||