Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Add the set_affinity callback to the PM/VM models
authorTakahiro Hirofuchi <t.hirofuchi+sg@aist.go.jp>
Thu, 24 Oct 2013 09:26:47 +0000 (11:26 +0200)
committerTakahiro Hirofuchi <t.hirofuchi+sg@aist.go.jp>
Thu, 24 Oct 2013 09:26:47 +0000 (11:26 +0200)
src/surf/vm_workstation.c
src/surf/workstation.c
src/surf/workstation_private.h

index 940c139..da37c53 100644 (file)
@@ -479,6 +479,7 @@ static void surf_vm_workstation_model_init_internal(void)
 //   model->set_max_duration = ws_action_set_max_duration;
   model->set_priority     = ws_action_set_priority;
   model->set_bound        = ws_action_set_bound;
+  model->set_affinity     = ws_action_set_affinity;
 // #ifdef HAVE_TRACING
 //   model->set_category     = ws_action_set_category;
 // #endif
index cae612e..8dce18f 100644 (file)
@@ -318,6 +318,16 @@ void ws_action_set_bound(surf_action_t action, double bound)
     DIE_IMPOSSIBLE;
 }
 
+void ws_action_set_affinity(surf_action_t action, void *workstation, unsigned long mask)
+{
+  if (action->model_obj->type == SURF_MODEL_TYPE_NETWORK)
+    DIE_IMPOSSIBLE;
+  else if (action->model_obj->type == SURF_MODEL_TYPE_CPU)
+    action->model_obj->set_affinity(action, workstation, mask);
+  else
+    DIE_IMPOSSIBLE;
+}
+
 #ifdef HAVE_TRACING
 static void ws_action_set_category(surf_action_t action, const char *category)
 {
@@ -616,6 +626,7 @@ static void surf_workstation_model_init_internal(void)
   model->set_max_duration = ws_action_set_max_duration;
   model->set_priority     = ws_action_set_priority;
   model->set_bound        = ws_action_set_bound;
+  model->set_affinity     = ws_action_set_affinity;
   #ifdef HAVE_TRACING
   model->set_category     = ws_action_set_category;
   #endif
index 171d9b7..dfe3af6 100644 (file)
@@ -26,6 +26,7 @@ void ws_finalize(surf_model_t workstation_model);
 
 void ws_action_set_priority(surf_action_t action, double priority);
 void ws_action_set_bound(surf_action_t action, double bound);
+void ws_action_set_affinity(surf_action_t action, void *workstation, unsigned long mask);
 
 surf_action_t ws_execute(void *workstation, double size);
 surf_action_t ws_action_sleep(void *workstation, double duration);