return (e_smx_state_t) simcall_BODY_execution_wait(execution);
}
-/**
- * \ingroup simix_vm_management
- * \brief Create a VM on the given physical host.
- *
- * \param name VM name
- * \param dest Physical host on which to create the VM
- *
- * \return The host object of the VM
- */
-sg_host_t simcall_vm_create(const char* name, sg_host_t dest)
-{
- return simgrid::simix::kernelImmediate([&name, &dest] {
- sg_host_t host = new simgrid::s4u::VirtualMachine(name, dest);
- host->extension_set<simgrid::simix::Host>(new simgrid::simix::Host());
-
- return host;
- });
-}
-
/**
* \ingroup simix_vm_management
* \brief Start the given VM to the given physical host
simgrid::simix::kernelImmediate(std::bind(SIMIX_vm_start, vm));
}
-/**
- * \ingroup simix_vm_management
- * \brief Get the state of the given VM
- *
- * \param vm VM
- * \return The state of the VM
- */
-int simcall_vm_get_state(sg_host_t vm)
-{
- return simgrid::simix::kernelImmediate(std::bind(SIMIX_vm_get_state, vm));
-}
-
/**
* \ingroup simix_vm_management
* \brief Get the physical host on which the given VM runs.
[vm, bound]() { static_cast<simgrid::s4u::VirtualMachine*>(vm)->pimpl_vm_->setBound(bound); });
}
-/**
- * \ingroup simix_vm_management
- * \brief Migrate the given VM to the given physical host
- *
- * \param vm VM
- * \param host Destination physical host
- */
-void simcall_vm_migrate(sg_host_t vm, sg_host_t host)
-{
- simgrid::simix::kernelImmediate(std::bind(SIMIX_vm_migrate, vm, host));
-}
-
/**
* \ingroup simix_vm_management
* \brief Suspend the given VM
void simcall_vm_restore(sg_host_t vm)
{
simgrid::simix::kernelImmediate([vm]() {
- if (SIMIX_vm_get_state(vm) != SURF_VM_STATE_SAVED)
+ if (static_cast<simgrid::s4u::VirtualMachine*>(vm)->pimpl_vm_->getState() != SURF_VM_STATE_SAVED)
THROWF(vm_error, 0, "VM(%s) was not saved", vm->name().c_str());
XBT_DEBUG("restore VM(%s), where %d processes exist", vm->name().c_str(),
simcall_BODY_vm_shutdown(vm);
}
-/**
- * \ingroup simix_vm_management
- * \brief Destroy the given VM
- *
- * \param vm VM
- */
-void simcall_vm_destroy(sg_host_t vm)
-{
- simgrid::simix::kernelImmediate([vm]() {
- /* this code basically performs a similar thing like SIMIX_host_destroy() */
- XBT_DEBUG("destroy %s", vm->name().c_str());
-
- /* FIXME: this is really strange that everything fails if the next line is removed.
- * This is as if we shared these data with the PM, which definitely should not be the case...
- *
- * We need to test that suspending a VM does not suspends the processes running on its PM, for example.
- * Or we need to simplify this code enough to make it actually readable (but this sounds harder than testing)
- */
- vm->extension_set<simgrid::simix::Host>(nullptr);
-
- /* Don't free these things twice: they are the ones of my physical host */
- vm->pimpl_cpu = nullptr;
- vm->pimpl_netcard = nullptr;
-
- vm->destroy();
- });
-}
-
/**
* \ingroup simix_process_management
* \brief Kills a SIMIX process.