X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/00ae4a50c96340ea9a1f097f4b26dc57b122a86e..03d36345c4247a907709b86c189a53f5f85bea88:/src/surf/workstation_interface.cpp diff --git a/src/surf/workstation_interface.cpp b/src/surf/workstation_interface.cpp index 70f949c12b..6b021c5b5f 100644 --- a/src/surf/workstation_interface.cpp +++ b/src/surf/workstation_interface.cpp @@ -4,6 +4,7 @@ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ +#include "simix/smx_private.h" #include "workstation_interface.hpp" #include "vm_workstation_interface.hpp" #include "cpu_cas01.hpp" @@ -25,6 +26,15 @@ surf_callback(void, WorkstationPtr) workstationDestructedCallbacks; surf_callback(void, WorkstationPtr, e_surf_resource_state_t, e_surf_resource_state_t) workstationStateChangedCallbacks; surf_callback(void, WorkstationActionPtr, e_surf_action_state_t, e_surf_action_state_t) workstationActionStateChangedCallbacks; +void workstation_parse_init(sg_platf_host_cbarg_t host) +{ + surf_workstation_model->createWorkstation(host->id); +} + +void workstation_add_traces(){ + surf_workstation_model->addTraces(); +} + /********* * Model * *********/ @@ -115,6 +125,7 @@ void Workstation::setState(e_surf_resource_state_t state){ e_surf_resource_state_t old = Resource::getState(); Resource::setState(state); surf_callback_emit(workstationStateChangedCallbacks, this, old, state); + p_cpu->setState(state); } int Workstation::getCore(){ @@ -197,7 +208,7 @@ xbt_dynar_t Workstation::getAttachedStorageList() if(xbt_lib_get_level(xbt_lib_get_elm_or_null(storage_lib, key), SURF_STORAGE_LEVEL) != NULL) { StoragePtr storage = static_cast(xbt_lib_get_level(xbt_lib_get_elm_or_null(storage_lib, key), SURF_STORAGE_LEVEL)); if(!strcmp((const char*)storage->p_attach,this->getName())){ - xbt_dynar_push_as(result, void *,(void *)static_cast(storage)->getName()); + xbt_dynar_push_as(result, void *, (void*)storage->getName()); } } } @@ -241,6 +252,7 @@ ActionPtr Workstation::open(const char* fullpath) { else xbt_die("Can't find mount point for '%s' on '%s'", fullpath, getName()); + XBT_DEBUG("OPEN %s on disk '%s'",path, st->getName()); ActionPtr action = st->open((const char*)mount_name, (const char*)path); free((char*)path); free((char*)mount_name); @@ -249,19 +261,19 @@ ActionPtr Workstation::open(const char* fullpath) { ActionPtr Workstation::close(surf_file_t fd) { StoragePtr st = findStorageOnMountList(fd->mount); - XBT_DEBUG("CLOSE on disk '%s'",st->getName()); + XBT_DEBUG("CLOSE %s on disk '%s'",fd->name, st->getName()); return st->close(fd); } ActionPtr Workstation::read(surf_file_t fd, sg_size_t size) { StoragePtr st = findStorageOnMountList(fd->mount); - XBT_DEBUG("READ on disk '%s'",st->getName()); + XBT_DEBUG("READ %s on disk '%s'",fd->name, st->getName()); return st->read(fd, size); } ActionPtr Workstation::write(surf_file_t fd, sg_size_t size) { StoragePtr st = findStorageOnMountList(fd->mount); - XBT_DEBUG("WRITE on disk '%s'",st->getName()); + XBT_DEBUG("WRITE %s on disk '%s'",fd->name, st->getName()); return st->write(fd, size); } @@ -278,7 +290,7 @@ int Workstation::unlink(surf_file_t fd) { st->getName()); return -1; } else { - XBT_DEBUG("UNLINK on disk '%s'",st->getName()); + XBT_DEBUG("UNLINK %s on disk '%s'",fd->name, st->getName()); st->m_usedSize -= fd->size; // Remove the file from storage @@ -315,7 +327,7 @@ sg_size_t Workstation::fileTell(surf_file_t fd){ return fd->current_position; } -int Workstation::fileSeek(surf_file_t fd, sg_size_t offset, int origin){ +int Workstation::fileSeek(surf_file_t fd, sg_offset_t offset, int origin){ switch (origin) { case SEEK_SET: @@ -343,7 +355,7 @@ int Workstation::fileMove(surf_file_t fd, const char* fullpath){ *new_psize = *psize; if (psize){// src file exists xbt_dict_remove(findStorageOnMountList(fd->mount)->p_content, fd->name); - char *path = (char *) xbt_malloc ((strlen(fullpath)-strlen(fd->mount)+1));; + char *path = (char *) xbt_malloc ((strlen(fullpath)-strlen(fd->mount)+1)); strncpy(path, fullpath+strlen(fd->mount), strlen(fullpath)-strlen(fd->mount)+1); xbt_dict_set(findStorageOnMountList(fd->mount)->p_content, path, @@ -364,7 +376,7 @@ int Workstation::fileMove(surf_file_t fd, const char* fullpath){ xbt_dynar_t Workstation::getVms() { - xbt_dynar_t dyn = xbt_dynar_new(sizeof(smx_host_t), NULL); + xbt_dynar_t dyn = xbt_dynar_new(sizeof(WorkstationVMPtr), NULL); /* iterate for all virtual machines */ for (WorkstationVMModel::vm_list_t::iterator iter = @@ -372,8 +384,8 @@ xbt_dynar_t Workstation::getVms() iter != WorkstationVMModel::ws_vms.end(); ++iter) { WorkstationVMPtr ws_vm = &*iter; - if (this == ws_vm-> p_subWs) - xbt_dynar_push(dyn, &ws_vm->p_subWs); + if (this == ws_vm->p_subWs) + xbt_dynar_push(dyn, &ws_vm); } return dyn;