X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=linux_module%2Fvm.c;h=a1af56498537a3de5543c665b3bf5d0837502537;hb=26f40a6baf7790464d09fb935d9ad27578bdf4e6;hp=abb798fce74abc7dfbc695b204bcef710e766f89;hpb=b1128b2a9d269fefc786c60c26878b372d5e39c1;p=palacios.git diff --git a/linux_module/vm.c b/linux_module/vm.c index abb798f..a1af564 100644 --- a/linux_module/vm.c +++ b/linux_module/vm.c @@ -127,6 +127,27 @@ static long v3_vm_ioctl(struct file * filp, printk("V3 IOCTL %d\n", ioctl); switch (ioctl) { + case V3_VM_LAUNCH: { + printk("palacios: launching vm\n"); + + if (v3_start_vm(guest->v3_ctx, (0x1 << num_online_cpus()) - 1) < 0) { + printk("palacios: launch of vm failed\n"); + return -1; + } + + break; + } + case V3_VM_STOP: { + printk("Stopping VM (%s) (%p)\n", guest->name, guest); + + if (irqs_disabled()) { + printk("WHAT!!?? IRQs are disabled??\n"); + break; + } + + v3_stop_vm(guest->v3_ctx); + break; + } case V3_VM_PAUSE: { printk("Pausing VM (%s)\n", guest->name); v3_pause_vm(guest->v3_ctx); @@ -246,7 +267,7 @@ extern u32 pg_frees; extern u32 mallocs; extern u32 frees; -int start_palacios_vm(struct v3_guest * guest) { +int create_palacios_vm(struct v3_guest * guest) { int err; init_vm_extensions(guest); @@ -283,17 +304,7 @@ int start_palacios_vm(struct v3_guest * guest) { return -1; } - printk("palacios: launching vm\n"); - - if (v3_start_vm(guest->v3_ctx, 0xffffffff) < 0) { - printk("palacios: launch of vm failed\n"); - device_destroy(v3_class, guest->vm_dev); - cdev_del(&(guest->cdev)); - v3_free_vm(guest->v3_ctx); - return -1; - } - - printk("palacios: vm completed. returning.\n"); + printk("palacios: vm created at /dev/v3-vm%d\n", MINOR(guest->vm_dev)); return 0; } @@ -301,11 +312,8 @@ int start_palacios_vm(struct v3_guest * guest) { -int stop_palacios_vm(struct v3_guest * guest) { - - - v3_stop_vm(guest->v3_ctx); +int free_palacios_vm(struct v3_guest * guest) { v3_free_vm(guest->v3_ctx);