X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=linux_module%2Fmain.c;h=2199d88a760989684fa98fb1527b42b8ba39cbf6;hb=ccbe7e2ab17a32e671114f258abc1d047151be2e;hp=932b739df96e72174f6c8a4ebb7458d30dbf000b;hpb=b07dd4e35a37f1db04c4f52f9904ee7206673ac6;p=palacios.git diff --git a/linux_module/main.c b/linux_module/main.c index 932b739..2199d88 100644 --- a/linux_module/main.c +++ b/linux_module/main.c @@ -90,7 +90,7 @@ static long v3_dev_ioctl(struct file * filp, struct v3_guest_img user_image; struct v3_guest * guest = palacios_alloc(sizeof(struct v3_guest)); - if (IS_ERR(guest)) { + if (!(guest)) { ERROR("Palacios: Error allocating Kernel guest_image\n"); return -EFAULT; } @@ -118,7 +118,7 @@ static long v3_dev_ioctl(struct file * filp, DEBUG("Palacios: Allocating kernel memory for guest image (%llu bytes)\n", user_image.size); guest->img = palacios_valloc(guest->img_size); - if (IS_ERR(guest->img)) { + if (!guest->img) { ERROR("Palacios Error: Could not allocate space for guest image\n"); goto out_err1; } @@ -326,7 +326,8 @@ static int read_guests_details(struct seq_file *s, void *v) base->state==V3_VM_STOPPED ? "stopped" : base->state==V3_VM_PAUSED ? "paused" : base->state==V3_VM_ERROR ? "ERROR" : - base->state==V3_VM_SIMULATING ? "simulating" : "UNKNOWN", + base->state==V3_VM_SIMULATING ? "simulating" : + base->state==V3_VM_RESETTING ? "resetting" : "UNKNOWN", core->num_vcores, mem->num_regions); seq_printf(s, "Core States\n"); @@ -337,7 +338,8 @@ static int read_guests_details(struct seq_file *s, void *v) j, core->vcore[j].state==V3_VCORE_INVALID ? "INVALID" : core->vcore[j].state==V3_VCORE_RUNNING ? "running" : - core->vcore[j].state==V3_VCORE_STOPPED ? "stopped" : "UNKNOWN", + core->vcore[j].state==V3_VCORE_STOPPED ? "stopped" : + core->vcore[j].state==V3_VCORE_RESETTING ? "resetting" : "UNKNOWN", core->vcore[j].pcore, core->vcore[j].num_exits, core->vcore[j].last_rip, @@ -355,9 +357,11 @@ static int read_guests_details(struct seq_file *s, void *v) seq_printf(s, "\nMemory Regions\n"); for (j=0;jnum_regions;j++) { - seq_printf(s," region %u has HPAs 0x%p-0x%p (node %d)\n", + seq_printf(s," region %u has HPAs 0x%p-0x%p (node %d) %s %s\n", j, mem->region[j].host_paddr, mem->region[j].host_paddr+mem->region[j].size, - numa_addr_to_node((uintptr_t)(mem->region[j].host_paddr))); + numa_addr_to_node((uintptr_t)(mem->region[j].host_paddr)), + mem->region[j].swapped ? "swapped" : "", + mem->region[j].pinned ? "pinned" : ""); } } seq_printf(s, @@ -576,7 +580,7 @@ static int __init v3_init(void) { v3_class = class_create(THIS_MODULE, "vms"); - if (IS_ERR(v3_class)) { + if (!v3_class || IS_ERR(v3_class)) { ERROR("Failed to register V3 VM device class\n"); ret = PTR_ERR(v3_class); goto failure3; @@ -682,8 +686,13 @@ static void __exit v3_exit(void) { /* Stop and free any running VMs */ for (i = 0; i < MAX_VMS; i++) { - if (guest_map[i] != NULL) { - guest = (struct v3_guest *)guest_map[i]; + if (guest_map[i] != NULL) { + guest = (struct v3_guest *)(guest_map[i]); + + if (!guest->v3_ctx) { + ERROR("Orphan VM detected and skipped: index=%d name=%s\n", i, guest->name); + continue; + } if (v3_stop_vm(guest->v3_ctx) < 0) ERROR("Couldn't stop VM %d\n", i);