[pypy-commit] stmgc c8-private-pages: WIP: start fixing compilation everywhere

Raemi noreply at buildbot.pypy.org
Mon Jan 12 16:45:29 CET 2015


Author: Remi Meier <remi.meier at inf.ethz.ch>
Branch: c8-private-pages
Changeset: r1516:21374c6583cf
Date: 2015-01-12 14:18 +0100
http://bitbucket.org/pypy/stmgc/changeset/21374c6583cf/

Log:	WIP: start fixing compilation everywhere

diff --git a/c8/stm/core.c b/c8/stm/core.c
--- a/c8/stm/core.c
+++ b/c8/stm/core.c
@@ -130,20 +130,12 @@
     assert(get_page_status_in(my_segnum, pagenum) == PAGE_NO_ACCESS);
 
     /* find who has the most recent revision of our page */
-    int shared_page_holder = -1;
-    int shared_ref_count = 0;
     int copy_from_segnum = -1;
     uint64_t most_recent_rev = 0;
     for (i = 0; i < NB_SEGMENTS; i++) {
         if (i == my_segnum)
             continue;
 
-        if (get_page_status_in(i, pagenum) == PAGE_SHARED) {
-            /* mostly for debugging now: */
-            shared_page_holder = i;
-            shared_ref_count++;
-        }
-
         struct stm_commit_log_entry_s *log_entry;
         log_entry = get_priv_segment(i)->last_commit_log_entry;
         if (get_page_status_in(i, pagenum) != PAGE_NO_ACCESS
@@ -152,17 +144,11 @@
             most_recent_rev = log_entry->rev_num;
         }
     }
-    OPT_ASSERT(shared_page_holder != -1);
     OPT_ASSERT(copy_from_segnum != -1 && copy_from_segnum != my_segnum);
 
-    /* XXX: for now, we don't try to get the single shared page. We simply
-       regard it as private for its holder. */
-    /* this assert should be true for now... */
-    assert(shared_ref_count == 1);
-
     /* make our page private */
-    page_privatize_in(my_segnum, pagenum);
-    assert(get_page_status_in(my_segnum, pagenum) == PAGE_PRIVATE);
+    page_mark_accessible(my_segnum, pagenum);
+    assert(get_page_status_in(my_segnum, pagenum) == PAGE_ACCESSIBLE);
 
     /* before copying anything, acquire modification locks from our and
        the other segment */
@@ -279,7 +265,7 @@
     }
 
     bool needs_abort = false;
-    
+
     while(1) {
         /* retry IF: */
         /* if at the time of "HERE" (s.b.) there happen to be
diff --git a/c8/stm/core.h b/c8/stm/core.h
--- a/c8/stm/core.h
+++ b/c8/stm/core.h
@@ -148,10 +148,8 @@
 
 #ifndef STM_TESTS
 static char *stm_object_pages;
-static char *stm_file_pages;
 #else
 char *stm_object_pages;
-char *stm_file_pages;
 #endif
 static int stm_object_pages_fd;
 static stm_thread_local_t *stm_all_thread_locals = NULL;
diff --git a/c8/stm/gcpage.c b/c8/stm/gcpage.c
--- a/c8/stm/gcpage.c
+++ b/c8/stm/gcpage.c
@@ -5,8 +5,8 @@
 
 static void setup_gcpage(void)
 {
-    //uninitialized_page_start = stm_file_pages;
-    //uninitialized_page_stop  = stm_file_pages + NB_SHARED_PAGES * 4096UL;
+    uninitialized_page_start = stm_object_pages + END_NURSERY_PAGE * 4096UL;
+    uninitialized_page_stop  = uninitialized_page_start + NB_SHARED_PAGES * 4096UL;
 }
 
 static void teardown_gcpage(void)
@@ -15,15 +15,17 @@
 
 static void setup_N_pages(char *pages_addr, uint64_t num)
 {
-    /* initialize to |S|N|N|N| */
+    /* initialize to |N|P|N|N| */
     long i;
     for (i = 0; i < NB_SEGMENTS; i++) {
         acquire_privatization_lock(i);
     }
-    pages_initialize_shared_for(
-        STM_SEGMENT->segment_num,
-        get_page_of_file_page((pages_addr - stm_file_pages) / 4096UL),
-        num);
+
+    uintptr_t p = (pages_addr - stm_object_pages) / 4096UL;
+    while (num-->0) {
+        page_mark_accessible(STM_SEGMENT->segment_num, p + num);
+    }
+
     for (i = NB_SEGMENTS-1; i >= 0; i--) {
         release_privatization_lock(i);
     }
@@ -58,7 +60,7 @@
              (uintptr_t)addr / 4096UL + END_NURSERY_PAGE));
 
     spinlock_release(lock_growth_large);
