/* * Allocate the maps for this task post fork * We have a hackish fix for init that would be nice * resolve. * * FIXME: we need to move udata.u_top into p-> in order to * support banked swapping. */ int pagemap_alloc(ptptr p) { uint8_t *ptr = (uint8_t *) & p->p_page; int needed = maps_needed(udata.u_top); int i; #ifdef SWAPDEV /* Throw our toys out of our pram until we have enough room */ while (needed > pfptr) if (swapneeded(p, 1) == NULL) return ENOMEM; #else if (needed > pfptr) /* We have no swap so poof... */ return ENOMEM; #endif /* Pages in the low then repeat the top one */ for (i = 0; i < needed; i++) ptr[i] = pfree[--pfptr]; while (i < 4) { ptr[i] = ptr[i - 1]; i++; } return 0; }
int pagemap_alloc(ptptr p) { if (pfptr == 0) swapneeded(p, 1); if (pfptr == 0) return ENOMEM; p->p_page = pfree[--pfptr]; return 0; }
/* * Allocate the maps for this task post fork * We have a hackish fix for init that would be nice * resolve. */ int pagemap_alloc(ptptr p) { uint8_t *ptr = (uint8_t *) & p->p_page; int needed = maps_needed(udata.u_top); #ifdef SWAPDEV /* Throw our toys out of our pram until we have enough room */ while (needed > pfptr) if (swapneeded(p, 1) == NULL) return ENOMEM; #else if (needed > pfptr) /* We have no swap so poof... */ return ENOMEM; #endif *ptr = pfree[--pfptr]; if (needed == 1) ptr[1] = *ptr; else ptr[1] = pfree[--pfptr]; return 0; }