From 64ed4fb578487d070460031eff5adad184cc7e34 Mon Sep 17 00:00:00 2001 From: Kevin Tew Date: Wed, 5 May 2010 07:22:23 -0600 Subject: [PATCH] [Places] make jit code allocation place local --- src/racket/include/schthread.h | 4 ++++ src/racket/src/env.c | 1 - src/racket/src/salloc.c | 29 ++--------------------------- src/racket/src/schpriv.h | 1 - 4 files changed, 6 insertions(+), 29 deletions(-) diff --git a/src/racket/include/schthread.h b/src/racket/include/schthread.h index 43bb7b84f0..a16b62ab94 100644 --- a/src/racket/include/schthread.h +++ b/src/racket/include/schthread.h @@ -284,6 +284,8 @@ typedef struct Thread_Local_Variables { struct Scheme_Bucket_Table *place_local_modpath_table_; struct Scheme_Hash_Table *opened_libs_; struct mzrt_mutex *jit_lock_; + struct free_list_entry *free_list_; + int free_list_bucket_count_; /*KPLAKE1*/ } Thread_Local_Variables; @@ -570,6 +572,8 @@ XFORM_GC_VARIABLE_STACK_THROUGH_THREAD_LOCAL; #define place_local_modpath_table XOA (scheme_get_thread_local_variables()->place_local_modpath_table_) #define opened_libs XOA (scheme_get_thread_local_variables()->opened_libs_) #define jit_lock XOA (scheme_get_thread_local_variables()->jit_lock_) +#define free_list XOA (scheme_get_thread_local_variables()->free_list_) +#define free_list_bucket_count XOA (scheme_get_thread_local_variables()->free_list_bucket_count_) /*KPLAKE2*/ /* **************************************** */ diff --git a/src/racket/src/env.c b/src/racket/src/env.c index 247e0641c1..d5b0447c84 100644 --- a/src/racket/src/env.c +++ b/src/racket/src/env.c @@ -355,7 +355,6 @@ Scheme_Env *scheme_engine_instance_init() { #ifndef DONT_USE_FOREIGN scheme_init_foreign_globals(); #endif - scheme_init_salloc(); make_kernel_env(); #if defined(MZ_PRECISE_GC) && defined(MZ_USE_PLACES) diff --git a/src/racket/src/salloc.c b/src/racket/src/salloc.c index 4cca5d4978..0229d0ea2b 100644 --- a/src/racket/src/salloc.c +++ b/src/racket/src/salloc.c @@ -100,18 +100,8 @@ struct free_list_entry { int count; /* number of items in `elems' */ }; -SHARED_OK static struct free_list_entry *free_list; -SHARED_OK static int free_list_bucket_count; -#ifdef MZ_USE_PLACES -SHARED_OK static mzrt_mutex *free_list_mutex; -#endif - - -void scheme_init_salloc() { -#ifdef MZ_USE_PLACES - mzrt_mutex_create(&free_list_mutex); -#endif -} +THREAD_LOCAL_DECL(static struct free_list_entry *free_list;) +THREAD_LOCAL_DECL(static int free_list_bucket_count;) void scheme_set_stack_base(void *base, int no_auto_statics) { @@ -919,10 +909,6 @@ void *scheme_malloc_code(long size) long size2, bucket, sz, page_size; void *p, *pg, *prev; -# ifdef MZ_USE_PLACES - mzrt_mutex_lock(free_list_mutex); -# endif - if (size < CODE_HEADER_SIZE) { /* ensure CODE_HEADER_SIZE alignment and room for free-list pointers */ @@ -986,10 +972,6 @@ void *scheme_malloc_code(long size) LOG_CODE_MALLOC(0, printf("allocated %ld (->%ld / %ld)\n", size, size2, bucket)); } -# ifdef MZ_USE_PLACES - mzrt_mutex_unlock(free_list_mutex); -# endif - return p; #else return malloc(size); /* good luck! */ @@ -1003,10 +985,6 @@ void scheme_free_code(void *p) int per_page, n; void *prev; -# ifdef MZ_USE_PLACES - mzrt_mutex_lock(free_list_mutex); -# endif - page_size = get_page_size(); size = *(long *)CODE_PAGE_OF(p); @@ -1079,9 +1057,6 @@ void scheme_free_code(void *p) free_page(CODE_PAGE_OF(p), page_size); } } -# ifdef MZ_USE_PLACES - mzrt_mutex_unlock(free_list_mutex); -# endif #else free(p); diff --git a/src/racket/src/schpriv.h b/src/racket/src/schpriv.h index bfd09ee531..58e854d915 100644 --- a/src/racket/src/schpriv.h +++ b/src/racket/src/schpriv.h @@ -233,7 +233,6 @@ void scheme_init_dynamic_extension(Scheme_Env *env); #ifndef NO_REGEXP_UTILS extern void scheme_regexp_initialize(Scheme_Env *env); #endif -void scheme_init_salloc(void); void scheme_init_memtrace(Scheme_Env *env); void scheme_init_paramz(Scheme_Env *env); void scheme_init_parameterization();