-    return (stm_char*)(addr - stm_file_pages + END_NURSERY_PAGE * 4096UL);
+    return (stm_char*)(addr - stm_object_pages);
 }
 
 object_t *_stm_allocate_old(ssize_t size_rounded_up)
diff --git a/c8/stm/gcpage.h b/c8/stm/gcpage.h
--- a/c8/stm/gcpage.h
+++ b/c8/stm/gcpage.h
@@ -2,8 +2,8 @@
 /* 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 char *uninitialized_page_start;   /* within segment 0 */
+static char *uninitialized_page_stop;
 
 static void setup_gcpage(void);
 static void teardown_gcpage(void);
diff --git a/c8/stm/nursery.c b/c8/stm/nursery.c
--- a/c8/stm/nursery.c
+++ b/c8/stm/nursery.c
@@ -91,13 +91,14 @@
         realobj = REAL_ADDRESS(STM_SEGMENT->segment_base, obj);
         size = stmcb_size_rounded_up((struct object_s *)realobj);
 
-        if (size > GC_LAST_SMALL_SIZE) {
+        if (true /*size > GC_LAST_SMALL_SIZE*/) {
             /* case 1: object is not small enough.
                Ask gcpage.c for an allocation via largemalloc. */
             nobj = (object_t *)allocate_outside_nursery_large(size);
         }
         else {
             /* case "small enough" */
+            abort();
             nobj = (object_t *)allocate_outside_nursery_small(size);
         }
 
diff --git a/c8/stm/setup.c b/c8/stm/setup.c
--- a/c8/stm/setup.c
+++ b/c8/stm/setup.c
@@ -70,7 +70,6 @@
 
     assert(stm_object_pages_fd);
     assert(stm_object_pages);
-    assert(stm_file_pages);
 
     setup_protection_settings();
     setup_signal_handler();
diff --git a/c8/stm/smallmalloc.c b/c8/stm/smallmalloc.c
--- a/c8/stm/smallmalloc.c
+++ b/c8/stm/smallmalloc.c
@@ -21,7 +21,7 @@
 
 static fpsz_t *get_fpsz(char *smallpage)
 {
-    uintptr_t pagenum = (((char *)smallpage) - stm_file_pages) / 4096;
+    uintptr_t pagenum = (((char *)smallpage) - END_NURSERY_PAGE * 4096UL - stm_object_pages) / 4096;
     assert(PAGE_SMSIZE_START <= pagenum && pagenum < PAGE_SMSIZE_END);
     return &full_pages_object_size[pagenum - PAGE_SMSIZE_START];
 }
@@ -60,7 +60,7 @@
             goto out_of_memory;
 
         uninitialized_page_stop -= decrease_by;
-        first_small_uniform_loc = uninitialized_page_stop - stm_file_pages + END_NURSERY_PAGE * 4096UL;
+        first_small_uniform_loc = uninitialized_page_stop - stm_object_pages;
 
         /* XXX: */
         /* char *base = stm_object_pages + END_NURSERY_PAGE * 4096UL; */
@@ -163,11 +163,11 @@
 
     if (UNLIKELY(result == NULL))
         return (stm_char*)
-            (_allocate_small_slowpath(size) - stm_file_pages + END_NURSERY_PAGE * 4096UL);
+            (_allocate_small_slowpath(size) - stm_object_pages);
 
     *fl = result->next;
     return (stm_char*)
-        ((char *)result - stm_file_pages + END_NURSERY_PAGE * 4096UL);
+        ((char *)result - stm_object_pages);
 }
 
 object_t *_stm_allocate_old_small(ssize_t size_rounded_up)
@@ -193,8 +193,7 @@
 #ifdef STM_TESTS
     if (_stm_smallmalloc_keep != NULL) {
         // test wants a TLPREFIXd address
-        return _stm_smallmalloc_keep(
-            p - stm_file_pages + (char*)(END_NURSERY_PAGE * 4096UL));
+        return _stm_smallmalloc_keep((char*)(p - stm_object_pages));
     }
 #endif
     abort();


More information about the pypy-commit mailing list