plan 9 kernel history: overview | file list | diff list

2002/0114/port/allocb.c (diff list | history)

1999/0710/sys/src/9/port/allocb.c:19,251999/0712/sys/src/9/port/allocb.c:19,25 (short | long)
1999/0710    
} ialloc; 
 
/* 
 *  allocate blocks, round the data base upt to a multiple of BLOCKALIGN. 
1999/0712    
 *  allocate blocks, round the data base up to a multiple of BLOCKALIGN. 
1999/0710    
 */ 
Block* 
allocb(int size) 
1999/0710/sys/src/9/port/allocb.c:29,351999/0712/sys/src/9/port/allocb.c:29,35
1999/0710    
	int n; 
 
	n = sizeof(Block) + size; 
	b = malloc(n+Hdrspc); 
1999/0712    
	b = mallocz(n+Hdrspc, 0); 
1999/0710    
	if(b == 0) 
		exhausted("Blocks"); 
	memset(b, 0, sizeof(Block)); 
1999/0710/sys/src/9/port/allocb.c:72,781999/0712/sys/src/9/port/allocb.c:72,78
1999/0710    
	} 
 
	n = sizeof(Block) + size; 
	b = malloc(n+Hdrspc); 
1999/0712    
	b = mallocz(n+Hdrspc, 0); 
1999/0710    
	if(b == 0){ 
		print("iallocb: no memory %lud/%lud\n", 
			ialloc.bytes, conf.ialloc); 
1999/0712/sys/src/9/port/allocb.c:19,251999/0713/sys/src/9/port/allocb.c:19,25 (short | long)
1999/0710    
} ialloc; 
 
/* 
1999/0712    
 *  allocate blocks, round the data base up to a multiple of BLOCKALIGN. 
1999/0713    
 *  allocate blocks, round the data base upt to a multiple of BLOCKALIGN. 
1999/0710    
 */ 
Block* 
allocb(int size) 
1999/0712/sys/src/9/port/allocb.c:29,351999/0713/sys/src/9/port/allocb.c:29,35
1999/0710    
	int n; 
 
	n = sizeof(Block) + size; 
1999/0712    
	b = mallocz(n+Hdrspc, 0); 
1999/0713    
	b = malloc(n+Hdrspc); 
1999/0710    
	if(b == 0) 
		exhausted("Blocks"); 
	memset(b, 0, sizeof(Block)); 
1999/0712/sys/src/9/port/allocb.c:72,781999/0713/sys/src/9/port/allocb.c:72,78
1999/0710    
	} 
 
	n = sizeof(Block) + size; 
1999/0712    
	b = mallocz(n+Hdrspc, 0); 
1999/0713    
	b = malloc(n+Hdrspc); 
1999/0710    
	if(b == 0){ 
		print("iallocb: no memory %lud/%lud\n", 
			ialloc.bytes, conf.ialloc); 
1999/0713/sys/src/9/port/allocb.c:50,561999/0714/sys/src/9/port/allocb.c:50,56 (short | long)
Change tagwithpc to setmalloctag.
rsc Fri Mar 4 12:44:25 2005
1999/0710    
	if(b->rp < b->base) 
		panic("allocb"); 
	b->wp = b->rp; 
	tagwithpc(b, getcallerpc(&size)); 
1999/0714    
	setmalloctag(b, getcallerpc(&size)); 
1999/0710    
 
	return b; 
} 
1999/0713/sys/src/9/port/allocb.c:102,1081999/0714/sys/src/9/port/allocb.c:102,108
1999/0710    
	ilock(&ialloc); 
	ialloc.bytes += b->lim - b->base; 
	iunlock(&ialloc); 
	tagwithpc(b, getcallerpc(&size)); 
1999/0714    
	setmalloctag(b, getcallerpc(&size)); 
1999/0710    
 
	return b; 
} 
1999/0714/sys/src/9/port/allocb.c:19,251999/1110/sys/src/9/port/allocb.c:19,25 (short | long)
1999/0710    
} ialloc; 
 
