| plan 9 kernel history: overview | file list | diff list |
1990/0814/port/page.c (diff list | history)
| 1990/0802/sys/src/9/port/page.c:339,347 – 1990/0814/sys/src/9/port/page.c:339,345 (short | long | prev | next) | ||
| 1990/0303 | o->mqid = -1; o->mchan = 0; | |
| 1990/0227 | } | |
| 1990/0802 |
| |
| 1990/0802/sys/src/9/port/page.c:348,354 – 1990/0814/sys/src/9/port/page.c:346,351 | ||
| 1990/0227 | growpte(o, npte); | |
| 1990/0802 | if(u && u->p) poperror(); | |
| 1990/0227 | unlock(&origalloc); return o; } | |
| 1990/0802/sys/src/9/port/page.c:547,561 – 1990/0814/sys/src/9/port/page.c:544,551 | ||
| 1990/0227 | * Grow */ /* BUG: check spill onto other segments */ | |
| 1990/0802 |
| |
| 1990/0227 | if(o->va+BY2PG*o->npte < max) growpte(o, (max-o->va)>>PGSHIFT); | |
| 1990/0802 |
| |
| 1990/0227 | s->maxva = max; return 1; } | |
| 1990/0802/sys/src/9/port/page.c:601,606 – 1990/0814/sys/src/9/port/page.c:591,600 | ||
| 1990/0227 | p->o = 0; } | |
| 1990/0814 | /* * o is locked. this will always do a grow; if n<=o->npte someone * else got here first and we can just return. */ | |
| 1990/0227 | void growpte(Orig *o, ulong n) { | |
| 1990/0802/sys/src/9/port/page.c:608,650 – 1990/0814/sys/src/9/port/page.c:602,631 | ||
| 1990/0227 | ulong nfree; lock(&ptealloc); | |
| 1990/0814 | lock(o); | |
| 1990/0227 | if(o->pte){ | |
| 1990/0728 |
| |
| 1990/0814 | if(o->npte >= n) | |
| 1990/0728 | goto Return; | |
| 1990/0227 | p = (PTEA*)(o->pte - 1); | |
| 1990/0728 |
| |
| 1990/0227 |
| |
| 1990/0814 | n++; if(p+p->n == ptealloc.free){ if(!compactpte(o, n - p->n)) goto Trouble; p = (PTEA*)(o->pte - 1); ptealloc.free += n - p->n; | |
| 1990/0227 | }else{ | |
| 1990/0802 |
| |
| 1990/0227 |
| |
| 1990/0802 |
| |
| 1990/0227 |
| |
| 1990/0814 | if(!compactpte(o, n)) goto Trouble; p = ptealloc.free; ptealloc.free += n; memcpy(p+1, o->pte, o->npte*sizeof(PTE)); p->o = o; ((PTEA*)(o->pte-1))->o = 0; o->pte = p+1; | |
| 1990/0227 | } | |
| 1990/0814 | memset(p+1+o->npte, 0, (n-(1+o->npte))*sizeof(PTE)); p->n = n; o->npte = n-1; | |
| 1990/0728 | goto Return; | |
| 1990/0227 | } n++; | |
| 1990/0802/sys/src/9/port/page.c:659,668 – 1990/0814/sys/src/9/port/page.c:640,651 | ||
| 1990/0227 | o->npte = n-1; | |
| 1990/0728 | Return: | |
| 1990/0227 | unlock(&ptealloc); | |
| 1990/0814 | unlock(o); | |
| 1990/0802 | return; Trouble: unlock(&ptealloc); | |
| 1990/0814 | unlock(o); | |
| 1990/0802 | if(u && u->p) error(0, Enovmem); panic("growpte fails %d %lux %d\n", n, o->va, o->npte); | |