Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
put the HostImpl as s4u::Host->pimpl instead of as an extension
[simgrid.git] / src / simix / smx_vm.cpp
index ba05d17..fec4850 100644 (file)
@@ -8,34 +8,13 @@
 #include "src/surf/virtual_machine.hpp"
 #include "src/surf/HostImpl.hpp"
 
-XBT_LOG_NEW_DEFAULT_SUBCATEGORY(simix_vm, simix, "Logging specific to SIMIX (vms)");
-
-/* **** create a VM **** */
-
-/**
- * @brief Internal function to create a SIMIX host.
- * @param name name of the host to create
- * @param data some user data (may be nullptr)
- */
-sg_host_t SIMIX_vm_create(const char *name, sg_host_t ind_phys_host)
-{
-  /* Create surf associated resource */
-  surf_vm_model_create(name, ind_phys_host);
-  sg_host_t host = sg_host_by_name(name);
-  SIMIX_host_create(host);
-
-  /* We will be able to register the VM to its physical host, so that we can promptly
-   * retrieve the list VMs on the physical host. */
-
-  return host;
-}
-
+XBT_LOG_NEW_DEFAULT_SUBCATEGORY(simix_vm, simix, "Logging specific to SIMIX Virtual Machines");
 
 /* works for VMs and PMs */
 static long host_get_ramsize(sg_host_t vm, int *overcommit)
 {
   s_vm_params_t params;
-  vm->extension<simgrid::surf::HostImpl>()->getParams(&params);
+  vm->pimpl_->getParams(&params);
 
   if (overcommit)
     *overcommit = params.overcommit;
@@ -63,7 +42,7 @@ static int __can_be_started(sg_host_t vm)
   }
 
   long total_ramsize_of_vms = 0;
-  xbt_dynar_t dyn_vms = pm->extension<simgrid::surf::HostImpl>()->getVms();
+  xbt_dynar_t dyn_vms = pm->pimpl_->getVms();
   {
     unsigned int cursor = 0;
     sg_host_t another_vm;
@@ -84,21 +63,21 @@ static int __can_be_started(sg_host_t vm)
   return 1;
 }
 
-void SIMIX_vm_start(sg_host_t ind_vm)
+void SIMIX_vm_start(sg_host_t vm)
 {
-  if (__can_be_started(ind_vm))
+  if (__can_be_started(vm))
     static_cast<simgrid::surf::VirtualMachine*>(
-      ind_vm->extension<simgrid::surf::HostImpl>()
+      vm->pimpl_
     )->setState(SURF_VM_STATE_RUNNING);
   else
-    THROWF(vm_error, 0, "The VM %s cannot be started", sg_host_get_name(ind_vm));
+    THROWF(vm_error, 0, "The VM %s cannot be started", vm->name().c_str());
 }
 
 
-e_surf_vm_state_t SIMIX_vm_get_state(sg_host_t ind_vm)
+e_surf_vm_state_t SIMIX_vm_get_state(sg_host_t vm)
 {
   return static_cast<simgrid::surf::VirtualMachine*>(
-    ind_vm->extension<simgrid::surf::HostImpl>()
+    vm->pimpl_
   )->getState();
 }
 
@@ -107,13 +86,13 @@ e_surf_vm_state_t SIMIX_vm_get_state(sg_host_t ind_vm)
  *
  * @param host the vm host to migrate (a sg_host_t)
  */
-void SIMIX_vm_migrate(sg_host_t ind_vm, sg_host_t ind_dst_pm)
+void SIMIX_vm_migrate(sg_host_t vm, sg_host_t dst_pm)
 {
   /* precopy migration makes the VM temporally paused */
-  xbt_assert(SIMIX_vm_get_state(ind_vm) == SURF_VM_STATE_SUSPENDED);
+  xbt_assert(SIMIX_vm_get_state(vm) == SURF_VM_STATE_SUSPENDED);
 
   /* jump to vm_ws_xigrate(). this will update the vm location. */
-  surf_vm_migrate(ind_vm, ind_dst_pm);
+  surf_vm_migrate(vm, dst_pm);
 }
 
 /**
@@ -135,7 +114,7 @@ void SIMIX_vm_migratefrom_resumeto(sg_host_t vm, sg_host_t src_pm, sg_host_t dst
  
   /* Resume the VM */
   smx_actor_t self = SIMIX_process_self(); 
-  SIMIX_vm_resume(vm, self->simcall.issuer);
+  SIMIX_vm_resume(vm, self);
 } 
 
 /**
@@ -310,7 +289,7 @@ void SIMIX_vm_shutdown(sg_host_t vm, smx_actor_t issuer)
 
   /* FIXME: we may have to do something at the surf layer, e.g., vcpu action */
   static_cast<simgrid::surf::VirtualMachine*>(
-    vm->extension<simgrid::surf::HostImpl>()
+    vm->pimpl_
   )->setState(SURF_VM_STATE_CREATED);
 }
 
@@ -340,4 +319,6 @@ void SIMIX_vm_destroy(sg_host_t vm)
   /* Don't free these things twice: they are the ones of my physical host */
   vm->pimpl_cpu = nullptr;
   vm->pimpl_netcard = nullptr;
+
+  vm->destroy();
 }