[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