| plan 9 kernel history: overview | file list | diff list |
1994/0514/port/segment.c (diff list | history)
| 1993/1012/sys/src/9/port/segment.c:405,420 – 1994/0514/sys/src/9/port/segment.c:405,438 (short | long | prev | next) | ||
| 1991/0705 | } } | |
| 1994/0514 | int isoverlap(Proc *p, ulong va, int len) { int i; Segment *ns; ulong newtop; newtop = va+len; for(i = 0; i < NSEG; i++) { ns = p->seg[i]; if(ns == 0) continue; if((newtop > ns->base && newtop <= ns->top) || (va >= ns->base && va < ns->top)) return 1; } return 0; } | |
| 1991/0705 | ulong segattach(Proc *p, ulong attr, char *name, ulong va, ulong len) { | |
| 1992/0711 |
| |
| 1991/0705 |
| |
| 1994/0514 | Segment *s; Physseg *ps; | |
| 1991/0705 | ||
| 1991/1115 | USED(p); | |
| 1993/0725 |
| |
| 1994/0514 | if(va != 0 && (va&KZERO) == KZERO) /* BUG: Only ok for now */ | |
| 1992/0114 | error(Ebadarg); | |
| 1991/0705 | validaddr((ulong)name, 1, 0); | |
| 1993/1012/sys/src/9/port/segment.c:421,444 – 1994/0514/sys/src/9/port/segment.c:439,466 | ||
| 1991/0705 | vmemchr(name, 0, ~0); for(sno = 0; sno < NSEG; sno++) | |
| 1993/0501 |
| |
| 1994/0514 | if(p->seg[sno] == 0 && sno != ESEG) | |
| 1991/0705 | break; if(sno == NSEG) | |
| 1992/0114 | error(Enovmem); | |
| 1991/0705 |
| |
| 1993/0501 |
| |
| 1991/0705 |
| |
| 1991/0803 |
| |
| 1992/0824 |
| |
| 1994/0514 | /* Find a hole in the address space */ if(va == 0) { va = p->seg[SSEG]->base - len; for(i = 0; i < 20; i++) { if(isoverlap(p, va, len) == 0) break; va -= len; } | |
| 1991/0705 | } | |
| 1994/0514 | va = va&~(BY2PG-1); if(isoverlap(p, va, len)) error(Esoverlap); | |
| 1991/0731 | for(ps = physseg; ps->name; ps++) | |
| 1991/0705 | if(strcmp(name, ps->name) == 0) goto found; | |
| 1993/1012/sys/src/9/port/segment.c:453,461 – 1994/0514/sys/src/9/port/segment.c:475,483 | ||
| 1991/0705 | s = newseg(attr, va, len/BY2PG); | |
| 1993/0210 | s->pseg = ps; | |
| 1993/0501 |
| |
| 1994/0514 | p->seg[sno] = s; | |
| 1991/0705 |
| |
| 1994/0514 | return va; | |
| 1991/0705 | } | |
| 1993/0919 | void | |