From 8a16d3b0a913a37d1346f472c1ccf727fb8fed15 Mon Sep 17 00:00:00 2001 From: Arnaud Giersch Date: Mon, 10 Feb 2020 16:08:38 +0100 Subject: [PATCH] Take simcalls {execution,io}_wait toward modernity. --- include/simgrid/simix.h | 22 ++++----- src/kernel/activity/ExecImpl.cpp | 5 --- src/kernel/activity/IoImpl.cpp | 5 --- src/s4u/s4u_Exec.cpp | 4 +- src/s4u/s4u_Io.cpp | 5 ++- src/simix/libsmx.cpp | 32 +++++++++++--- src/simix/popping_accessors.hpp | 76 -------------------------------- src/simix/popping_bodies.cpp | 14 ------ src/simix/popping_enum.h | 2 - src/simix/popping_generated.cpp | 10 ----- src/simix/simcalls.in | 3 -- 11 files changed, 42 insertions(+), 136 deletions(-) diff --git a/include/simgrid/simix.h b/include/simgrid/simix.h index a5914d568d..ac4b4fe107 100644 --- a/include/simgrid/simix.h +++ b/include/simgrid/simix.h @@ -114,7 +114,10 @@ XBT_PUBLIC void SIMIX_comm_copy_buffer_callback(simgrid::kernel::activity::CommI /******************************* Host simcalls ********************************/ #ifdef __cplusplus -XBT_PUBLIC e_smx_state_t simcall_execution_wait(simgrid::kernel::activity::ActivityImpl* execution, double timeout); +XBT_ATTRIB_DEPRECATED_v330("Please use s4u::Exec::wait_for()") XBT_PUBLIC e_smx_state_t + simcall_execution_wait(simgrid::kernel::activity::ActivityImpl* execution, double timeout); +XBT_ATTRIB_DEPRECATED_v330("Please use s4u::Exec::wait_for()") XBT_PUBLIC e_smx_state_t + simcall_execution_wait(const simgrid::kernel::activity::ActivityImplPtr& execution, double timeout); XBT_PUBLIC unsigned int simcall_execution_waitany_for(simgrid::kernel::activity::ExecImpl* execs[], size_t count, double timeout); XBT_ATTRIB_DEPRECATED_v330("Please use s4u::Exec::test()") XBT_PUBLIC @@ -122,11 +125,6 @@ XBT_ATTRIB_DEPRECATED_v330("Please use s4u::Exec::test()") XBT_PUBLIC XBT_ATTRIB_DEPRECATED_v330("Please use s4u::Exec::test()") XBT_PUBLIC bool simcall_execution_test(const simgrid::kernel::activity::ActivityImplPtr& execution); -XBT_ATTRIB_DEPRECATED_v330("Please use an ActivityImpl* for first parameter") inline e_smx_state_t - simcall_execution_wait(const simgrid::kernel::activity::ActivityImplPtr& execution, double timeout) -{ - return simcall_execution_wait(execution.get(), timeout); -} #endif /**************************** Process simcalls ********************************/ @@ -211,18 +209,14 @@ SG_END_DECL /***************************** Io **************************************/ #ifdef __cplusplus -XBT_PUBLIC e_smx_state_t simcall_io_wait(simgrid::kernel::activity::ActivityImpl* io, double timeout); +XBT_ATTRIB_DEPRECATED_v330("Please use s4u::Io::wait_for()") XBT_PUBLIC e_smx_state_t + simcall_io_wait(simgrid::kernel::activity::ActivityImpl* io, double timeout); +XBT_ATTRIB_DEPRECATED_v330("Please use s4u::Io::wait_for()") XBT_PUBLIC e_smx_state_t + simcall_io_wait(const simgrid::kernel::activity::ActivityImplPtr& io, double timeout); XBT_ATTRIB_DEPRECATED_v330("Please use s4u::Io::test()") XBT_PUBLIC bool simcall_io_test(simgrid::kernel::activity::ActivityImpl* io); XBT_ATTRIB_DEPRECATED_v330("Please use s4u::Io::test()") XBT_PUBLIC bool simcall_io_test(const simgrid::kernel::activity::ActivityImplPtr& io); - -XBT_ATTRIB_DEPRECATED_v330("Please use an ActivityImpl* for first parameter") inline e_smx_state_t - simcall_io_wait(const simgrid::kernel::activity::ActivityImplPtr& io, double timeout) -{ - return simcall_io_wait(io.get(), timeout); -} - #endif /************************** MC simcalls **********************************/ SG_BEGIN_DECL diff --git a/src/kernel/activity/ExecImpl.cpp b/src/kernel/activity/ExecImpl.cpp index 433d9bae39..47ab5d4ee2 100644 --- a/src/kernel/activity/ExecImpl.cpp +++ b/src/kernel/activity/ExecImpl.cpp @@ -17,11 +17,6 @@ XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(simix_process); -void simcall_HANDLER_execution_wait(smx_simcall_t simcall, simgrid::kernel::activity::ExecImpl* synchro, double timeout) -{ - synchro->wait_for(simcall->issuer_, timeout); -} - void simcall_HANDLER_execution_waitany_for(smx_simcall_t simcall, simgrid::kernel::activity::ExecImpl* execs[], size_t count, double timeout) { diff --git a/src/kernel/activity/IoImpl.cpp b/src/kernel/activity/IoImpl.cpp index 0a7cc64932..966cae13da 100644 --- a/src/kernel/activity/IoImpl.cpp +++ b/src/kernel/activity/IoImpl.cpp @@ -15,11 +15,6 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(simix_io, simix, "Logging specific to SIMIX (io)"); -void simcall_HANDLER_io_wait(smx_simcall_t simcall, simgrid::kernel::activity::IoImpl* synchro, double timeout) -{ - synchro->wait_for(simcall->issuer_, timeout); -} - namespace simgrid { namespace kernel { namespace activity { diff --git a/src/s4u/s4u_Exec.cpp b/src/s4u/s4u_Exec.cpp index eb3eb3f577..227ab302c3 100644 --- a/src/s4u/s4u_Exec.cpp +++ b/src/s4u/s4u_Exec.cpp @@ -29,7 +29,9 @@ Exec* Exec::wait_for(double timeout) { if (state_ == State::INITED) vetoable_start(); - simcall_execution_wait(get_impl(), timeout); + + kernel::actor::ActorImpl* issuer = Actor::self()->get_impl(); + kernel::actor::simcall_blocking([this, issuer, timeout] { this->get_impl()->wait_for(issuer, timeout); }); state_ = State::FINISHED; on_completion(*Actor::self(), *this); this->release_dependencies(); diff --git a/src/s4u/s4u_Io.cpp b/src/s4u/s4u_Io.cpp index 7de8c809d5..cc9794aff4 100644 --- a/src/s4u/s4u_Io.cpp +++ b/src/s4u/s4u_Io.cpp @@ -3,6 +3,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 "simgrid/s4u/Actor.hpp" #include "simgrid/s4u/Disk.hpp" #include "simgrid/s4u/Io.hpp" #include "simgrid/s4u/Storage.hpp" @@ -63,7 +64,9 @@ Io* Io::wait_for(double timeout) { if (state_ == State::INITED) vetoable_start(); - simcall_io_wait(get_impl(), timeout); + + kernel::actor::ActorImpl* issuer = Actor::self()->get_impl(); + kernel::actor::simcall_blocking([this, issuer, timeout] { this->get_impl()->wait_for(issuer, timeout); }); state_ = State::FINISHED; this->release_dependencies(); return this; diff --git a/src/simix/libsmx.cpp b/src/simix/libsmx.cpp index 4ea0501fb8..d0646d9b0c 100644 --- a/src/simix/libsmx.cpp +++ b/src/simix/libsmx.cpp @@ -29,10 +29,22 @@ * * @param execution The execution synchro */ -e_smx_state_t simcall_execution_wait(simgrid::kernel::activity::ActivityImpl* execution, double timeout) +e_smx_state_t simcall_execution_wait(simgrid::kernel::activity::ActivityImpl* execution, + double timeout) // XBT_ATTRIB_DEPRECATED_v330 { - return (e_smx_state_t)simcall_BODY_execution_wait(static_cast(execution), - timeout); + simgrid::kernel::actor::ActorImpl* issuer = simgrid::kernel::actor::ActorImpl::self(); + simgrid::kernel::actor::simcall_blocking( + [execution, issuer, timeout] { execution->wait_for(issuer, timeout); }); + return simgrid::kernel::activity::State::DONE; +} + +e_smx_state_t simcall_execution_wait(const simgrid::kernel::activity::ActivityImplPtr& execution, + double timeout) // XBT_ATTRIB_DEPRECATED_v330 +{ + simgrid::kernel::actor::ActorImpl* issuer = simgrid::kernel::actor::ActorImpl::self(); + simgrid::kernel::actor::simcall_blocking( + [execution, issuer, timeout] { execution->wait_for(issuer, timeout); }); + return simgrid::kernel::activity::State::DONE; } bool simcall_execution_test(simgrid::kernel::activity::ActivityImpl* execution) // XBT_ATTRIB_DEPRECATED_v330 @@ -311,9 +323,19 @@ int simcall_sem_acquire_timeout(smx_sem_t sem, double timeout) return simcall_BODY_sem_acquire_timeout(sem, timeout); } -e_smx_state_t simcall_io_wait(simgrid::kernel::activity::ActivityImpl* io, double timeout) +e_smx_state_t simcall_io_wait(simgrid::kernel::activity::ActivityImpl* io, double timeout) // XBT_ATTRIB_DEPRECATED_v330 { - return (e_smx_state_t)simcall_BODY_io_wait(static_cast(io), timeout); + simgrid::kernel::actor::ActorImpl* issuer = simgrid::kernel::actor::ActorImpl::self(); + simgrid::kernel::actor::simcall_blocking([io, issuer, timeout] { io->wait_for(issuer, timeout); }); + return simgrid::kernel::activity::State::DONE; +} + +e_smx_state_t simcall_io_wait(const simgrid::kernel::activity::ActivityImplPtr& io, + double timeout) // XBT_ATTRIB_DEPRECATED_v330 +{ + simgrid::kernel::actor::ActorImpl* issuer = simgrid::kernel::actor::ActorImpl::self(); + simgrid::kernel::actor::simcall_blocking([io, issuer, timeout] { io->wait_for(issuer, timeout); }); + return simgrid::kernel::activity::State::DONE; } bool simcall_io_test(simgrid::kernel::activity::ActivityImpl* io) // XBT_ATTRIB_DEPRECATED_v330 diff --git a/src/simix/popping_accessors.hpp b/src/simix/popping_accessors.hpp index 037525a638..4300d8810f 100644 --- a/src/simix/popping_accessors.hpp +++ b/src/simix/popping_accessors.hpp @@ -15,43 +15,6 @@ */ #include "src/simix/popping_private.hpp" -static inline simgrid::kernel::activity::ExecImpl* simcall_execution_wait__get__execution(smx_simcall_t simcall) -{ - return simgrid::simix::unmarshal(simcall->args_[0]); -} -static inline simgrid::kernel::activity::ExecImpl* simcall_execution_wait__getraw__execution(smx_simcall_t simcall) -{ - return simgrid::simix::unmarshal_raw(simcall->args_[0]); -} -static inline void simcall_execution_wait__set__execution(smx_simcall_t simcall, simgrid::kernel::activity::ExecImpl* arg) -{ - simgrid::simix::marshal(simcall->args_[0], arg); -} -static inline double simcall_execution_wait__get__timeout(smx_simcall_t simcall) -{ - return simgrid::simix::unmarshal(simcall->args_[1]); -} -static inline double simcall_execution_wait__getraw__timeout(smx_simcall_t simcall) -{ - return simgrid::simix::unmarshal_raw(simcall->args_[1]); -} -static inline void simcall_execution_wait__set__timeout(smx_simcall_t simcall, double arg) -{ - simgrid::simix::marshal(simcall->args_[1], arg); -} -static inline int simcall_execution_wait__get__result(smx_simcall_t simcall) -{ - return simgrid::simix::unmarshal(simcall->result_); -} -static inline int simcall_execution_wait__getraw__result(smx_simcall_t simcall) -{ - return simgrid::simix::unmarshal_raw(simcall->result_); -} -static inline void simcall_execution_wait__set__result(smx_simcall_t simcall, int result) -{ - simgrid::simix::marshal(simcall->result_, result); -} - static inline simgrid::kernel::activity::ExecImpl** simcall_execution_waitany_for__get__execs(smx_simcall_t simcall) { return simgrid::simix::unmarshal(simcall->args_[0]); @@ -896,43 +859,6 @@ static inline void simcall_sem_acquire_timeout__set__result(smx_simcall_t simcal simgrid::simix::marshal(simcall->result_, result); } -static inline simgrid::kernel::activity::IoImpl* simcall_io_wait__get__io(smx_simcall_t simcall) -{ - return simgrid::simix::unmarshal(simcall->args_[0]); -} -static inline simgrid::kernel::activity::IoImpl* simcall_io_wait__getraw__io(smx_simcall_t simcall) -{ - return simgrid::simix::unmarshal_raw(simcall->args_[0]); -} -static inline void simcall_io_wait__set__io(smx_simcall_t simcall, simgrid::kernel::activity::IoImpl* arg) -{ - simgrid::simix::marshal(simcall->args_[0], arg); -} -static inline double simcall_io_wait__get__timeout(smx_simcall_t simcall) -{ - return simgrid::simix::unmarshal(simcall->args_[1]); -} -static inline double simcall_io_wait__getraw__timeout(smx_simcall_t simcall) -{ - return simgrid::simix::unmarshal_raw(simcall->args_[1]); -} -static inline void simcall_io_wait__set__timeout(smx_simcall_t simcall, double arg) -{ - simgrid::simix::marshal(simcall->args_[1], arg); -} -static inline sg_size_t simcall_io_wait__get__result(smx_simcall_t simcall) -{ - return simgrid::simix::unmarshal(simcall->result_); -} -static inline sg_size_t simcall_io_wait__getraw__result(smx_simcall_t simcall) -{ - return simgrid::simix::unmarshal_raw(simcall->result_); -} -static inline void simcall_io_wait__set__result(smx_simcall_t simcall, sg_size_t result) -{ - simgrid::simix::marshal(simcall->result_, result); -} - static inline int simcall_mc_random__get__min(smx_simcall_t simcall) { return simgrid::simix::unmarshal(simcall->args_[0]); @@ -998,7 +924,6 @@ static inline void simcall_run_blocking__set__code(smx_simcall_t simcall, std::f /* The prototype of all simcall handlers, automatically generated for you */ -XBT_PRIVATE void simcall_HANDLER_execution_wait(smx_simcall_t simcall, simgrid::kernel::activity::ExecImpl* execution, double timeout); XBT_PRIVATE void simcall_HANDLER_execution_waitany_for(smx_simcall_t simcall, simgrid::kernel::activity::ExecImpl** execs, size_t count, double timeout); XBT_PRIVATE void simcall_HANDLER_comm_send(smx_simcall_t simcall, smx_actor_t sender, smx_mailbox_t mbox, double task_size, double rate, unsigned char* src_buff, size_t src_buff_size, simix_match_func_t match_fun, simix_copy_data_func_t copy_data_fun, void* data, double timeout); XBT_PRIVATE boost::intrusive_ptr simcall_HANDLER_comm_isend(smx_simcall_t simcall, smx_actor_t sender, smx_mailbox_t mbox, double task_size, double rate, unsigned char* src_buff, size_t src_buff_size, simix_match_func_t match_fun, simix_clean_func_t clean_fun, simix_copy_data_func_t copy_data_fun, void* data, bool detached); @@ -1015,5 +940,4 @@ XBT_PRIVATE void simcall_HANDLER_cond_wait(smx_simcall_t simcall, smx_cond_t con XBT_PRIVATE void simcall_HANDLER_cond_wait_timeout(smx_simcall_t simcall, smx_cond_t cond, smx_mutex_t mutex, double timeout); XBT_PRIVATE void simcall_HANDLER_sem_acquire(smx_simcall_t simcall, smx_sem_t sem); XBT_PRIVATE void simcall_HANDLER_sem_acquire_timeout(smx_simcall_t simcall, smx_sem_t sem, double timeout); -XBT_PRIVATE void simcall_HANDLER_io_wait(smx_simcall_t simcall, simgrid::kernel::activity::IoImpl* io, double timeout); XBT_PRIVATE int simcall_HANDLER_mc_random(smx_simcall_t simcall, int min, int max); diff --git a/src/simix/popping_bodies.cpp b/src/simix/popping_bodies.cpp index a9fbc7871e..4962cfa603 100644 --- a/src/simix/popping_bodies.cpp +++ b/src/simix/popping_bodies.cpp @@ -39,13 +39,6 @@ inline static R simcall(e_smx_simcall_t call, T const&... t) return simgrid::simix::unmarshal(self->simcall.result_); } -inline static int simcall_BODY_execution_wait(simgrid::kernel::activity::ExecImpl* execution, double timeout) -{ - if (0) /* Go to that function to follow the code flow through the simcall barrier */ - simcall_HANDLER_execution_wait(&SIMIX_process_self()->simcall, execution, timeout); - return simcall(SIMCALL_EXECUTION_WAIT, execution, timeout); -} - inline static int simcall_BODY_execution_waitany_for(simgrid::kernel::activity::ExecImpl** execs, size_t count, double timeout) { if (0) /* Go to that function to follow the code flow through the simcall barrier */ @@ -158,13 +151,6 @@ inline static int simcall_BODY_sem_acquire_timeout(smx_sem_t sem, double timeout return simcall(SIMCALL_SEM_ACQUIRE_TIMEOUT, sem, timeout); } -inline static sg_size_t simcall_BODY_io_wait(simgrid::kernel::activity::IoImpl* io, double timeout) -{ - if (0) /* Go to that function to follow the code flow through the simcall barrier */ - simcall_HANDLER_io_wait(&SIMIX_process_self()->simcall, io, timeout); - return simcall(SIMCALL_IO_WAIT, io, timeout); -} - inline static int simcall_BODY_mc_random(int min, int max) { if (0) /* Go to that function to follow the code flow through the simcall barrier */ diff --git a/src/simix/popping_enum.h b/src/simix/popping_enum.h index 3df694bacd..0d3b7a67fa 100644 --- a/src/simix/popping_enum.h +++ b/src/simix/popping_enum.h @@ -19,7 +19,6 @@ */ typedef enum { SIMCALL_NONE, - SIMCALL_EXECUTION_WAIT, SIMCALL_EXECUTION_WAITANY_FOR, SIMCALL_COMM_SEND, SIMCALL_COMM_ISEND, @@ -36,7 +35,6 @@ typedef enum { SIMCALL_COND_WAIT_TIMEOUT, SIMCALL_SEM_ACQUIRE, SIMCALL_SEM_ACQUIRE_TIMEOUT, - SIMCALL_IO_WAIT, SIMCALL_MC_RANDOM, SIMCALL_RUN_KERNEL, SIMCALL_RUN_BLOCKING, diff --git a/src/simix/popping_generated.cpp b/src/simix/popping_generated.cpp index 30a87b193b..51d3b67a39 100644 --- a/src/simix/popping_generated.cpp +++ b/src/simix/popping_generated.cpp @@ -26,7 +26,6 @@ XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(simix_popping); /** @brief Simcalls' names (generated from src/simix/simcalls.in) */ const char* simcall_names[] = { "SIMCALL_NONE", - "SIMCALL_EXECUTION_WAIT", "SIMCALL_EXECUTION_WAITANY_FOR", "SIMCALL_COMM_SEND", "SIMCALL_COMM_ISEND", @@ -43,7 +42,6 @@ const char* simcall_names[] = { "SIMCALL_COND_WAIT_TIMEOUT", "SIMCALL_SEM_ACQUIRE", "SIMCALL_SEM_ACQUIRE_TIMEOUT", - "SIMCALL_IO_WAIT", "SIMCALL_MC_RANDOM", "SIMCALL_RUN_KERNEL", "SIMCALL_RUN_BLOCKING", @@ -60,10 +58,6 @@ void simgrid::kernel::actor::ActorImpl::simcall_handle(int value) { if (context_->wannadie()) return; switch (simcall.call_) { - case SIMCALL_EXECUTION_WAIT: - simcall_HANDLER_execution_wait(&simcall, simgrid::simix::unmarshal(simcall.args_[0]), simgrid::simix::unmarshal(simcall.args_[1])); - break; - case SIMCALL_EXECUTION_WAITANY_FOR: simcall_HANDLER_execution_waitany_for(&simcall, simgrid::simix::unmarshal(simcall.args_[0]), simgrid::simix::unmarshal(simcall.args_[1]), simgrid::simix::unmarshal(simcall.args_[2])); break; @@ -132,10 +126,6 @@ void simgrid::kernel::actor::ActorImpl::simcall_handle(int value) { simcall_HANDLER_sem_acquire_timeout(&simcall, simgrid::simix::unmarshal(simcall.args_[0]), simgrid::simix::unmarshal(simcall.args_[1])); break; - case SIMCALL_IO_WAIT: - simcall_HANDLER_io_wait(&simcall, simgrid::simix::unmarshal(simcall.args_[0]), simgrid::simix::unmarshal(simcall.args_[1])); - break; - case SIMCALL_MC_RANDOM: simgrid::simix::marshal(simcall.result_, simcall_HANDLER_mc_random(&simcall, simgrid::simix::unmarshal(simcall.args_[0]), simgrid::simix::unmarshal(simcall.args_[1]))); simcall_answer(); diff --git a/src/simix/simcalls.in b/src/simix/simcalls.in index de365aaf05..2d919f3de4 100644 --- a/src/simix/simcalls.in +++ b/src/simix/simcalls.in @@ -35,7 +35,6 @@ # Last but not the least, you should declare the new simix call in # ./include/simgrid/simix.h (otherwise you will get a warning at compile time) -int execution_wait(simgrid::kernel::activity::ExecImpl* execution, double timeout) [[block]]; int execution_waitany_for(simgrid::kernel::activity::ExecImpl** execs, size_t count, double timeout) [[block]]; void comm_send(smx_actor_t sender, smx_mailbox_t mbox, double task_size, double rate, unsigned char* src_buff, size_t src_buff_size, simix_match_func_t match_fun, simix_copy_data_func_t copy_data_fun, void* data, double timeout) [[block]]; @@ -57,8 +56,6 @@ int cond_wait_timeout(smx_cond_t cond, smx_mutex_t mutex, double timeout) void sem_acquire(smx_sem_t sem) [[block]]; int sem_acquire_timeout(smx_sem_t sem, double timeout) [[block]]; -sg_size_t io_wait(simgrid::kernel::activity::IoImpl* io, double timeout) [[block]]; - int mc_random(int min, int max); void run_kernel(std::function const* code) [[nohandler]]; -- 2.20.1