/* 
1999/0713    
 *  allocate blocks, round the data base upt to a multiple of BLOCKALIGN. 
1999/1110    
 *  allocate blocks, round the data base up to a multiple of BLOCKALIGN. 
1999/0710    
 */ 
Block* 
allocb(int size) 
1999/1110/sys/src/9/port/allocb.c:18,392001/0504/sys/src/9/port/allocb.c:18,37 (short | long)
1999/0710    
	ulong	bytes; 
} ialloc; 
 
/* 
1999/1110    
 *  allocate blocks, round the data base up to a multiple of BLOCKALIGN. 
1999/0710    
 */ 
Block* 
allocb(int size) 
2001/0504    
static Block* 
_allocb(int size) 
1999/0710    
{ 
	Block *b; 
	ulong addr; 
	int n; 
 
	n = sizeof(Block) + size; 
1999/0713    
	b = malloc(n+Hdrspc); 
1999/0710    
	if(b == 0) 
		exhausted("Blocks"); 
	memset(b, 0, sizeof(Block)); 
2001/0504    
	if((b = mallocz(sizeof(Block)+size+Hdrspc, 0)) == nil) 
		return nil; 
1999/0710    
 
2001/0504    
	b->next = nil; 
	b->list = nil; 
	b->free = 0; 
	b->flag = 0; 
 
1999/0710    
	/* align start of data portion by rounding up */ 
	addr = (ulong)b; 
	addr = ROUND(addr + sizeof(Block), BLOCKALIGN); 
1999/1110/sys/src/9/port/allocb.c:48,692001/0504/sys/src/9/port/allocb.c:46,79
1999/0710    
	/* leave sluff at beginning for added headers */ 
	b->rp = b->lim - ROUND(size, BLOCKALIGN); 
	if(b->rp < b->base) 
		panic("allocb"); 
2001/0504    
		panic("_allocb"); 
1999/0710    
	b->wp = b->rp; 
2001/0504    
 
	return b; 
} 
 
Block* 
allocb(int size) 
{ 
	Block *b; 
 
	/* 
	 * Check in a process and wait until successful. 
	 * Can still error out of here, though. 
	 */ 
	if(up == nil) 
		panic("allocb without up: %uX\n", getcallerpc(&size)); 
	if((b = _allocb(size)) == nil) 
		panic("allocb: no memory\n"); 
1999/0714    
	setmalloctag(b, getcallerpc(&size)); 
1999/0710    
 
	return b; 
} 
 
/* 
 *  interrupt time allocation 
 */ 
