+static void cpu_action_set_affinity(surf_action_t action, void *cpu, unsigned long mask)
+{
+ lmm_variable_t var_obj = ((surf_action_lmm_t) action)->variable;
+
+ surf_model_t cpu_model = action->model_obj;
+ xbt_assert(cpu_model->type == SURF_MODEL_TYPE_CPU);
+ cpu_Cas01_t CPU = surf_cpu_resource_priv(cpu);
+
+ XBT_IN("(%p,%lx)", action, mask);
+
+
+ unsigned long i;
+ for (i = 0; i < CPU->core; i++) {
+ unsigned long has_affinity = (1UL << i) & mask;
+ if (has_affinity) {
+ XBT_INFO("set affinity %p to cpu-%lu@%s", action, i, CPU->generic_resource.name);
+ lmm_expand(cpu_model->model_private->maxmin_system, CPU->constraint_core[i], var_obj, 1.0);
+ } else {
+ XBT_INFO("clear affinity %p to cpu-%lu@%s", action, i, CPU->generic_resource.name);
+ lmm_shrink(cpu_model->model_private->maxmin_system, CPU->constraint_core[i], var_obj);
+ }
+ }
+
+ if (cpu_model->model_private->update_mechanism == UM_LAZY) {
+ XBT_WARN("FIXME (hypervisor): Do we need to do something for the LAZY mode?");
+ }
+
+ XBT_OUT();
+}
+