+
+double generic_share_resources(double now)
+{
+ surf_action_cpu_Cas01_im_t action;
+ if(update_mechanism == UM_FULL)
+ return cpu_im_share_resources(now);
+ else if (update_mechanism == UM_LAZY)
+ {
+ return generic_maxmin_share_resources(surf_cpu_model->states.running_action_set,
+ xbt_swag_offset(*action, generic_lmm_action.variable),
+ cpu_im_maxmin_system, lmm_solve);
+ } else {
+ xbt_die("Invalide update mechanism!");
+ return 0;
+ }
+}
+
+static void cpu_update_actions_state(double now, double delta)
+{
+ surf_action_cpu_Cas01_im_t action = NULL;
+ surf_action_cpu_Cas01_im_t next_action = NULL;
+ xbt_swag_t running_actions = surf_cpu_model->states.running_action_set;
+ xbt_swag_foreach_safe(action, next_action, running_actions) {
+#ifdef HAVE_TRACING
+ if (TRACE_is_enabled()) {
+ cpu_Cas01_im_t x =
+ lmm_constraint_id(lmm_get_cnst_from_var
+ (cpu_maxmin_system, GENERIC_LMM_ACTION(action).variable, 0));
+
+ TRACE_surf_host_set_utilization(x->generic_resource.name,
+ GENERIC_ACTION(action).data,
+ (surf_action_t) action,
+ lmm_variable_getvalue
+ (GENERIC_LMM_ACTION(action).variable), now - delta,
+ delta);
+ TRACE_last_timestamp_to_dump = now-delta;
+ }
+#endif
+ double_update(&(GENERIC_ACTION(action).remains),
+ lmm_variable_getvalue(GENERIC_LMM_ACTION(action).variable) * delta);
+ if (GENERIC_LMM_ACTION(action).generic_action.max_duration != NO_MAX_DURATION)
+ double_update(&(GENERIC_ACTION(action).max_duration), delta);
+ if ((GENERIC_ACTION(action).remains <= 0) &&
+ (lmm_get_variable_weight(GENERIC_LMM_ACTION(action).variable) > 0)) {
+ GENERIC_ACTION(action).finish = surf_get_clock();
+ cpu_im_cpu_action_state_set((surf_action_t) action, SURF_ACTION_DONE);
+ } else if ((GENERIC_ACTION(action).max_duration != NO_MAX_DURATION) &&
+ (GENERIC_ACTION(action).max_duration <= 0)) {
+ GENERIC_ACTION(action).finish = surf_get_clock();
+ cpu_im_cpu_action_state_set((surf_action_t) action, SURF_ACTION_DONE);
+ }
+ }
+
+ return;
+}
+
+void generic_update_actions_state(double now, double delta)
+{
+ if(update_mechanism == UM_FULL)
+ cpu_im_update_actions_state(now, delta);
+ else if(update_mechanism == UM_LAZY)
+ {
+ cpu_update_actions_state(now, delta);
+ }
+ else
+ xbt_die("Not recognized surf cpu model!");
+}