return found;
}
+/* Each VM has a dummy CPU action on the PM layer. This CPU action works as the
+ * constraint (capacity) of the VM in the PM layer. If the VM does not have any
+ * active task, the dummy CPU action must be deactivated, so that the VM does
+ * not get any CPU share in the PM layer. */
static void adjust_weight_of_dummy_cpu_actions(void)
{
/* iterate for all hosts including virtual machines */
DIE_IMPOSSIBLE;
}
+void ws_action_set_bound(surf_action_t action, double bound)
+{
+ /* FIXME: only for CPU model object? */
+ if (action->model_obj->type == SURF_MODEL_TYPE_NETWORK)
+ surf_network_model->set_bound(action, bound);
+ else if (action->model_obj->type == SURF_MODEL_TYPE_CPU)
+ action->model_obj->set_bound(action, bound);
+ else
+ DIE_IMPOSSIBLE;
+}
+
#ifdef HAVE_TRACING
static void ws_action_set_category(surf_action_t action, const char *category)
{
return cpu->model->extension.cpu.get_state(workstation);
}
-static double ws_get_speed(void *workstation, double load)
+void ws_set_state(void *workstation, e_surf_resource_state_t state)
+{
+ surf_resource_t cpu = ((surf_resource_t) surf_cpu_resource_priv(workstation));
+ cpu->model->extension.cpu.set_state(workstation, state);
+}
+
+double ws_get_speed(void *workstation, double load)
{
surf_resource_t cpu = ((surf_resource_t) surf_cpu_resource_priv(workstation));
return cpu->model->extension.cpu.get_speed(workstation, load);
model->is_suspended = ws_action_is_suspended;
model->set_max_duration = ws_action_set_max_duration;
model->set_priority = ws_action_set_priority;
+ model->set_bound = ws_action_set_bound;
#ifdef HAVE_TRACING
model->set_category = ws_action_set_category;
#endif
model->extension.workstation.execute = ws_execute;
model->extension.workstation.sleep = ws_action_sleep;
model->extension.workstation.get_state = ws_get_state;
+ model->extension.workstation.set_state = ws_set_state;
model->extension.workstation.get_speed = ws_get_speed;
model->extension.workstation.get_available_speed = ws_get_available_speed;