X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/70df654bdb90d3fe386b8cc29740d4cd990d2a0d..3ae4039533d80613612bb81524c164f33384df92:/src/simix/smx_vm.c diff --git a/src/simix/smx_vm.c b/src/simix/smx_vm.c index 8f1e9c1fcf..213c1651f5 100644 --- a/src/simix/smx_vm.c +++ b/src/simix/smx_vm.c @@ -34,12 +34,6 @@ smx_host_t SIMIX_vm_create(const char *name, smx_host_t ind_phys_host) } -smx_host_t SIMIX_pre_vm_create(smx_simcall_t simcall, const char *name, smx_host_t ind_phys_host) -{ - return SIMIX_vm_create(name, ind_phys_host); -} - - /* works for VMs and PMs */ static long host_get_ramsize(smx_host_t vm, int *overcommit) { @@ -103,23 +97,11 @@ void SIMIX_vm_start(smx_host_t ind_vm) } - -void SIMIX_pre_vm_start(smx_simcall_t simcall, smx_host_t ind_vm) -{ - SIMIX_vm_start(ind_vm); -} - int SIMIX_vm_get_state(smx_host_t ind_vm) { return surf_resource_get_state(surf_workstation_resource_priv(ind_vm)); } -int SIMIX_pre_vm_get_state(smx_simcall_t simcall, smx_host_t ind_vm) -{ - return SIMIX_vm_get_state(ind_vm); -} - - /** * \brief Function to migrate a SIMIX VM host. * @@ -128,18 +110,37 @@ int SIMIX_pre_vm_get_state(smx_simcall_t simcall, smx_host_t ind_vm) void SIMIX_vm_migrate(smx_host_t ind_vm, smx_host_t ind_dst_pm) { /* precopy migration makes the VM temporally paused */ - e_surf_vm_state_t state = SIMIX_vm_get_state(ind_vm); - xbt_assert(state == SURF_VM_STATE_SUSPENDED); + xbt_assert(SIMIX_vm_get_state(ind_vm) == SURF_VM_STATE_SUSPENDED); /* jump to vm_ws_xigrate(). this will update the vm location. */ surf_vm_workstation_migrate(ind_vm, ind_dst_pm); } -void SIMIX_pre_vm_migrate(smx_simcall_t simcall, smx_host_t ind_vm, smx_host_t ind_dst_pm) +/** + * \brief Encompassing simcall to prevent the removal of the src or the dst node at the end of a VM migration + * The simcall actually invokes the following calls: + * simcall_vm_set_affinity(vm, src_pm, 0); + * simcall_vm_migrate(vm, dst_pm); + * simcall_vm_resume(vm); + * + * It is called at the end of the migration_rx_fun function from msg/msg_vm.c + * + * \param vm VM to migrate + * \param src_pm Source physical host + * \param dst_pmt Destination physical host + */ +void SIMIX_vm_migratefrom_resumeto(smx_host_t vm, smx_host_t src_pm, smx_host_t dst_pm) { - SIMIX_vm_migrate(ind_vm, ind_dst_pm); -} + /* deinstall the current affinity setting for the CPU */ + SIMIX_vm_set_affinity(vm, src_pm, 0); + /* Update the vm location */ + SIMIX_vm_migrate(vm, dst_pm); + + /* Resume the VM */ + smx_process_t self = SIMIX_process_self(); + SIMIX_vm_resume(vm, self->simcall.issuer); +} /** * \brief Function to get the physical host of the given SIMIX VM host. @@ -152,12 +153,6 @@ void *SIMIX_vm_get_pm(smx_host_t ind_vm) return surf_vm_workstation_get_pm(ind_vm); } -void *SIMIX_pre_vm_get_pm(smx_simcall_t simcall, smx_host_t ind_vm) -{ - return SIMIX_vm_get_pm(ind_vm); -} - - /** * \brief Function to set the CPU bound of the given SIMIX VM host. * @@ -170,12 +165,6 @@ void SIMIX_vm_set_bound(smx_host_t ind_vm, double bound) surf_vm_workstation_set_bound(ind_vm, bound); } -void SIMIX_pre_vm_set_bound(smx_simcall_t simcall, smx_host_t ind_vm, double bound) -{ - SIMIX_vm_set_bound(ind_vm, bound); -} - - /** * \brief Function to set the CPU affinity of the given SIMIX VM host. * @@ -192,11 +181,6 @@ void SIMIX_vm_set_affinity(smx_host_t ind_vm, smx_host_t ind_pm, unsigned long m surf_vm_workstation_set_affinity(ind_vm, ind_pm, mask); } -void SIMIX_pre_vm_set_affinity(smx_simcall_t simcall, smx_host_t ind_vm, smx_host_t ind_pm, unsigned long mask) -{ - SIMIX_vm_set_affinity(ind_vm, ind_pm, mask); -} - /** * \brief Function to suspend a SIMIX VM host. This function stops the execution of the @@ -226,7 +210,7 @@ void SIMIX_vm_suspend(smx_host_t ind_vm, smx_process_t issuer) XBT_DEBUG("suspend all processes on the VM done done"); } -void SIMIX_pre_vm_suspend(smx_simcall_t simcall, smx_host_t ind_vm) +void simcall_HANDLER_vm_suspend(smx_simcall_t simcall, smx_host_t ind_vm) { if (simcall->issuer->smx_host == ind_vm) { XBT_ERROR("cannot suspend the VM where I run"); @@ -235,7 +219,7 @@ void SIMIX_pre_vm_suspend(smx_simcall_t simcall, smx_host_t ind_vm) SIMIX_vm_suspend(ind_vm, simcall->issuer); - XBT_DEBUG("SIMIX_pre_vm_suspend done"); + XBT_DEBUG("simcall_HANDLER_vm_suspend done"); } @@ -264,7 +248,7 @@ void SIMIX_vm_resume(smx_host_t ind_vm, smx_process_t issuer) } } -void SIMIX_pre_vm_resume(smx_simcall_t simcall, smx_host_t ind_vm) +void simcall_HANDLER_vm_resume(smx_simcall_t simcall, smx_host_t ind_vm) { SIMIX_vm_resume(ind_vm, simcall->issuer); } @@ -297,7 +281,7 @@ void SIMIX_vm_save(smx_host_t ind_vm, smx_process_t issuer) } } -void SIMIX_pre_vm_save(smx_simcall_t simcall, smx_host_t ind_vm) +void simcall_HANDLER_vm_save(smx_simcall_t simcall, smx_host_t ind_vm) { SIMIX_vm_save(ind_vm, simcall->issuer); } @@ -328,7 +312,7 @@ void SIMIX_vm_restore(smx_host_t ind_vm, smx_process_t issuer) } } -void SIMIX_pre_vm_restore(smx_simcall_t simcall, smx_host_t ind_vm) +void simcall_HANDLER_vm_restore(smx_simcall_t simcall, smx_host_t ind_vm) { SIMIX_vm_restore(ind_vm, simcall->issuer); } @@ -362,7 +346,7 @@ void SIMIX_vm_shutdown(smx_host_t ind_vm, smx_process_t issuer) (int)SURF_VM_STATE_CREATED); } -void SIMIX_pre_vm_shutdown(smx_simcall_t simcall, smx_host_t ind_vm) +void simcall_HANDLER_vm_shutdown(smx_simcall_t simcall, smx_host_t ind_vm) { SIMIX_vm_shutdown(ind_vm, simcall->issuer); } @@ -388,8 +372,3 @@ void SIMIX_vm_destroy(smx_host_t ind_vm) /* jump to vm_ws_destroy(). The surf level resource will be freed. */ surf_vm_workstation_destroy(ind_vm); } - -void SIMIX_pre_vm_destroy(smx_simcall_t simcall, smx_host_t ind_vm) -{ - SIMIX_vm_destroy(ind_vm); -}