| plan 9 kernel history: overview | file list | diff list |
1998/0724/port/segment.c (diff list | history)
| 1998/0512/sys/src/9/port/segment.c:424,429 – 1998/0724/sys/src/9/port/segment.c:424,432 (short | long | prev | next) | ||
| 1991/0705 | return 0; } | |
| 1998/0724 | /* * called with s->lk locked */ | |
| 1991/0705 | void mfreeseg(Segment *s, ulong start, int pages) { | |
| 1998/0512/sys/src/9/port/segment.c:430,439 – 1998/0724/sys/src/9/port/segment.c:433,444 | ||
| 1991/0705 | int i, j; ulong soff; Page *pg; | |
| 1998/0724 | Page *list; | |
| 1991/0705 | soff = start-s->base; j = (soff&(PTEMAPMEM-1))/BY2PG; | |
| 1998/0724 | list = nil; | |
| 1991/0705 | for(i = soff/PTEMAPMEM; i < SEGMAPSIZE; i++) { | |
| 1998/0512 | if(pages <= 0) | |
| 1992/1206 | break; | |
| 1998/0512/sys/src/9/port/segment.c:444,458 – 1998/0724/sys/src/9/port/segment.c:449,471 | ||
| 1992/1206 | } while(j < PTEPERTAB) { pg = s->map[i]->pages[j]; | |
| 1998/0724 | if(pg) | |
| 1998/0512 | s->map[i]->pages[j] = 0; | |
| 1991/0705 |
| |
| 1998/0724 | pg->next = list; list = pg; | |
| 1992/1206 | if(--pages == 0) | |
| 1998/0724 | goto out; | |
| 1992/1206 | j++; | |
| 1991/0705 | } | |
| 1991/0726 | j = 0; | |
| 1998/0724 | } out: /* wait for others to get fix their tlb's and then free the pages */ if((s->type&SG_TYPE) == SG_SHARED){ } for(pg = list; pg != nil; pg = list){ list = list->next; putpage(pg); | |
| 1991/0705 | } } | |