*/
void MSG_vm_save(msg_vm_t vm)
{
- if (MSG_vm_is_migrating(vm))
- THROWF(vm_error, 0, "Cannot save VM '%s', which is migrating.", vm->cname());
-
- simcall_vm_save(vm);
+ smx_actor_t issuer=SIMIX_process_self();
+ simgrid::simix::kernelImmediate([vm,issuer]() {
+ static_cast<simgrid::s4u::VirtualMachine*>(vm)->pimpl_vm_->save(issuer);
+ });
if (TRACE_msg_vm_is_enabled()) {
container_t vm_container = PJ_container_get(vm->cname());
void MSG_vm_restore(msg_vm_t vm)
{
simgrid::simix::kernelImmediate([vm]() {
- simgrid::s4u::VirtualMachine* typedVm = static_cast<simgrid::s4u::VirtualMachine*>(vm);
-
- if (typedVm->pimpl_vm_->getState() != SURF_VM_STATE_SAVED)
- THROWF(vm_error, 0, "VM(%s) was not saved", vm->cname());
-
- XBT_DEBUG("restore VM(%s), where %d processes exist", vm->cname(), xbt_swag_size(sg_host_simix(vm)->process_list));
-
- /* jump to vm_ws_restore() */
- typedVm->pimpl_vm_->restore();
-
- smx_actor_t smx_process, smx_process_safe;
- xbt_swag_foreach_safe(smx_process, smx_process_safe, sg_host_simix(vm)->process_list) {
- XBT_DEBUG("resume %s", smx_process->name.c_str());
- SIMIX_process_resume(smx_process);
- }
+ static_cast<simgrid::s4u::VirtualMachine*>(vm)->pimpl_vm_->restore();
});
if (TRACE_msg_vm_is_enabled()) {
*/
msg_host_t MSG_vm_get_pm(msg_vm_t vm)
{
- return static_cast<simgrid::s4u::VirtualMachine*>(vm)->pimpl_vm_->getPm();
+ return static_cast<simgrid::s4u::VirtualMachine*>(vm)->pm();
}
/** @brief Set a CPU bound for a given VM.