Block* 
iallocb(int size) 
{ 
	Block *b; 
	ulong addr; 
	int n; 
 
	if(ialloc.bytes > conf.ialloc){ 
		print("iallocb: limited %lud/%lud\n", 
1999/1110/sys/src/9/port/allocb.c:71,1082001/0504/sys/src/9/port/allocb.c:81,97
1999/0710    
		return 0; 
	} 
 
	n = sizeof(Block) + size; 
1999/0713    
	b = malloc(n+Hdrspc); 
1999/0710    
	if(b == 0){ 
2001/0504    
	if((b = _allocb(size)) == nil){ 
1999/0710    
		print("iallocb: no memory %lud/%lud\n", 
			ialloc.bytes, conf.ialloc); 
		return nil; 
	} 
	memset(b, 0, sizeof(Block)); 
                 
	/* align start of data portion by rounding up */ 
	addr = (ulong)b; 
	addr = ROUND(addr + sizeof(Block), BLOCKALIGN); 
	b->base = (uchar*)addr; 
                 
	/* align end of data portion by rounding down */ 
	b->lim = ((uchar*)b) + msize(b); 
	addr = (ulong)(b->lim); 
	addr = addr & ~(BLOCKALIGN-1); 
	b->lim = (uchar*)addr; 
                 
	/* leave sluff at beginning for added headers */ 
	b->rp = b->lim - ROUND(size, BLOCKALIGN); 
	if(b->rp < b->base) 
		panic("allocb"); 
	b->wp = b->rp; 
                 
2001/0504    
	setmalloctag(b, getcallerpc(&size)); 
1999/0710    
	b->flag = BINTR; 
 
	ilock(&ialloc); 
	ialloc.bytes += b->lim - b->base; 
	iunlock(&ialloc); 
1999/0714    
	setmalloctag(b, getcallerpc(&size)); 
1999/0710    
 
	return b; 
} 
2001/0504/sys/src/9/port/allocb.c:4,102001/0527/sys/src/9/port/allocb.c:4,9 (short | long)
1999/0710    
#include	"dat.h" 
#include	"fns.h" 
#include	"error.h" 
#include	"pool.h" 
 
enum 
{ 
2001/0527/sys/src/9/port/allocb.c:63,692001/0804/sys/src/9/port/allocb.c:63,73 (short | long)
2001/0504    
	if(up == nil) 
		panic("allocb without up: %uX\n", getcallerpc(&size)); 
	if((b = _allocb(size)) == nil) 
		panic("allocb: no memory\n"); 
2001/0804    
{ 
xsummary(); 
mallocsummary(); 
		panic("allocb: no memory for %d bytes\n", size); 
} 
1999/0714    
	setmalloctag(b, getcallerpc(&size)); 
1999/0710    
 
	return b; 
2001/0804/sys/src/9/port/allocb.c:62,732001/0822/sys/src/9/port/allocb.c:62,72 (short | long)
2001/0504    
	 */ 
	if(up == nil) 
		panic("allocb without up: %uX\n", getcallerpc(&size)); 
	if((b = _allocb(size)) == nil) 
2001/0804    
{ 
xsummary(); 
mallocsummary(); 
2001/0822    
	if((b = _allocb(size)) == nil){ 
		xsummary(); 
		mallocsummary(); 
2001/0804    
		panic("allocb: no memory for %d bytes\n", size); 
} 
2001/0822    
	} 
1999/0714    
	setmalloctag(b, getcallerpc(&size)); 
1999/0710    
 
	return b; 
2001/0822/sys/src/9/port/allocb.c:61,672002/0114/sys/src/9/port/allocb.c:61,67 (short | long)
Bug fix: print format.
rsc Fri Mar 4 12:44:25 2005
2001/0504    
	 * Can still error out of here, though. 
	 */ 
	if(up == nil) 
		panic("allocb without up: %uX\n", getcallerpc(&size)); 
2002/0114    
		panic("allocb without up: %luX\n", getcallerpc(&size)); 
2001/0822    
	if((b = _allocb(size)) == nil){ 
		xsummary(); 
		mallocsummary(); 
2002/0114/sys/src/9/port/allocb.c:76,912002/0711/sys/src/9/port/allocb.c:76,94 (short | long)
1999/0710    
iallocb(int size) 
{ 
	Block *b; 
2002/0711    
	static int m1, m2; 
1999/0710    
 
	if(ialloc.bytes > conf.ialloc){ 
		print("iallocb: limited %lud/%lud\n", 
			ialloc.bytes, conf.ialloc); 
2002/0711    
		if((m1++%10000)==0) 
			print("iallocb: limited %lud/%lud\n", 
				ialloc.bytes, conf.ialloc); 
1999/0710    
		return 0; 
	} 
 
2001/0504    
	if((b = _allocb(size)) == nil){ 
1999/0710    
		print("iallocb: no memory %lud/%lud\n", 
			ialloc.bytes, conf.ialloc); 
2002/0711    
		if((m2++%10000)==0) 
			print("iallocb: no memory %lud/%lud\n", 
				ialloc.bytes, conf.ialloc); 
1999/0710    
		return nil; 
	} 
2001/0504    
	setmalloctag(b, getcallerpc(&size)); 


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