X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/94974c282c6e6d096238716853bb053330170d76..50078f18c7f2fcbe42db89adb2005e9f7d38c301:/src/simix/smx_smurf_private.h diff --git a/src/simix/smx_smurf_private.h b/src/simix/smx_smurf_private.h index b8431a410b..0a914619b9 100644 --- a/src/simix/smx_smurf_private.h +++ b/src/simix/smx_smurf_private.h @@ -7,120 +7,125 @@ #ifndef _SIMIX_SMURF_PRIVATE_H #define _SIMIX_SMURF_PRIVATE_H -/********************************* Requests ***********************************/ - -/* we want to build the e_smx_t enumeration and the table of the corresponding - * strings automatically, using macros */ - -#define SIMIX_REQ_LIST1 \ -SIMIX_REQ_ENUM_ELEMENT(REQ_NO_REQ),\ -SIMIX_REQ_ENUM_ELEMENT(REQ_HOST_GET_BY_NAME),\ -SIMIX_REQ_ENUM_ELEMENT(REQ_HOST_GET_NAME),\ -SIMIX_REQ_ENUM_ELEMENT(REQ_HOST_GET_PROPERTIES),\ -SIMIX_REQ_ENUM_ELEMENT(REQ_HOST_GET_SPEED),\ -SIMIX_REQ_ENUM_ELEMENT(REQ_HOST_GET_AVAILABLE_SPEED),\ -SIMIX_REQ_ENUM_ELEMENT(REQ_HOST_GET_STATE),\ -SIMIX_REQ_ENUM_ELEMENT(REQ_HOST_GET_DATA),\ -SIMIX_REQ_ENUM_ELEMENT(REQ_HOST_SET_DATA),\ -SIMIX_REQ_ENUM_ELEMENT(REQ_HOST_EXECUTE),\ -SIMIX_REQ_ENUM_ELEMENT(REQ_HOST_PARALLEL_EXECUTE),\ -SIMIX_REQ_ENUM_ELEMENT(REQ_HOST_EXECUTION_DESTROY),\ -SIMIX_REQ_ENUM_ELEMENT(REQ_HOST_EXECUTION_CANCEL),\ -SIMIX_REQ_ENUM_ELEMENT(REQ_HOST_EXECUTION_GET_REMAINS),\ -SIMIX_REQ_ENUM_ELEMENT(REQ_HOST_EXECUTION_GET_STATE),\ -SIMIX_REQ_ENUM_ELEMENT(REQ_HOST_EXECUTION_SET_PRIORITY),\ -SIMIX_REQ_ENUM_ELEMENT(REQ_HOST_EXECUTION_WAIT),\ -SIMIX_REQ_ENUM_ELEMENT(REQ_PROCESS_CREATE),\ -SIMIX_REQ_ENUM_ELEMENT(REQ_PROCESS_KILL),\ -SIMIX_REQ_ENUM_ELEMENT(REQ_PROCESS_KILLALL),\ -SIMIX_REQ_ENUM_ELEMENT(REQ_PROCESS_CLEANUP),\ -SIMIX_REQ_ENUM_ELEMENT(REQ_PROCESS_CHANGE_HOST),\ -SIMIX_REQ_ENUM_ELEMENT(REQ_PROCESS_SUSPEND),\ -SIMIX_REQ_ENUM_ELEMENT(REQ_PROCESS_RESUME),\ -SIMIX_REQ_ENUM_ELEMENT(REQ_PROCESS_COUNT),\ -SIMIX_REQ_ENUM_ELEMENT(REQ_PROCESS_GET_DATA),\ -SIMIX_REQ_ENUM_ELEMENT(REQ_PROCESS_SET_DATA),\ -SIMIX_REQ_ENUM_ELEMENT(REQ_PROCESS_GET_HOST),\ -SIMIX_REQ_ENUM_ELEMENT(REQ_PROCESS_GET_NAME),\ -SIMIX_REQ_ENUM_ELEMENT(REQ_PROCESS_IS_SUSPENDED),\ -SIMIX_REQ_ENUM_ELEMENT(REQ_PROCESS_GET_PROPERTIES),\ -SIMIX_REQ_ENUM_ELEMENT(REQ_PROCESS_SLEEP),\ -SIMIX_REQ_ENUM_ELEMENT(REQ_RDV_CREATE),\ -SIMIX_REQ_ENUM_ELEMENT(REQ_RDV_DESTROY),\ -SIMIX_REQ_ENUM_ELEMENT(REQ_RDV_GEY_BY_NAME),\ -SIMIX_REQ_ENUM_ELEMENT(REQ_RDV_COMM_COUNT_BY_HOST),\ -SIMIX_REQ_ENUM_ELEMENT(REQ_RDV_GET_HEAD),\ -SIMIX_REQ_ENUM_ELEMENT(REQ_COMM_SEND),\ -SIMIX_REQ_ENUM_ELEMENT(REQ_COMM_ISEND),\ -SIMIX_REQ_ENUM_ELEMENT(REQ_COMM_RECV),\ -SIMIX_REQ_ENUM_ELEMENT(REQ_COMM_IRECV),\ -SIMIX_REQ_ENUM_ELEMENT(REQ_COMM_DESTROY),\ -SIMIX_REQ_ENUM_ELEMENT(REQ_COMM_CANCEL),\ -SIMIX_REQ_ENUM_ELEMENT(REQ_COMM_WAITANY),\ -SIMIX_REQ_ENUM_ELEMENT(REQ_COMM_WAIT),\ -SIMIX_REQ_ENUM_ELEMENT(REQ_COMM_TEST),\ -SIMIX_REQ_ENUM_ELEMENT(REQ_COMM_TESTANY),\ -SIMIX_REQ_ENUM_ELEMENT(REQ_COMM_GET_REMAINS),\ -SIMIX_REQ_ENUM_ELEMENT(REQ_COMM_GET_STATE),\ -SIMIX_REQ_ENUM_ELEMENT(REQ_COMM_GET_SRC_DATA),\ -SIMIX_REQ_ENUM_ELEMENT(REQ_COMM_GET_DST_DATA),\ -SIMIX_REQ_ENUM_ELEMENT(REQ_COMM_GET_SRC_PROC),\ -SIMIX_REQ_ENUM_ELEMENT(REQ_COMM_GET_DST_PROC),\ -SIMIX_REQ_ENUM_ELEMENT(REQ_MUTEX_INIT),\ -SIMIX_REQ_ENUM_ELEMENT(REQ_MUTEX_DESTROY),\ -SIMIX_REQ_ENUM_ELEMENT(REQ_MUTEX_LOCK),\ -SIMIX_REQ_ENUM_ELEMENT(REQ_MUTEX_TRYLOCK),\ -SIMIX_REQ_ENUM_ELEMENT(REQ_MUTEX_UNLOCK),\ -SIMIX_REQ_ENUM_ELEMENT(REQ_COND_INIT),\ -SIMIX_REQ_ENUM_ELEMENT(REQ_COND_DESTROY),\ -SIMIX_REQ_ENUM_ELEMENT(REQ_COND_SIGNAL),\ -SIMIX_REQ_ENUM_ELEMENT(REQ_COND_WAIT),\ -SIMIX_REQ_ENUM_ELEMENT(REQ_COND_WAIT_TIMEOUT),\ -SIMIX_REQ_ENUM_ELEMENT(REQ_COND_BROADCAST),\ -SIMIX_REQ_ENUM_ELEMENT(REQ_SEM_INIT),\ -SIMIX_REQ_ENUM_ELEMENT(REQ_SEM_DESTROY),\ -SIMIX_REQ_ENUM_ELEMENT(REQ_SEM_RELEASE),\ -SIMIX_REQ_ENUM_ELEMENT(REQ_SEM_WOULD_BLOCK),\ -SIMIX_REQ_ENUM_ELEMENT(REQ_SEM_ACQUIRE),\ -SIMIX_REQ_ENUM_ELEMENT(REQ_SEM_ACQUIRE_TIMEOUT),\ -SIMIX_REQ_ENUM_ELEMENT(REQ_SEM_GET_CAPACITY),\ -SIMIX_REQ_ENUM_ELEMENT(REQ_FILE_READ) - -/* REQ_COMM_IS_LATENCY_BOUNDED and REQ_SET_CATEGORY make things complicated +/********************************* Simcalls *********************************/ + +/* we want to build the e_smx_simcall_t enumeration and the table of the + * corresponding strings automatically, using macros */ + +#define SIMCALL_LIST1 \ +SIMCALL_ENUM_ELEMENT(SIMCALL_NONE),\ +SIMCALL_ENUM_ELEMENT(SIMCALL_HOST_GET_BY_NAME),\ +SIMCALL_ENUM_ELEMENT(SIMCALL_HOST_GET_NAME),\ +SIMCALL_ENUM_ELEMENT(SIMCALL_HOST_GET_PROPERTIES),\ +SIMCALL_ENUM_ELEMENT(SIMCALL_HOST_GET_SPEED),\ +SIMCALL_ENUM_ELEMENT(SIMCALL_HOST_GET_AVAILABLE_SPEED),\ +SIMCALL_ENUM_ELEMENT(SIMCALL_HOST_GET_STATE),\ +SIMCALL_ENUM_ELEMENT(SIMCALL_HOST_GET_DATA),\ +SIMCALL_ENUM_ELEMENT(SIMCALL_HOST_SET_DATA),\ +SIMCALL_ENUM_ELEMENT(SIMCALL_HOST_EXECUTE),\ +SIMCALL_ENUM_ELEMENT(SIMCALL_HOST_PARALLEL_EXECUTE),\ +SIMCALL_ENUM_ELEMENT(SIMCALL_HOST_EXECUTION_DESTROY),\ +SIMCALL_ENUM_ELEMENT(SIMCALL_HOST_EXECUTION_CANCEL),\ +SIMCALL_ENUM_ELEMENT(SIMCALL_HOST_EXECUTION_GET_REMAINS),\ +SIMCALL_ENUM_ELEMENT(SIMCALL_HOST_EXECUTION_GET_STATE),\ +SIMCALL_ENUM_ELEMENT(SIMCALL_HOST_EXECUTION_SET_PRIORITY),\ +SIMCALL_ENUM_ELEMENT(SIMCALL_HOST_EXECUTION_WAIT),\ +SIMCALL_ENUM_ELEMENT(SIMCALL_PROCESS_CREATE),\ +SIMCALL_ENUM_ELEMENT(SIMCALL_PROCESS_KILL),\ +SIMCALL_ENUM_ELEMENT(SIMCALL_PROCESS_KILLALL),\ +SIMCALL_ENUM_ELEMENT(SIMCALL_PROCESS_CLEANUP),\ +SIMCALL_ENUM_ELEMENT(SIMCALL_PROCESS_CHANGE_HOST),\ +SIMCALL_ENUM_ELEMENT(SIMCALL_PROCESS_SUSPEND),\ +SIMCALL_ENUM_ELEMENT(SIMCALL_PROCESS_RESUME),\ +SIMCALL_ENUM_ELEMENT(SIMCALL_PROCESS_COUNT),\ +SIMCALL_ENUM_ELEMENT(SIMCALL_PROCESS_GET_DATA),\ +SIMCALL_ENUM_ELEMENT(SIMCALL_PROCESS_SET_DATA),\ +SIMCALL_ENUM_ELEMENT(SIMCALL_PROCESS_GET_HOST),\ +SIMCALL_ENUM_ELEMENT(SIMCALL_PROCESS_GET_NAME),\ +SIMCALL_ENUM_ELEMENT(SIMCALL_PROCESS_IS_SUSPENDED),\ +SIMCALL_ENUM_ELEMENT(SIMCALL_PROCESS_GET_PROPERTIES),\ +SIMCALL_ENUM_ELEMENT(SIMCALL_PROCESS_SLEEP),\ +SIMCALL_ENUM_ELEMENT(SIMCALL_RDV_CREATE),\ +SIMCALL_ENUM_ELEMENT(SIMCALL_RDV_DESTROY),\ +SIMCALL_ENUM_ELEMENT(SIMCALL_RDV_GEY_BY_NAME),\ +SIMCALL_ENUM_ELEMENT(SIMCALL_RDV_COMM_COUNT_BY_HOST),\ +SIMCALL_ENUM_ELEMENT(SIMCALL_RDV_GET_HEAD),\ +SIMCALL_ENUM_ELEMENT(SIMCALL_COMM_SEND),\ +SIMCALL_ENUM_ELEMENT(SIMCALL_COMM_ISEND),\ +SIMCALL_ENUM_ELEMENT(SIMCALL_COMM_RECV),\ +SIMCALL_ENUM_ELEMENT(SIMCALL_COMM_IRECV),\ +SIMCALL_ENUM_ELEMENT(SIMCALL_COMM_DESTROY),\ +SIMCALL_ENUM_ELEMENT(SIMCALL_COMM_CANCEL),\ +SIMCALL_ENUM_ELEMENT(SIMCALL_COMM_WAITANY),\ +SIMCALL_ENUM_ELEMENT(SIMCALL_COMM_WAIT),\ +SIMCALL_ENUM_ELEMENT(SIMCALL_COMM_TEST),\ +SIMCALL_ENUM_ELEMENT(SIMCALL_COMM_TESTANY),\ +SIMCALL_ENUM_ELEMENT(SIMCALL_COMM_GET_REMAINS),\ +SIMCALL_ENUM_ELEMENT(SIMCALL_COMM_GET_STATE),\ +SIMCALL_ENUM_ELEMENT(SIMCALL_COMM_GET_SRC_DATA),\ +SIMCALL_ENUM_ELEMENT(SIMCALL_COMM_GET_DST_DATA),\ +SIMCALL_ENUM_ELEMENT(SIMCALL_COMM_GET_SRC_PROC),\ +SIMCALL_ENUM_ELEMENT(SIMCALL_COMM_GET_DST_PROC),\ +SIMCALL_ENUM_ELEMENT(SIMCALL_MUTEX_INIT),\ +SIMCALL_ENUM_ELEMENT(SIMCALL_MUTEX_DESTROY),\ +SIMCALL_ENUM_ELEMENT(SIMCALL_MUTEX_LOCK),\ +SIMCALL_ENUM_ELEMENT(SIMCALL_MUTEX_TRYLOCK),\ +SIMCALL_ENUM_ELEMENT(SIMCALL_MUTEX_UNLOCK),\ +SIMCALL_ENUM_ELEMENT(SIMCALL_COND_INIT),\ +SIMCALL_ENUM_ELEMENT(SIMCALL_COND_DESTROY),\ +SIMCALL_ENUM_ELEMENT(SIMCALL_COND_SIGNAL),\ +SIMCALL_ENUM_ELEMENT(SIMCALL_COND_WAIT),\ +SIMCALL_ENUM_ELEMENT(SIMCALL_COND_WAIT_TIMEOUT),\ +SIMCALL_ENUM_ELEMENT(SIMCALL_COND_BROADCAST),\ +SIMCALL_ENUM_ELEMENT(SIMCALL_SEM_INIT),\ +SIMCALL_ENUM_ELEMENT(SIMCALL_SEM_DESTROY),\ +SIMCALL_ENUM_ELEMENT(SIMCALL_SEM_RELEASE),\ +SIMCALL_ENUM_ELEMENT(SIMCALL_SEM_WOULD_BLOCK),\ +SIMCALL_ENUM_ELEMENT(SIMCALL_SEM_ACQUIRE),\ +SIMCALL_ENUM_ELEMENT(SIMCALL_SEM_ACQUIRE_TIMEOUT),\ +SIMCALL_ENUM_ELEMENT(SIMCALL_SEM_GET_CAPACITY),\ +SIMCALL_ENUM_ELEMENT(SIMCALL_FILE_READ),\ +SIMCALL_ENUM_ELEMENT(SIMCALL_FILE_WRITE),\ +SIMCALL_ENUM_ELEMENT(SIMCALL_FILE_OPEN),\ +SIMCALL_ENUM_ELEMENT(SIMCALL_FILE_CLOSE),\ +SIMCALL_ENUM_ELEMENT(SIMCALL_FILE_STAT) + + +/* SIMCALL_COMM_IS_LATENCY_BOUNDED and SIMCALL_SET_CATEGORY make things complicated * because they are not always present */ #ifdef HAVE_LATENCY_BOUND_TRACKING -#define SIMIX_REQ_LIST2 \ -,SIMIX_REQ_ENUM_ELEMENT(REQ_COMM_IS_LATENCY_BOUNDED) +#define SIMCALL_LIST2 \ +,SIMCALL_ENUM_ELEMENT(SIMCALL_COMM_IS_LATENCY_BOUNDED) #else -#define SIMIX_REQ_LIST2 +#define SIMCALL_LIST2 #endif #ifdef HAVE_TRACING -#define SIMIX_REQ_LIST3 \ -,SIMIX_REQ_ENUM_ELEMENT(REQ_SET_CATEGORY) +#define SIMCALL_LIST3 \ +,SIMCALL_ENUM_ELEMENT(SIMCALL_SET_CATEGORY) #else -#define SIMIX_REQ_LIST3 +#define SIMCALL_LIST3 #endif -/* SIMIX_REQ_LIST is the final macro to use */ -#define SIMIX_REQ_LIST SIMIX_REQ_LIST1 SIMIX_REQ_LIST2 SIMIX_REQ_LIST3 +/* SIMCALL_LIST is the final macro to use */ +#define SIMCALL_LIST SIMCALL_LIST1 SIMCALL_LIST2 SIMCALL_LIST3 /* you can redefine the following macro differently to generate something else * with the list of enumeration values (e.g. a table of strings or a table of function pointers) */ -#define SIMIX_REQ_ENUM_ELEMENT(x) x +#define SIMCALL_ENUM_ELEMENT(x) x /** - * \brief All possible SIMIX requests. + * \brief All possible simcalls. */ typedef enum { -SIMIX_REQ_LIST -} e_smx_req_t; +SIMCALL_LIST +} e_smx_simcall_t; /** - * \brief Represents a SIMIX request. + * \brief Represents a simcall to the kernel. */ -typedef struct s_smx_req { - e_smx_req_t call; +typedef struct s_smx_simcall { + e_smx_simcall_t call; smx_process_t issuer; union { @@ -503,18 +508,50 @@ typedef struct s_smx_req { } sem_get_capacity; struct { - char* name;; + void *ptr; + size_t size; + size_t nmemb; + smx_file_t stream; + size_t result; } file_read; + + struct { + const void *ptr; + size_t size; + size_t nmemb; + smx_file_t stream; + size_t result; + } file_write; + + struct { + const char* path; + const char* mode; + smx_file_t result; + } file_open; + + struct { + smx_file_t fp; + int result; + } file_close; + + struct { + int fd; + //Next should be struct stat* buf + void* buf; + int result; + } file_stat; + }; -} s_smx_req_t, *smx_req_t; +} s_smx_simcall_t, *smx_simcall_t; /******************************** General *************************************/ -void SIMIX_request_push(smx_process_t self); -void SIMIX_request_answer(smx_req_t); -void SIMIX_request_pre(smx_req_t, int); -void SIMIX_request_post(smx_action_t); -XBT_INLINE smx_req_t SIMIX_req_mine(void); +void SIMIX_simcall_push(smx_process_t self); +void SIMIX_simcall_answer(smx_simcall_t); +void SIMIX_simcall_pre(smx_simcall_t, int); +void SIMIX_simcall_post(smx_action_t); +smx_simcall_t SIMIX_simcall_mine(void); +const char *SIMIX_simcall_name(e_smx_simcall_t kind); #endif