void * _list_process(list_t *list, reduce_t reducer, void *data) { listprocessor_t *lp = lp_create(list, reducer, data); void *ret = lp_run(lp); lp_free(lp); return ret; }
// Creates a Logical Page and Allocates Swap & RAM. static int lp_setup (struct lpage **lpret, paddr_t *paret) { struct lpage *lp = NULL; paddr_t pa; off_t swa; DEBUG(DB_VM, "LPage: lp_setup\n"); lp = lp_create(); if (lp == NULL) { return (ENOMEM); } swa = swap_allocate(); if (swa == INVALID_SWAPADDR) { lp_destroy(lp); return (ENOSPC); } lock_acquire(lp -> lock); pa = cm_allocuserpage(lp); if (pa == INVALID_PADDR) { swap_deallocate(swa); lock_release(lp -> lock); lp_destroy(lp); return (ENOSPC); } lp -> paddr = pa | LPF_DIRTY | LPF_LOCKED; lp -> swapaddr = swa; KASSERT(cm_pageispinned(pa)); *lpret = lp; *paret = pa; return (0); }