typedef struct surf_action_cpu_cas01 {
s_surf_action_lmm_t generic_lmm_action;
- s_xbt_swag_hookup_t action_list_hookup;
- int index_heap;
- double last_update;
- enum heap_action_type hat;
} s_surf_action_cpu_Cas01_t, *surf_action_cpu_Cas01_t;
typedef struct cpu_Cas01 {
/* added to manage the communication action's heap */
static void net_action_update_index_heap(void *action, int i)
{
- ((surf_action_cpu_Cas01_t) action)->index_heap = i;
+ surf_action_cpu_Cas01_t a = action;
+ GENERIC_LMM_ACTION(a).index_heap = i;
}
/* insert action on heap using a given key and a hat (heap_action_type)
static void heap_insert(surf_action_cpu_Cas01_t action, double key,
enum heap_action_type hat)
{
- action->hat = hat;
+ GENERIC_LMM_ACTION(action).hat = hat;
xbt_heap_push(cpu_action_heap, action, key);
}
static void heap_remove(surf_action_cpu_Cas01_t action)
{
- action->hat = NOTSET;
- if (((surf_action_cpu_Cas01_t) action)->index_heap >= 0) {
- xbt_heap_remove(cpu_action_heap, action->index_heap);
+ GENERIC_LMM_ACTION(action).hat = NOTSET;
+ if (GENERIC_LMM_ACTION(action).index_heap >= 0) {
+ xbt_heap_remove(cpu_action_heap, GENERIC_LMM_ACTION(action).index_heap);
}
}
if (GENERIC_ACTION(action).priority <= 0)
continue;
- delta = now - action->last_update;
+ delta = now - GENERIC_LMM_ACTION(action).last_update;
if (GENERIC_ACTION(action).remains > 0) {
double_update(&(GENERIC_ACTION(action).remains),
(surf_action_t) action,
lmm_variable_getvalue
(GENERIC_LMM_ACTION(action).
- variable), action->last_update,
- now - action->last_update);
+ variable), GENERIC_LMM_ACTION(action).last_update,
+ now - GENERIC_LMM_ACTION(action).last_update);
}
#endif
XBT_DEBUG("Update action(%p) remains %lf", action,
GENERIC_ACTION(action).remains);
}
- action->last_update = now;
+ GENERIC_LMM_ACTION(action).last_update = now;
}
}
(cpu_maxmin_system,
GENERIC_LMM_ACTION(action).variable, 0));
TRACE_surf_host_set_utilization(cpu->generic_resource.name,
- GENERIC_LMM_ACTION(action).
- generic_action.data,
+ GENERIC_LMM_ACTION(action).generic_action.data,
(surf_action_t) action,
- lmm_variable_getvalue
- (GENERIC_LMM_ACTION(action).
- variable), action->last_update,
- now - action->last_update);
+ lmm_variable_getvalue(GENERIC_LMM_ACTION(action).variable),
+ GENERIC_LMM_ACTION(action).last_update,
+ now - GENERIC_LMM_ACTION(action).last_update);
}
#endif
GENERIC_ACTION(action).remains = 0;
xbt_swag_t running_actions = surf_cpu_model->states.running_action_set;
xbt_swag_foreach(action, running_actions) {
if (smaller < 0) {
- smaller = action->last_update;
+ smaller = GENERIC_LMM_ACTION(action).last_update;
continue;
}
- if (action->last_update < smaller) {
- smaller = action->last_update;
+ if (GENERIC_LMM_ACTION(action).last_update < smaller) {
+ smaller = GENERIC_LMM_ACTION(action).last_update;
}
}
if (smaller > 0) {
GENERIC_ACTION(action).priority,
CPU->power_scale * CPU->power_peak, 1);
if (cpu_update_mechanism == UM_LAZY) {
- action->index_heap = -1;
- action->last_update = surf_get_clock();
+ GENERIC_LMM_ACTION(action).index_heap = -1;
+ GENERIC_LMM_ACTION(action).last_update = surf_get_clock();
}
lmm_expand(cpu_maxmin_system, CPU->constraint,
GENERIC_LMM_ACTION(action).variable, 1.0);
return ((cpu_Cas01_t) cpu)->power_scale;
}
-static void cpu_action_update_index_heap(void *action, int i)
-{
- ((surf_action_cpu_Cas01_t) action)->index_heap = i;
-}
-
static void cpu_finalize(void)
{
lmm_system_free(cpu_maxmin_system);
if (cpu_update_mechanism == UM_LAZY) {
cpu_action_heap = xbt_heap_new(8, NULL);
xbt_heap_set_update_callback(cpu_action_heap,
- cpu_action_update_index_heap);
+ net_action_update_index_heap);
cpu_modified_set =
- xbt_swag_new(xbt_swag_offset(comp, action_list_hookup));
+ xbt_swag_new(xbt_swag_offset(comp, generic_lmm_action.action_list_hookup));
cpu_maxmin_system->keep_track = cpu_modified_set;
}
}
/* added to manage the communication action's heap */
static void net_action_update_index_heap(void *action, int i)
{
- ((surf_action_network_CM02_t) action)->index_heap = i;
+ surf_action_network_CM02_t a = action;
+ GENERIC_LMM_ACTION(a).index_heap = i;
}
/* insert action on heap using a given key and a hat (heap_action_type)
static void heap_insert(surf_action_network_CM02_t action, double key,
enum heap_action_type hat)
{
- action->hat = hat;
+ GENERIC_LMM_ACTION(action).hat = hat;
xbt_heap_push(net_action_heap, action, key);
}
static void heap_remove(surf_action_network_CM02_t action)
{
- action->hat = NOTSET;
- if (((surf_action_network_CM02_t) action)->index_heap >= 0) {
- xbt_heap_remove(net_action_heap, action->index_heap);
+ GENERIC_LMM_ACTION(action).hat = NOTSET;
+ if (GENERIC_LMM_ACTION(action).index_heap >= 0) {
+ xbt_heap_remove(net_action_heap, GENERIC_LMM_ACTION(action).index_heap);
}
}
continue;
}
- delta = now - action->last_update;
+ delta = now - GENERIC_LMM_ACTION(action).last_update;
double_update(&(((surf_action_t)action)->remains),
lmm_variable_getvalue(((surf_action_lmm_t) action)->variable) * delta);
heap_remove(action);
}
- action->last_update = now;
+ GENERIC_LMM_ACTION(action).last_update = now;
}
}
GENERIC_ACTION(action).finish = surf_get_clock();
// if I am wearing a latency hat
- if (action->hat == LATENCY) {
+ if (GENERIC_LMM_ACTION(action).hat == LATENCY) {
lmm_update_variable_weight(network_maxmin_system, GENERIC_LMM_ACTION(action).variable,
action->weight);
heap_remove(action);
- action->last_update = surf_get_clock();
+ GENERIC_LMM_ACTION(action).last_update = surf_get_clock();
// if I am wearing a max_duration or normal hat
- } else if (action->hat == MAX_DURATION || action->hat == NORMAL) {
+ } else if (GENERIC_LMM_ACTION(action).hat == MAX_DURATION ||
+ GENERIC_LMM_ACTION(action).hat == NORMAL) {
// no need to communicate anymore
// assume that flows that reached max_duration have remaining of 0
GENERIC_ACTION(action).remains = 0;
xbt_swag_insert(action, ((surf_action_t)action)->state_set);
action->rate = rate;
if (network_update_mechanism == UM_LAZY) {
- action->index_heap = -1;
- action->last_update = surf_get_clock();
+ GENERIC_LMM_ACTION(action).index_heap = -1;
+ GENERIC_LMM_ACTION(action).last_update = surf_get_clock();
}
bandwidth_bound = -1.0;
if (network_update_mechanism == UM_LAZY) {
// add to the heap the event when the latency is payed
XBT_DEBUG("Added action (%p) one latency event at date %f", action,
- action->latency + action->last_update);
- heap_insert(action, action->latency + action->last_update,
+ action->latency + GENERIC_LMM_ACTION(action).last_update);
+ heap_insert(action, action->latency + GENERIC_LMM_ACTION(action).last_update,
xbt_dynar_is_empty(route) ? NORMAL : LATENCY);
}
} else
xbt_heap_set_update_callback(net_action_heap,
net_action_update_index_heap);
net_modified_set =
- xbt_swag_new(xbt_swag_offset(comm, action_list_hookup));
+ xbt_swag_new(xbt_swag_offset(comm, generic_lmm_action.action_list_hookup));
network_maxmin_system->keep_track = net_modified_set;
}
}