X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=palacios%2Fsrc%2Fpalacios%2Fvmm_dev_mgr.c;h=0904ea1263c3583646dfd58fb35dd2e8a1b60f19;hb=5257fd647c7873d682ccaece28b64fc0fb26d28a;hp=2c449bc02bf78448674057fda6c0e1b493c33397;hpb=82071a7f5f0b18fbf1a4adc2a37fed1624572a79;p=palacios.git diff --git a/palacios/src/palacios/vmm_dev_mgr.c b/palacios/src/palacios/vmm_dev_mgr.c index 2c449bc..0904ea1 100644 --- a/palacios/src/palacios/vmm_dev_mgr.c +++ b/palacios/src/palacios/vmm_dev_mgr.c @@ -119,7 +119,9 @@ int v3_init_dev_mgr(struct v3_vm_info * vm) { mgr->net_table = v3_create_htable(0, dev_hash_fn, dev_eq_fn); mgr->char_table = v3_create_htable(0, dev_hash_fn, dev_eq_fn); mgr->cons_table = v3_create_htable(0, dev_hash_fn, dev_eq_fn); - + + mgr->inited = 1; + return 0; } @@ -129,8 +131,10 @@ int v3_free_vm_devices(struct v3_vm_info * vm) { struct vm_device * dev; struct vm_device * tmp; - list_for_each_entry_safe(dev, tmp, &(mgr->dev_list), dev_link) { - v3_remove_device(dev); + if (mgr && mgr->num_devs > 0) { + list_for_each_entry_safe(dev, tmp, &(mgr->dev_list), dev_link) { + v3_remove_device(dev); + } } return 0; @@ -326,8 +330,17 @@ int v3_load_vm_devices(struct v3_vm_info * vm, struct v3_chkpt * chkpt) { static int free_frontends(struct v3_vm_info * vm, struct vmm_dev_mgr * mgr); int v3_deinit_dev_mgr(struct v3_vm_info * vm) { - struct vmm_dev_mgr * mgr = &(vm->dev_mgr); - + struct vmm_dev_mgr * mgr=0; + + if (vm) { + mgr = &(vm->dev_mgr); + if (!mgr->inited) { + return 0; + } + } else { + return 0; + } + // clear frontend lists free_frontends(vm, mgr); @@ -864,7 +877,7 @@ static int free_frontends(struct v3_vm_info * vm, struct vmm_dev_mgr * mgr) { struct blk_frontend * tmp_blk = NULL; - + list_for_each_entry_safe(chr, tmp_chr, &(mgr->char_list), char_node) { list_del(&(chr->char_node)); V3_Free(chr);