Author: Remi Meier <remi.me...@inf.ethz.ch> Branch: c8-small-uniform Changeset: r1385:5a540496172b Date: 2014-09-16 13:10 +0200 http://bitbucket.org/pypy/stmgc/changeset/5a540496172b/
Log: pass test_smallmalloc.py again diff --git a/c8/stm/core.h b/c8/stm/core.h --- a/c8/stm/core.h +++ b/c8/stm/core.h @@ -69,6 +69,9 @@ #ifndef NDEBUG pthread_t running_pthread; #endif + + /* This is for smallmalloc.c */ + struct small_malloc_data_s small_malloc_data; }; enum /* safe_point */ { @@ -95,8 +98,10 @@ }; static struct stm_commit_log_entry_s commit_log_root = {NULL, -1}; - -static char *stm_object_pages; +#ifndef STM_TESTS +static +#endif + char *stm_object_pages; static int stm_object_pages_fd; static stm_thread_local_t *stm_all_thread_locals = NULL; diff --git a/c8/stm/gcpage.h b/c8/stm/gcpage.h --- a/c8/stm/gcpage.h +++ b/c8/stm/gcpage.h @@ -1,8 +1,11 @@ +/* Granularity when grabbing more unused pages: take 50 at a time */ +#define GCPAGE_NUM_PAGES 50 static char *uninitialized_page_start; /* within segment 0 */ static char *uninitialized_page_stop; static void setup_gcpage(void); static void teardown_gcpage(void); +static void setup_N_pages(char *pages_addr, uint64_t num); static char *allocate_outside_nursery_large(uint64_t size); diff --git a/c8/stm/setup.c b/c8/stm/setup.c --- a/c8/stm/setup.c +++ b/c8/stm/setup.c @@ -145,6 +145,7 @@ teardown_sync(); teardown_gcpage(); + teardown_smallmalloc(); teardown_pages(); } diff --git a/c8/stm/smallmalloc.c b/c8/stm/smallmalloc.c --- a/c8/stm/smallmalloc.c +++ b/c8/stm/smallmalloc.c @@ -61,9 +61,10 @@ uninitialized_page_stop -= decrease_by; first_small_uniform_loc = uninitialized_page_stop - stm_object_pages; - char *base = stm_object_pages + END_NURSERY_PAGE * 4096UL; - if (!_stm_largemalloc_resize_arena(uninitialized_page_stop - base)) - goto out_of_memory; + /* XXX: */ + /* char *base = stm_object_pages + END_NURSERY_PAGE * 4096UL; */ + /* if (!_stm_largemalloc_resize_arena(uninitialized_page_stop - base)) */ + /* goto out_of_memory; */ setup_N_pages(uninitialized_page_stop, GCPAGE_NUM_PAGES); @@ -267,7 +268,7 @@ small_page_lists[szword] = NULL; /* process the pages that the various segments are busy filling */ - for (i = 1; i <= NB_SEGMENTS; i++) { + for (i = 0; i < NB_SEGMENTS; i++) { struct stm_priv_segment_info_s *pseg = get_priv_segment(i); struct small_free_loc_s **fl = &pseg->small_malloc_data.loc_free[szword]; diff --git a/c8/stmgc.c b/c8/stmgc.c --- a/c8/stmgc.c +++ b/c8/stmgc.c @@ -2,6 +2,7 @@ #include "stmgc.h" #include "stm/atomic.h" #include "stm/list.h" +#include "stm/smallmalloc.h" #include "stm/core.h" #include "stm/pagecopy.h" #include "stm/pages.h" @@ -15,6 +16,7 @@ #include "stm/misc.c" #include "stm/list.c" +#include "stm/smallmalloc.c" #include "stm/pagecopy.c" #include "stm/pages.c" #include "stm/prebuilt.c" diff --git a/c8/stmgc.h b/c8/stmgc.h --- a/c8/stmgc.h +++ b/c8/stmgc.h @@ -80,6 +80,11 @@ void _stm_test_switch_segment(int segnum); void _push_obj_to_other_segments(object_t *obj); +char *stm_object_pages; +object_t *_stm_allocate_old_small(ssize_t size_rounded_up); +bool (*_stm_smallmalloc_keep)(char *data); +void _stm_smallmalloc_sweep(void); + void _stm_start_safe_point(void); void _stm_stop_safe_point(void); diff --git a/c8/test/support.py b/c8/test/support.py --- a/c8/test/support.py +++ b/c8/test/support.py @@ -33,6 +33,8 @@ ...; } stm_thread_local_t; +char *stm_object_pages; + void stm_read(object_t *obj); /*void stm_write(object_t *obj); use _checked_stm_write() instead */ object_t *stm_allocate(ssize_t size_rounded_up); @@ -100,6 +102,10 @@ ssize_t stmcb_size_rounded_up(struct object_s *obj); +object_t *_stm_allocate_old_small(ssize_t size_rounded_up); +bool (*_stm_smallmalloc_keep)(char *data); +void _stm_smallmalloc_sweep(void); + """) @@ -303,6 +309,12 @@ lib._set_type_id(o, tid) return o +def stm_allocate_old_small(size): + o = lib._stm_allocate_old_small(size) + tid = 42 + size + lib._set_type_id(o, tid) + return o + def stm_allocate(size): o = lib.stm_allocate(size) tid = 42 + size _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit