X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=linux_module%2Fpalacios-vm.c;h=e98be0c98d9609f3465a0b36814133c5355ea7e5;hb=3518e3eb158edabb0d471ceb406c450490a4d07a;hp=d19e7053d22e81e8b0c2587ba422c7878e2325e1;hpb=5e16adcc49f8c77319004ada0276ccd301c67dd1;p=palacios-OLD.git diff --git a/linux_module/palacios-vm.c b/linux_module/palacios-vm.c index d19e705..e98be0c 100644 --- a/linux_module/palacios-vm.c +++ b/linux_module/palacios-vm.c @@ -13,7 +13,6 @@ #include #include -#include #include #include #include @@ -22,6 +21,7 @@ #include "palacios.h" #include "palacios-vm.h" +#include "linux-exts.h" struct vm_ctrl { @@ -111,29 +111,13 @@ static struct vm_ctrl * get_ctrl(struct v3_guest * guest, unsigned int cmd) { } -#ifdef V3_CONFIG_STREAM -#include "palacios-stream.h" -#endif -#ifdef V3_CONFIG_CONSOLE -#include "palacios-console.h" -#endif -#ifdef V3_CONFIG_EXT_INSPECTOR -#include "palacios-inspector.h" -#endif -#ifdef V3_CONFIG_GRAPHICS_CONSOLE -#include "palacios-graphics-console.h" -#endif -#ifdef V3_CONFIG_HOST_DEVICE -#include "palacios-host-dev.h" -#define HOST_DEV_URL_LEN 256 -#endif extern struct class * v3_class; -#define STREAM_NAME_LEN 128 + static long v3_vm_ioctl(struct file * filp, unsigned int ioctl, unsigned long arg) { @@ -150,71 +134,6 @@ static long v3_vm_ioctl(struct file * filp, break; } - case V3_VM_CONSOLE_CONNECT: { -#ifdef V3_CONFIG_CONSOLE - return connect_console(guest); -#else - printk("Console support not available\n"); - return -EFAULT; -#endif - break; - } - - case V3_VM_STREAM_CONNECT: { -#ifdef V3_CONFIG_STREAM - void __user * argp = (void __user *)arg; - char path_name[STREAM_NAME_LEN]; - - if (copy_from_user(path_name, argp, STREAM_NAME_LEN)) { - printk("%s(%d): copy from user error...\n", __FILE__, __LINE__); - return -EFAULT; - } - - return open_stream(path_name); -#else - printk("Stream support Not available\n"); - return -EFAULT; -#endif - break; - } - - case V3_VM_HOST_DEV_CONNECT: { -#ifdef V3_CONFIG_HOST_DEVICE - void __user * argp = (void __user *)arg; - char host_dev_url[HOST_DEV_URL_LEN]; - - if (copy_from_user(host_dev_url, argp, HOST_DEV_URL_LEN)) { - printk("copy from user error getting url for host device connect...\n"); - return -EFAULT; - } - - return connect_host_dev(guest,host_dev_url); -#else - printk("palacios: Host device support not available\n"); - return -EFAULT; -#endif - break; - } - - case V3_VM_FB_INPUT: -#ifdef V3_CONFIG_GRAPHICS_CONSOLE - return palacios_graphics_console_user_input(&(guest->graphics_console), - (struct v3_fb_input __user *) arg) ; -#else - return -EFAULT; -#endif - break; - - case V3_VM_FB_QUERY: -#ifdef V3_CONFIG_GRAPHICS_CONSOLE - return palacios_graphics_console_user_query(&(guest->graphics_console), - (struct v3_fb_query_response __user *) arg); -#else - return -EFAULT; -#endif - break; - - default: { struct vm_ctrl * ctrl = get_ctrl(guest, ioctl); @@ -269,11 +188,12 @@ int start_palacios_vm(void * arg) { struct v3_guest * guest = (struct v3_guest *)arg; int err; - lock_kernel(); + daemonize(guest->name); // allow_signal(SIGKILL); - unlock_kernel(); + + init_vm_extensions(guest); guest->v3_ctx = v3_create_vm(guest->img, (void *)guest, guest->name); @@ -283,10 +203,6 @@ int start_palacios_vm(void * arg) { return -1; } - // init linux extensions -#ifdef V3_CONFIG_EXT_INSPECTOR - inspect_vm(guest); -#endif printk("Creating VM device: Major %d, Minor %d\n", MAJOR(guest->vm_dev), MINOR(guest->vm_dev)); @@ -301,6 +217,7 @@ int start_palacios_vm(void * arg) { if (err) { printk("Fails to add cdev\n"); + v3_free_vm(guest->v3_ctx); complete(&(guest->start_done)); return -1; } @@ -308,15 +225,7 @@ int start_palacios_vm(void * arg) { if (device_create(v3_class, NULL, guest->vm_dev, guest, "v3-vm%d", MINOR(guest->vm_dev)) == NULL){ printk("Fails to create device\n"); cdev_del(&(guest->cdev)); - complete(&(guest->start_done)); - return -1; - } - - guest->v3_ctx = v3_create_vm(guest->img, (void *)guest, guest->name); - - if (guest->v3_ctx == NULL) { - printk("palacios: failed to create vm\n"); - cdev_del(&(guest->cdev)); + v3_free_vm(guest->v3_ctx); complete(&(guest->start_done)); return -1; } @@ -325,10 +234,6 @@ int start_palacios_vm(void * arg) { 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);