示例#1
0
文件: list.c 项目: JanDeVisser/obelix
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;
}
示例#2
0
// 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);

}