BBN-Vax-TCP/sys/calloc.c
/* calloc.c 4.2 81/04/28 */
#include "../h/param.h"
#include "../h/dir.h"
#include "../h/user.h"
#include "../h/proc.h"
#include "../h/vm.h"
#include "../h/pte.h"
#include "../h/cmap.h"
extern cabase, calimit;
extern struct pte camap[];
caddr_t cacur = (caddr_t)&cabase;
caddr_t camax = (caddr_t)&cabase;
int cax = 0;
/*
* This is a kernel-mode storage allocator.
* It is very primitive, currently, in that
* there is no way to give space back.
* It serves, for the time being, the needs of
* auto-configuration code and the like which
* need to allocate some stuff at boot time.
*/
caddr_t
calloc(size)
int size;
{
register caddr_t res;
register int i;
if (cacur+size >= (caddr_t)&calimit)
panic("calloc");
while (cacur+size > camax) {
(void) vmemall(&camap[cax], CLSIZE, &proc[0], CSYS);
vmaccess(&camap[cax], camax, CLSIZE);
for (i = 0; i < CLSIZE; i++)
clearseg(camap[cax++].pg_pfnum);
camax += NBPG * CLSIZE;
}
res = cacur;
cacur += size;
return (res);
}