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

Reply via email to