X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/b1a2e45431d13cdf45ec8b1c91bf7d6ca8377c9d..2c8e75834bbb63acef15c560c3de978ab3cb6fbf:/src/simix/private.h diff --git a/src/simix/private.h b/src/simix/private.h index f8012e58c8..0a3e27ca68 100644 --- a/src/simix/private.h +++ b/src/simix/private.h @@ -1,7 +1,5 @@ -/* $Id$ */ - -/* Copyright (c) 2007 Arnaud Legrand, Bruno Donnassolo. - All rights reserved. */ +/* Copyright (c) 2007, 2008, 2009, 2010. The SimGrid Team. + * All rights reserved. */ /* 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. */ @@ -17,6 +15,7 @@ #include "xbt/config.h" #include "xbt/function_types.h" #include "xbt/ex_interface.h" +#include "instr/private.h" /******************************** Datatypes ***********************************/ @@ -96,36 +95,6 @@ void SIMIX_process_schedule(smx_process_t process); ex_ctx_t *SIMIX_process_get_exception(void); void SIMIX_process_exception_terminate(xbt_ex_t * e); -/*************************** Mutex and Conditional ****************************/ - -typedef struct s_smx_mutex { - - /* KEEP IT IN SYNC WITH src/xbt_sg_thread.c::struct s_xbt_mutex */ - xbt_swag_t sleeping; /* list of sleeping process */ - int refcount; - /* KEEP IT IN SYNC WITH src/xbt_sg_thread.c::struct s_xbt_mutex */ - -} s_smx_mutex_t; - -typedef struct s_smx_cond { - - /* KEEP IT IN SYNC WITH src/xbt_sg_thread.c::struct s_xbt_cond */ - xbt_swag_t sleeping; /* list of sleeping process */ - smx_mutex_t mutex; - xbt_fifo_t actions; /* list of actions */ - /* KEEP IT IN SYNC WITH src/xbt_sg_thread.c::struct s_xbt_cond */ - -} s_smx_cond_t; - -typedef struct s_smx_sem { - /* KEEP IT IN SYNC WITH src/xbt_sg_thread.c::struct s_xbt_sem */ - xbt_swag_t sleeping; /* list of sleeping process */ - int capacity; - xbt_fifo_t actions; /* list of actions */ - /* KEEP IT IN SYNC WITH src/xbt_sg_thread.c::struct s_xbt_sem */ - -} s_smx_sem_t; - /******************************* Networking ***********************************/ /** @brief Rendez-vous point datatype */ @@ -159,15 +128,17 @@ typedef struct s_smx_comm { void *dst_buff; size_t src_buff_size; size_t *dst_buff_size; + char copied; + void *data; /* User data associated to communication */ } s_smx_comm_t; void SIMIX_network_copy_data(smx_comm_t comm); smx_comm_t SIMIX_communication_new(smx_comm_type_t type); -static inline void SIMIX_communication_use(smx_comm_t comm); -static inline void SIMIX_communication_wait_for_completion(smx_comm_t comm, double timeout); -static inline void SIMIX_rdv_push(smx_rdv_t rdv, smx_comm_t comm); -static inline void SIMIX_rdv_remove(smx_rdv_t rdv, smx_comm_t comm); +static XBT_INLINE void SIMIX_communication_use(smx_comm_t comm); +static XBT_INLINE void SIMIX_communication_wait_for_completion(smx_comm_t comm, double timeout); +static XBT_INLINE void SIMIX_rdv_push(smx_rdv_t rdv, smx_comm_t comm); +static XBT_INLINE void SIMIX_rdv_remove(smx_rdv_t rdv, smx_comm_t comm); /********************************* Action *************************************/ @@ -183,6 +154,10 @@ typedef struct s_smx_action { int refcount; /**< @brief reference counter */ surf_action_t surf_action; /* SURF modeling of computation */ smx_host_t source; +#ifdef HAVE_TRACING + long long int counter; /* simix action unique identifier for instrumentation */ + char *category; /* simix action category for instrumentation */ +#endif } s_smx_action_t; /************************** Configuration support *****************************/ @@ -246,7 +221,6 @@ void SIMIX_ctx_thread_factory_init(smx_context_factory_t * factory); void SIMIX_ctx_sysv_factory_init(smx_context_factory_t * factory); void SIMIX_ctx_lua_factory_init(smx_context_factory_t * factory); -void SIMIX_ctx_lua_factory_set_state(void *state); void SIMIX_ctx_java_factory_init(smx_context_factory_t * factory); @@ -280,7 +254,7 @@ void SIMIX_ctx_java_factory_init(smx_context_factory_t * factory); * \param cleanup_func the function to call when the context stops * \param cleanup_arg the argument of the cleanup_func function */ -static inline smx_context_t SIMIX_context_new(xbt_main_func_t code, int argc, +static XBT_INLINE smx_context_t SIMIX_context_new(xbt_main_func_t code, int argc, char** argv, void_f_pvoid_t cleanup_func, void* cleanup_arg) { @@ -294,7 +268,7 @@ static inline smx_context_t SIMIX_context_new(xbt_main_func_t code, int argc, * \param context the context to destroy * Argument must be stopped first -- runs in maestro context */ -static inline void SIMIX_context_free(smx_context_t context) { +static XBT_INLINE void SIMIX_context_free(smx_context_t context) { (*(simix_global->context_factory->free)) (context); } @@ -302,7 +276,7 @@ static inline void SIMIX_context_free(smx_context_t context) { * \brief stops the execution of a context * \param context to stop */ -static inline void SIMIX_context_stop(smx_context_t context) { +static XBT_INLINE void SIMIX_context_stop(smx_context_t context) { (*(simix_global->context_factory->stop)) (context); } @@ -311,7 +285,7 @@ static inline void SIMIX_context_stop(smx_context_t context) { \param old_context the actual context from which is resuming \param new_context the context to resume */ -static inline void SIMIX_context_resume(smx_context_t new_context) +static XBT_INLINE void SIMIX_context_resume(smx_context_t new_context) { (*(simix_global->context_factory->resume)) (new_context); } @@ -321,7 +295,7 @@ static inline void SIMIX_context_resume(smx_context_t new_context) scheduled it \param context the context to be suspended (it must be the running one) */ -static inline void SIMIX_context_suspend(smx_context_t context) +static XBT_INLINE void SIMIX_context_suspend(smx_context_t context) { (*(simix_global->context_factory->suspend)) (context); }