static int __init daemon_mterm_init(void) { u8 mterm_priority; u32 mterm_time_slice; struct vmm_devtree_node * node; const char * attrval; /* Reset the control structure */ vmm_memset(&mtctrl, 0, sizeof(mtctrl)); /* Retrive mterm time slice */ node = vmm_devtree_getnode(VMM_DEVTREE_PATH_SEPARATOR_STRING VMM_DEVTREE_VMMINFO_NODE_NAME); if (!node) { return VMM_EFAIL; } attrval = vmm_devtree_attrval(node, "mterm_priority"); if (attrval) { mterm_priority = *((u32 *) attrval); } else { mterm_priority = VMM_THREAD_DEF_PRIORITY; } attrval = vmm_devtree_attrval(node, "mterm_time_slice"); if (attrval) { mterm_time_slice = *((u32 *) attrval); } else { mterm_time_slice = VMM_THREAD_DEF_TIME_SLICE; } /* Create mterm thread */ mtctrl.thread = vmm_threads_create("mterm", &mterm_main, NULL, mterm_priority, mterm_time_slice); if (!mtctrl.thread) { vmm_panic("Creation of system critical thread failed.\n"); } /* Start the mterm thread */ vmm_threads_start(mtctrl.thread); return VMM_OK; }
static int semaphore5_run(struct wboxtest *test, struct vmm_chardev *cdev, u32 test_hcpu) { int i, ret = VMM_OK; char wname[VMM_FIELD_NAME_SIZE]; u8 current_priority = vmm_scheduler_current_priority(); const struct vmm_cpumask *cpu_mask = vmm_cpumask_of(test_hcpu); /* Initialise global data */ memset(workers, 0, sizeof(workers)); /* Create worker threads */ for (i = 0; i < NUM_THREADS; i++) { vmm_snprintf(wname, VMM_FIELD_NAME_SIZE, "semaphore5_worker%d", i); workers[i] = vmm_threads_create(wname, semaphore5_worker_thread_main, (void *)(unsigned long)i, current_priority, VMM_THREAD_DEF_TIME_SLICE); if (workers[i] == NULL) { ret = VMM_EFAIL; goto destroy_workers; } vmm_threads_set_affinity(workers[i], cpu_mask); } /* Do the test */ ret = semaphore5_do_test(cdev); /* Destroy worker threads */ destroy_workers: for (i = 0; i < NUM_THREADS; i++) { if (workers[i]) { vmm_threads_destroy(workers[i]); workers[i] = NULL; } } return ret; }