extern u32 mallocs;
extern u32 frees;
-int start_palacios_vm(void * arg) {
- struct v3_guest * guest = (struct v3_guest *)arg;
+int start_palacios_vm(struct v3_guest * guest) {
int err;
-
- daemonize(guest->name);
- // allow_signal(SIGKILL);
-
-
init_vm_extensions(guest);
guest->v3_ctx = v3_create_vm(guest->img, (void *)guest, guest->name);
if (guest->v3_ctx == NULL) {
printk("palacios: failed to create vm\n");
- complete(&(guest->start_done));
return -1;
}
if (err) {
printk("Fails to add cdev\n");
v3_free_vm(guest->v3_ctx);
- complete(&(guest->start_done));
return -1;
}
printk("Fails to create device\n");
cdev_del(&(guest->cdev));
v3_free_vm(guest->v3_ctx);
- complete(&(guest->start_done));
return -1;
}
- complete(&(guest->start_done));
-
printk("palacios: launching vm\n");
if (v3_start_vm(guest->v3_ctx, 0xffffffff) < 0) {
return -1;
}
- complete(&(guest->thread_done));
-
printk("palacios: vm completed. returning.\n");
return 0;
v3_stop_vm(guest->v3_ctx);
- wait_for_completion(&(guest->thread_done));
v3_free_vm(guest->v3_ctx);