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,4291998/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,4391998/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,4581998/0724/sys/src/9/port/segment.c:449,471
1992/1206    
		} 
		while(j < PTEPERTAB) { 
			pg = s->map[i]->pages[j]; 
			if(pg) { 
				putpage(pg); 
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) 
				return; 
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    
	} 
} 
 


source code copyright © 1990-2005 Lucent Technologies; see license
Plan 9 distribution
comments to russ cox (rsc@swtch.com)