/* 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); }