Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Add minor cleanup around model initialization
authorTakahiro Hirofuchi <t.hirofuchi+sg@aist.go.jp>
Mon, 18 Feb 2013 18:02:07 +0000 (19:02 +0100)
committerTakahiro Hirofuchi <t.hirofuchi+sg@aist.go.jp>
Mon, 18 Feb 2013 18:03:21 +0000 (19:03 +0100)
src/include/surf/surf.h
src/surf/cpu_cas01.c
src/surf/cpu_ti.c
src/surf/vm_workstation.c
src/surf/workstation.c

index a3d0324..6aaa2f6 100644 (file)
@@ -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
  *
index c63cc19..5a1a2af 100644 (file)
@@ -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? */
index 8849fd0..91d66ea 100644 (file)
@@ -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;
 }
 
 
index 5f771d8..d50ed45 100644 (file)
@@ -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()
index 9cf1106..7bcdc8d 100644 (file)
@@ -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)