Exemple #1
0
//The following operations are assumed to be local 
error_t remote_fifo_init(struct remote_fifo_s *remote_fifo, size_t slot_nbr, size_t size)
{
	kmem_req_t req;
	size_t slot_size;

	slot_size = size;

	req.type  = KMEM_GENERIC;
	req.flags = AF_KERNEL | AF_ZERO;
	req.size  = slot_size * slot_nbr;

	remote_fifo->tbl = kmem_alloc(&req);

	if(remote_fifo->tbl == NULL)
		return ENOMEM;
  
	remote_fifo->wridx = 0;
	remote_fifo->rdidx = 0;
	remote_fifo->slot_nbr = slot_nbr;
	remote_fifo->slot_size = slot_size;
	remote_fifo->item_size = size;
	mcs_lock_init(&remote_fifo->lock, "Remote fifo");

	return 0;
}
Exemple #2
0
int bthread_barrier_init(bthread_barrier_t* b, const bthread_barrierattr_t* a, int count)
{
  struct mcs_lock_qnode local_qn = {0};
  memset(b->local_sense,0,sizeof(b->local_sense));

  b->sense = 0;
  b->nprocs = b->count = count;
  mcs_lock_init(&b->lock);
  return 0;
}
Exemple #3
0
/* TODO: put lock name as argument
 * and reconstruct each wait_queue name */
error_t rwlock_init(struct rwlock_s *rwlock)
{
	//spinlock_init(&rwlock->lock,"RWLOCK");
	mcs_lock_init(&rwlock->lock, "RWLOCK");
	rwlock->signature = RWLOCK_ID;
	rwlock->count     = 0;
	wait_queue_init(&rwlock->rd_wait_queue, "RWLOCK: Rreaders");
	wait_queue_init(&rwlock->wr_wait_queue, "RWLOCK: Writers");

	return 0;
}
Exemple #4
0
void init_arc(struct arsc_channel* ac)
{
	// Set up the front ring for the general syscall ring
	// and the back ring for the general sysevent ring
	mcs_lock_init(&ac->aclock);
	ac->ring_page = (syscall_sring_t*)sys_init_arsc();

	FRONT_RING_INIT(&ac->sysfr, ac->ring_page, SYSCALLRINGSIZE);
	//BACK_RING_INIT(&syseventbackring, &(__procdata.syseventring), SYSEVENTRINGSIZE);
	//TODO: eventually rethink about desc pools, they are here but no longer necessary
	POOL_INIT(&syscall_desc_pool, MAX_SYSCALLS);
	POOL_INIT(&async_desc_pool, MAX_ASYNCCALLS);
}