23    volatile unsigned int regs[64];
 
 
   45    printf(
"async_thread started (VM:%d)!\n", 
getVmID(meta));
 
   48        read(
reg_fd, &buff, 
sizeof(buff));
 
   56                pthread_mutex_unlock(&(compl->
mutex));
 
   60    printf(
"async_thread stoped (VM:%d)!\n", 
getVmID(meta));
 
 
   79        fprintf(stderr, 
"Attempted to use ivshmem synchronization on non-" 
 
  103        fprintf(stderr, 
"Failed to open shm_file: %s\n", 
shm_file);
 
  107    meta->
regs = mmap(meta->
regs, 256, PROT_READ | PROT_WRITE,
 
  110    fprintf(stderr, 
"Ivshmem regs mapped at %p\n", meta->
regs);
 
  113        fprintf(stderr, 
"Failed to spawn async_thread\n");
 
 
  120    completion->
meta = meta;
 
  122    pthread_mutexattr_init(&(completion->
attr));
 
  123    pthread_mutexattr_setpshared(&(completion->
attr), PTHREAD_PROCESS_SHARED);
 
  124    pthread_mutex_init(&(completion->
mutex), &(completion->
attr));
 
  126    pthread_mutex_lock(&(completion->
mutex)); 
 
 
  137    if (pthread_mutex_trylock(&(completion->
mutex))) { 
 
  141    pthread_mutex_lock(&(completion->
mutex)); 
 
 
  163    int val = __sync_fetch_and_add(&(sem->
value), 1);
 
  176        }
while ( (val = __sync_fetch_and_add(&(sem->
value), -1)) );
 
 
  183    int val = sem->
value;
 
  186        if (__sync_bool_compare_and_swap(&(sem->
value), val - 1, val)) { 
 
 
  241    printf(
"Waiting for async_thread to exit!\n");
 
  242    pthread_join(meta->
thread, 0);
 
  243    munmap(meta->
regs, 256);
 
 
#define arch_alloc_free(ALLOC, MEM)
void * arch_alloc_allocate(arch_alloc_s *alloc, size_t size)
struct utils_list_node utils_list_node_s
#define utils_list_for_each_safe(list, itr, tmp)
int utils_config_get_str(char *path, const char *key, char *value, size_t value_size, const char *def_val)
void utils_config_free_path(char *path)
int utils_config_get_bool(char *path, const char *key, int *value, int def_val)
char * utils_config_alloc_path(const char *path)
utils_list_node_s * utils_list_del(utils_list_s *list, utils_list_node_s *node)
void utils_list_node_init(utils_list_node_s *node, void *owner)
utils_list_s * utils_list_init(void *mem)
void utils_list_add(utils_list_s *list, utils_list_node_s *node)
#define utils_spinlock_lock(V)
#define utils_spinlock_init(V)
#define utils_spinlock_unlock(V)
volatile unsigned int regs[64]
volatile size_t completed
utils_list_node_s outstanding
utils_spinlock pending_lock
utils_list_s pending_list
async_semaphore_s semaphore
struct utils_list_node * next
void async_semaphore_inc(async_semaphore_s *sem)
void async_condition_wait(async_condition_s *cond)
void async_semaphore_init(async_meta_s *meta, async_semaphore_s *sem)
int async_semaphore_value(async_semaphore_s *sem)
void async_condition_unlock(async_condition_s *cond)
void async_condition_notify(async_condition_s *cond)
unsigned int getVmID(async_meta_s *meta)
void async_semaphore_dec(async_semaphore_s *sem)
void _add_completion(async_meta_s *meta, async_completion_s *completion)
void * async_thread(void *data)
void async_meta_init_once(async_meta_s *meta, arch_alloc_s *alloc)
void wakeupVm(async_meta_s *meta, unsigned int vm_id)
void async_completion_init(async_meta_s *meta, async_completion_s *completion)
void async_condition_init(async_meta_s *meta, async_condition_s *cond)
void async_completion_complete(async_completion_s *completion)
void async_meta_init_always(async_meta_s *meta)
int async_completion_check(async_completion_s *completion)
void async_completion_wait(async_completion_s *completion)
void async_condition_lock(async_condition_s *cond)
void async_meta_exit(async_meta_s *meta)