From 3ac73c74583bb8cad30ead8a3ded22945c2af61e Mon Sep 17 00:00:00 2001 From: Takahiro Hirofuchi Date: Mon, 18 Feb 2013 19:02:07 +0100 Subject: [PATCH] Add minor cleanup around model initialization --- src/include/surf/surf.h | 4 +- src/surf/cpu_cas01.c | 41 +++++++------- src/surf/cpu_ti.c | 12 +++-- src/surf/vm_workstation.c | 28 ++++++---- src/surf/workstation.c | 110 ++++++++++++++++++-------------------- 5 files changed, 98 insertions(+), 97 deletions(-) diff --git a/src/include/surf/surf.h b/src/include/surf/surf.h index a3d032488c..6aaa2f6c42 100644 --- a/src/include/surf/surf.h +++ b/src/include/surf/surf.h @@ -117,7 +117,7 @@ typedef struct surf_action { /* The previous name was model_type. For VM support, we have to distinguish a * model type and its model object. Thus, we use model_obj here. The type of - * a model object is available through a macro. */ + * a model object is available by looking at the inside of the model object. */ surf_model_t model_obj; /**< the surf model object */ #ifdef HAVE_TRACING @@ -458,7 +458,7 @@ XBT_PUBLIC(void) surf_cpu_model_init_Cas01(void); * You shouldn't have to call it by yourself. * \see surf_workstation_model_init_CLM03() */ -XBT_PUBLIC(void) surf_cpu_model_init_ti(surf_model_t cpu_model); +XBT_PUBLIC(surf_model_t) surf_cpu_model_init_ti(void); /** \brief This function call the share resources function needed * diff --git a/src/surf/cpu_cas01.c b/src/surf/cpu_cas01.c index c63cc19b8b..5a1a2af871 100644 --- a/src/surf/cpu_cas01.c +++ b/src/surf/cpu_cas01.c @@ -122,7 +122,7 @@ static void cpu_add_traces_cpu(void) } } -static void cpu_define_callbacks() +static void cpu_define_callbacks_cas01() { sg_platf_host_add_cb(parse_cpu_init); sg_platf_postparse_add_cb(cpu_add_traces_cpu); @@ -321,7 +321,7 @@ static void cpu_finalize(surf_model_t cpu_model) cpu_running_action_set_that_does_not_need_being_checked = NULL; } -static void surf_cpu_model_init_internal(surf_model_t cpu_model) +static surf_model_t surf_cpu_model_init_cas01(void) { s_surf_action_t action; s_surf_action_cpu_Cas01_t comp; @@ -330,7 +330,7 @@ static void surf_cpu_model_init_internal(surf_model_t cpu_model) int select = xbt_cfg_get_int(_sg_cfg_set, "cpu/maxmin_selective_update"); - cpu_model = surf_model_init(); + surf_model_t cpu_model = surf_model_init(); if (!strcmp(optim, "Full")) { cpu_model->model_private->update_mechanism = UM_FULL; @@ -406,6 +406,8 @@ static void surf_cpu_model_init_internal(surf_model_t cpu_model) xbt_swag_new(xbt_swag_offset(comp, generic_lmm_action.action_list_hookup)); cpu_model->model_private->maxmin_system->keep_track = cpu_model->model_private->modified_set; } + + return cpu_model; } /*********************************************************************/ @@ -425,30 +427,29 @@ static void surf_cpu_model_init_internal(surf_model_t cpu_model) /* } */ -static void create_cpu_model_object(surf_model_t cpu_model) +void surf_cpu_model_init_Cas01(void) { char *optim = xbt_cfg_get_string(_sg_cfg_set, "cpu/optim"); - xbt_assert(cpu_model == NULL, "wrong intialization"); + xbt_assert(!surf_cpu_model_pm); + xbt_assert(!surf_cpu_model_vm); - if (!strcmp(optim, "TI")) { - surf_cpu_model_init_ti(cpu_model); - return; - } + if (strcmp(optim, "TI") == 0) { + /* FIXME: do we have to supprot TI? for VM */ + surf_cpu_model_pm = surf_cpu_model_init_ti(); - surf_cpu_model_init_internal(cpu_model); - cpu_define_callbacks(); + } else { + surf_cpu_model_pm = surf_cpu_model_init_cas01(); + surf_cpu_model_vm = surf_cpu_model_init_cas01(); - /* cpu_model is registered only to model_list, and not to - * model_list_invoke. The shared_resource callback function will be called - * from that of the workstation model. */ - xbt_dynar_push(model_list, &cpu_model); -} + /* cpu_model is registered only to model_list, and not to + * model_list_invoke. The shared_resource callback function will be called + * from that of the workstation model. */ + xbt_dynar_push(model_list, &surf_cpu_model_pm); + xbt_dynar_push(model_list, &surf_cpu_model_vm); -void surf_cpu_model_init_Cas01(void) -{ - create_cpu_model_object(surf_cpu_model_pm); - create_cpu_model_object(surf_cpu_model_vm); + cpu_define_callbacks_cas01(); + } } /* TODO: do we address nested virtualization later? */ diff --git a/src/surf/cpu_ti.c b/src/surf/cpu_ti.c index 8849fd065b..91d66eab9f 100644 --- a/src/surf/cpu_ti.c +++ b/src/surf/cpu_ti.c @@ -770,12 +770,12 @@ static void cpu_ti_finalize(surf_model_t cpu_model) xbt_heap_free(cpu_ti_action_heap); } -static void surf_cpu_ti_model_init_internal(surf_model_t cpu_model) +surf_model_t surf_cpu_ti_model_init_internal(void) { s_surf_action_t action; s_cpu_ti_t cpu; - cpu_model = surf_model_init(); + surf_model_t cpu_model = surf_model_init(); cpu_ti_running_action_set_that_does_not_need_being_checked = xbt_swag_new(xbt_swag_offset(action, state_hookup)); @@ -818,14 +818,16 @@ static void surf_cpu_ti_model_init_internal(surf_model_t cpu_model) xbt_heap_set_update_callback(cpu_ti_action_heap, cpu_ti_action_update_index_heap); + return cpu_model; } -void surf_cpu_model_init_ti(surf_model_t cpu_model) +surf_model_t surf_cpu_model_init_ti(void) { - xbt_assert(!cpu_model,"CPU model already initialized. This should not happen."); - surf_cpu_ti_model_init_internal(cpu_model); + surf_model_t cpu_model = surf_cpu_ti_model_init_internal(); cpu_ti_define_callbacks(); xbt_dynar_push(model_list, &cpu_model); + + return cpu_model; } diff --git a/src/surf/vm_workstation.c b/src/surf/vm_workstation.c index 5f771d87aa..d50ed45905 100644 --- a/src/surf/vm_workstation.c +++ b/src/surf/vm_workstation.c @@ -189,21 +189,27 @@ static const char *vm_ws_get_phys_host(void *ind_vm_ws) static void surf_vm_workstation_model_init_internal(void) { - surf_vm_workstation_model = surf_model_init(); + surf_model_t model = surf_model_init(); - surf_vm_workstation_model->name = "Virtual Workstation"; - surf_vm_workstation_model->type = SURF_MODEL_TYPE_VM_WORKSTATION; + model->name = "Virtual Workstation"; + model->type = SURF_MODEL_TYPE_VM_WORKSTATION; - surf_vm_workstation_model->extension.vm_workstation.basic.cpu_model = surf_cpu_model_vm; + model->extension.vm_workstation.basic.cpu_model = surf_cpu_model_vm; - surf_vm_workstation_model->extension.vm_workstation.create = vm_ws_create; - surf_vm_workstation_model->extension.vm_workstation.set_state = vm_ws_set_state; - surf_vm_workstation_model->extension.vm_workstation.get_state = vm_ws_get_state; - surf_vm_workstation_model->extension.vm_workstation.migrate = vm_ws_migrate; - surf_vm_workstation_model->extension.vm_workstation.get_phys_host = vm_ws_get_phys_host; - surf_vm_workstation_model->extension.vm_workstation.destroy = vm_ws_destroy; + model->extension.vm_workstation.create = vm_ws_create; + model->extension.vm_workstation.set_state = vm_ws_set_state; + model->extension.vm_workstation.get_state = vm_ws_get_state; + model->extension.vm_workstation.migrate = vm_ws_migrate; + model->extension.vm_workstation.get_phys_host = vm_ws_get_phys_host; + model->extension.vm_workstation.destroy = vm_ws_destroy; - surf_vm_workstation_model->model_private->share_resources = vm_ws_share_resources; + model->model_private->share_resources = vm_ws_share_resources; + model->model_private->resource_used = ws_resource_used; + model->model_private->update_actions_state = ws_update_actions_state; + model->model_private->update_resource_state = ws_update_resource_state; + model->model_private->finalize = ws_finalize; + + surf_vm_workstation_model = model; } void surf_vm_workstation_model_init() diff --git a/src/surf/workstation.c b/src/surf/workstation.c index 9cf1106d08..7bcdc8d26d 100644 --- a/src/surf/workstation.c +++ b/src/surf/workstation.c @@ -402,69 +402,61 @@ static surf_action_t ws_action_ls(void *workstation, const char* mount, const ch static void surf_workstation_model_init_internal(void) { - surf_workstation_model = surf_model_init(); - - surf_workstation_model->name = "Workstation"; - surf_workstation_model->type = SURF_MODEL_TYPE_WORKSTATION; - surf_workstation_model->action_unref = ws_action_unref; - surf_workstation_model->action_cancel = ws_action_cancel; - surf_workstation_model->action_state_set = ws_action_state_set; - - surf_workstation_model->model_private->resource_used = ws_resource_used; - surf_workstation_model->model_private->share_resources = - ws_share_resources; - surf_workstation_model->model_private->update_actions_state = - ws_update_actions_state; - surf_workstation_model->model_private->update_resource_state = - ws_update_resource_state; - surf_workstation_model->model_private->finalize = ws_finalize; - - surf_workstation_model->suspend = ws_action_suspend; - surf_workstation_model->resume = ws_action_resume; - surf_workstation_model->is_suspended = ws_action_is_suspended; - surf_workstation_model->set_max_duration = ws_action_set_max_duration; - surf_workstation_model->set_priority = ws_action_set_priority; -#ifdef HAVE_TRACING - surf_workstation_model->set_category = ws_action_set_category; -#endif - surf_workstation_model->get_remains = ws_action_get_remains; -#ifdef HAVE_LATENCY_BOUND_TRACKING - surf_workstation_model->get_latency_limited = ws_get_latency_limited; -#endif + surf_model_t model = surf_model_init(); + + model->name = "Workstation"; + model->type = SURF_MODEL_TYPE_WORKSTATION; + model->action_unref = ws_action_unref; + model->action_cancel = ws_action_cancel; + model->action_state_set = ws_action_state_set; + + model->model_private->resource_used = ws_resource_used; + model->model_private->share_resources = ws_share_resources; + model->model_private->update_actions_state = ws_update_actions_state; + model->model_private->update_resource_state = ws_update_resource_state; + model->model_private->finalize = ws_finalize; + + model->suspend = ws_action_suspend; + model->resume = ws_action_resume; + model->is_suspended = ws_action_is_suspended; + model->set_max_duration = ws_action_set_max_duration; + model->set_priority = ws_action_set_priority; + #ifdef HAVE_TRACING + model->set_category = ws_action_set_category; + #endif + model->get_remains = ws_action_get_remains; + #ifdef HAVE_LATENCY_BOUND_TRACKING + model->get_latency_limited = ws_get_latency_limited; + #endif /* For VM support, we have a surf cpu model object for each workstation model * object. The physical workstation model object has the cpu model object of * the physical machine layer. */ - surf_workstation_model->extension.workstation.cpu_model = surf_cpu_model_pm; - - surf_workstation_model->extension.workstation.execute = ws_execute; - surf_workstation_model->extension.workstation.sleep = ws_action_sleep; - surf_workstation_model->extension.workstation.get_state = ws_get_state; - surf_workstation_model->extension.workstation.get_speed = ws_get_speed; - surf_workstation_model->extension.workstation.get_available_speed = - ws_get_available_speed; - - surf_workstation_model->extension.workstation.communicate = - ws_communicate; - surf_workstation_model->extension.workstation.get_route = ws_get_route; - surf_workstation_model->extension.workstation.execute_parallel_task = - ws_execute_parallel_task; - surf_workstation_model->extension.workstation.get_link_bandwidth = - ws_get_link_bandwidth; - surf_workstation_model->extension.workstation.get_link_latency = - ws_get_link_latency; - surf_workstation_model->extension.workstation.link_shared = - ws_link_shared; - surf_workstation_model->extension.workstation.get_properties = - ws_get_properties; - - surf_workstation_model->extension.workstation.open = ws_action_open; - surf_workstation_model->extension.workstation.close = ws_action_close; - surf_workstation_model->extension.workstation.read = ws_action_read; - surf_workstation_model->extension.workstation.write = ws_action_write; - surf_workstation_model->extension.workstation.stat = ws_action_stat; - surf_workstation_model->extension.workstation.unlink = ws_action_unlink; - surf_workstation_model->extension.workstation.ls = ws_action_ls; + model->extension.workstation.cpu_model = surf_cpu_model_pm; + + model->extension.workstation.execute = ws_execute; + model->extension.workstation.sleep = ws_action_sleep; + model->extension.workstation.get_state = ws_get_state; + model->extension.workstation.get_speed = ws_get_speed; + model->extension.workstation.get_available_speed = ws_get_available_speed; + + model->extension.workstation.communicate = ws_communicate; + model->extension.workstation.get_route = ws_get_route; + model->extension.workstation.execute_parallel_task = ws_execute_parallel_task; + model->extension.workstation.get_link_bandwidth = ws_get_link_bandwidth; + model->extension.workstation.get_link_latency = ws_get_link_latency; + model->extension.workstation.link_shared = ws_link_shared; + model->extension.workstation.get_properties = ws_get_properties; + + model->extension.workstation.open = ws_action_open; + model->extension.workstation.close = ws_action_close; + model->extension.workstation.read = ws_action_read; + model->extension.workstation.write = ws_action_write; + model->extension.workstation.stat = ws_action_stat; + model->extension.workstation.unlink = ws_action_unlink; + model->extension.workstation.ls = ws_action_ls; + + surf_workstation_model = model; } void surf_workstation_model_init_current_default(void) -- 2.20.1