X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/347b2193ad200d91018ca5be4894a4679fe09e79..c125fad9c08bded28a8ceae7e5820218462dce9a:/src/simix/smx_context_raw.c diff --git a/src/simix/smx_context_raw.c b/src/simix/smx_context_raw.c index 239d0a75ff..e22ac1f2be 100644 --- a/src/simix/smx_context_raw.c +++ b/src/simix/smx_context_raw.c @@ -14,12 +14,6 @@ # include #endif /* HAVE_VALGRIND_VALGRIND_H */ -#ifdef _XBT_WIN32 -#include "win32_ucontext.h" -#else -#include "ucontext.h" -#endif - typedef char * raw_stack_t; typedef void (*rawctx_entry_point_t)(void *); @@ -142,6 +136,10 @@ __asm__ ( " retq\n" ); #else + +/* If you implement raw contextes for other processors, don't forget to + update the definition of HAVE_RAWCTX in buildtools/Cmake/AddTests.cmake */ + raw_stack_t raw_makecontext(char* malloced_stack, int stack_size, rawctx_entry_point_t entry_point, void* arg) { THROW_UNIMPLEMENTED; @@ -159,8 +157,6 @@ XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(simix_context); static xbt_parmap_t parmap; #endif -static smx_context_factory_t raw_factory; - #ifdef TIME_BENCH #include "xbt/xbt_os_time.h" #define NUM_THREADS 4 @@ -244,7 +240,7 @@ static void smx_ctx_raw_free(smx_context_t context) static void smx_ctx_raw_suspend(smx_context_t context) { - smx_current_context = (smx_context_t)maestro_raw_context; + SIMIX_context_set_current((smx_context_t) maestro_raw_context); raw_swapcontext( &((smx_ctx_raw_t) context)->stack_top, ((smx_ctx_raw_t) context)->old_stack_top); @@ -266,7 +262,7 @@ static void smx_ctx_raw_wrapper(smx_ctx_raw_t context) static void smx_ctx_raw_resume(smx_process_t process) { smx_ctx_raw_t context = (smx_ctx_raw_t)process->context; - smx_current_context = (smx_context_t)context; + SIMIX_context_set_current((smx_context_t) context); raw_swapcontext( &((smx_ctx_raw_t) context)->old_stack_top, ((smx_ctx_raw_t) context)->stack_top); @@ -318,8 +314,6 @@ static void smx_ctx_raw_runall_serial(xbt_dynar_t processes) XBT_VERB("Time SSR thread %u = %lf (max %lf)", cursor, time_thread_ssr[cursor], tmax); time_wasted_ssr += tmax - time_thread_ssr[cursor]; } - - xbt_dynar_reset(processes); } void smx_ctx_raw_new_sr(void); @@ -351,7 +345,6 @@ static void smx_ctx_raw_runall_serial(xbt_dynar_t processes) XBT_DEBUG("Schedule item %u of %lu",cursor,xbt_dynar_length(processes)); smx_ctx_raw_resume(process); } - xbt_dynar_reset(processes); } #endif @@ -360,29 +353,15 @@ static void smx_ctx_raw_runall_parallel(xbt_dynar_t processes) #ifdef CONTEXT_THREADS xbt_parmap_apply(parmap, (void_f_pvoid_t)smx_ctx_raw_resume, processes); #endif - xbt_dynar_reset(processes); -} - -static smx_context_t smx_ctx_raw_self_parallel(void) -{ - return smx_current_context; -} - -static int smx_ctx_raw_get_thread_id(){ - return (int)(unsigned long)xbt_os_thread_get_extra_data(); } static void smx_ctx_raw_runall(xbt_dynar_t processes) { if (xbt_dynar_length(processes) >= SIMIX_context_get_parallel_threshold()) { XBT_DEBUG("Runall // %lu", xbt_dynar_length(processes)); - raw_factory->self = smx_ctx_raw_self_parallel; - raw_factory->get_thread_id = smx_ctx_raw_get_thread_id; smx_ctx_raw_runall_parallel(processes); } else { XBT_DEBUG("Runall serial %lu", xbt_dynar_length(processes)); - raw_factory->self = smx_ctx_base_self; - raw_factory->get_thread_id = smx_ctx_base_get_thread_id; smx_ctx_raw_runall_serial(processes); } } @@ -410,18 +389,13 @@ void SIMIX_ctx_raw_factory_init(smx_context_factory_t *factory) } else { /* always parallel */ - (*factory)->self = smx_ctx_raw_self_parallel; - (*factory)->get_thread_id = smx_ctx_raw_get_thread_id; (*factory)->runall = smx_ctx_raw_runall_parallel; } } else { /* always serial */ - (*factory)->self = smx_ctx_base_self; - (*factory)->get_thread_id = smx_ctx_base_get_thread_id; (*factory)->runall = smx_ctx_raw_runall_serial; } - raw_factory = *factory; #ifdef TIME_BENCH timer = xbt_os_timer_new(); #endif