X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?p=palacios.git;a=blobdiff_plain;f=palacios%2Fsrc%2Fpalacios%2Fvmm_extensions.c;h=af2c0e2756408210a55b6473d05e529b66137ce0;hp=f5a14c31a1545c780001dbd9313e1a48009ac904;hb=88a3605446744969abe6f193a7bc20e62d5aa555;hpb=acaadd79c597c8d5180fbfbec79c01fef3dff003 diff --git a/palacios/src/palacios/vmm_extensions.c b/palacios/src/palacios/vmm_extensions.c index f5a14c3..af2c0e2 100644 --- a/palacios/src/palacios/vmm_extensions.c +++ b/palacios/src/palacios/vmm_extensions.c @@ -58,6 +58,12 @@ int V3_init_extensions() { ext_table = v3_create_htable(0, ext_hash_fn, ext_eq_fn); while (tmp_ext != __stop__v3_extensions) { + + if ((*tmp_ext) && (*tmp_ext)->init && ((*tmp_ext)->init() != 0)) { + PrintError(VM_NONE, VCORE_NONE, "Could not initialize extension (%s)\n", (*tmp_ext)->name); + return -1; + } + V3_Print(VM_NONE, VCORE_NONE, "Registering Extension (%s)\n", (*tmp_ext)->name); if (v3_htable_search(ext_table, (addr_t)((*tmp_ext)->name))) { @@ -110,22 +116,24 @@ int v3_deinit_ext_manager(struct v3_vm_info * vm) { list_for_each_entry_safe(ext, tmp, &(ext_state->extensions), node) { V3_Print(vm, VCORE_NONE, "Cleaning up Extension (%s)\n", ext->impl->name); - if ((ext->impl) && (ext->impl->deinit)) { - if (ext->impl->deinit(vm, ext->priv_data) == -1) { - PrintError(vm, VCORE_NONE, "Error cleaning up extension (%s)\n", ext->impl->name); - return -1; + if (ext->impl) { + if (ext->impl->vm_deinit) { + if (ext->impl->vm_deinit(vm, ext->priv_data) == -1) { + PrintError(vm, VCORE_NONE, "Error cleaning up extension (%s)\n", ext->impl->name); + return -1; + } } - } - - if (ext->impl->on_exit) - list_del(&ext->exit_node); - - if (ext->impl->on_entry) - list_del(&ext->entry_node); - - list_del(&ext->node); - V3_Free(ext); + if (ext->impl->on_exit) + list_del(&ext->exit_node); + + if (ext->impl->on_entry) + list_del(&ext->entry_node); + } + + list_del(&ext->node); + V3_Free(ext); + } return 0; @@ -145,7 +153,7 @@ int v3_add_extension(struct v3_vm_info * vm, const char * name, v3_cfg_tree_t * return -1; } - V3_ASSERT(vm, VCORE_NONE, impl->init); + V3_ASSERT(vm, VCORE_NONE, impl->vm_init); /* this allows each extension to track its own per-core state */ ext_size = sizeof(struct v3_extension) + (sizeof(void *) * vm->num_cores); @@ -158,7 +166,7 @@ int v3_add_extension(struct v3_vm_info * vm, const char * name, v3_cfg_tree_t * ext->impl = impl; - if (impl->init(vm, cfg, &(ext->priv_data)) == -1) { + if (impl->vm_init(vm, cfg, &(ext->priv_data)) == -1) { PrintError(vm, VCORE_NONE, "Error initializing Extension (%s)\n", name); V3_Free(ext); return -1;