Author: Remi Meier <remi.me...@inf.ethz.ch> Branch: c8-private-pages Changeset: r1517:f5c8d19deeb4 Date: 2015-01-12 14:27 +0100 http://bitbucket.org/pypy/stmgc/changeset/f5c8d19deeb4/
Log: fix compilation, test_basic passes (surprisingly) diff --git a/c8/stm/core.c b/c8/stm/core.c --- a/c8/stm/core.c +++ b/c8/stm/core.c @@ -154,8 +154,8 @@ the other segment */ uint64_t to_lock = (1UL << copy_from_segnum)| (1UL << my_segnum); acquire_modification_lock_set(to_lock); - pagecopy((char*)(get_virt_page_of(my_segnum, pagenum) * 4096UL), - (char*)(get_virt_page_of(copy_from_segnum, pagenum) * 4096UL)); + pagecopy(get_virtual_page(my_segnum, pagenum), + get_virtual_page(copy_from_segnum, pagenum)); /* if there were modifications in the page, revert them. */ copy_bk_objs_in_page_from(copy_from_segnum, pagenum, false); @@ -505,13 +505,10 @@ uintptr_t page; for (page = first_page; page <= end_page; page++) { - /* check if our page is private or we are the only shared-page holder */ - switch (get_page_status_in(my_segnum, page)) { - - case PAGE_PRIVATE: - continue; - - case PAGE_NO_ACCESS: + if (get_page_status_in(my_segnum, page) == PAGE_NO_ACCESS) { + /* should not happen right now, since we do not make other + segment's pages NO_ACCESS anymore (later maybe in GC safe points) */ + abort(); /* happens if there is a concurrent WB between us making the backup and acquiring the locks */ release_all_privatization_locks(); @@ -520,34 +517,10 @@ *dummy; /* force segfault */ goto retry; - - case PAGE_SHARED: - break; - - default: - assert(0); - } - /* make sure all the others are NO_ACCESS - choosing to make us PRIVATE is harder because then nobody must ever - update the shared page in stm_validate() except if it is the sole - reader of it. But then we don't actually know which revision the page is at. */ - /* XXX this is a temporary solution I suppose */ - int i; - for (i = 0; i < NB_SEGMENTS; i++) { - if (i == my_segnum) - continue; - - if (get_page_status_in(i, page) == PAGE_SHARED) { - /* xxx: unmap? */ - set_page_status_in(i, page, PAGE_NO_ACCESS); - mprotect((char*)(get_virt_page_of(i, page) * 4096UL), 4096UL, PROT_NONE); - dprintf(("NO_ACCESS in seg %d page %lu\n", i, page)); - } } } - /* all pages are either private or we were the first to write to a shared - page and therefore got it as our private one */ - + /* all pages are private to us and we hold the privatization_locks so + we are allowed to modify them */ /* phew, now add the obj to the write-set and register the backup copy. */ diff --git a/c8/stm/core.h b/c8/stm/core.h --- a/c8/stm/core.h +++ b/c8/stm/core.h @@ -151,7 +151,6 @@ #else char *stm_object_pages; #endif -static int stm_object_pages_fd; static stm_thread_local_t *stm_all_thread_locals = NULL; diff --git a/c8/stm/pages.c b/c8/stm/pages.c --- a/c8/stm/pages.c +++ b/c8/stm/pages.c @@ -28,6 +28,7 @@ set_page_status_in(segnum, pagenum, PAGE_ACCESSIBLE); } +__attribute__((unused)) static void page_mark_inaccessible(long segnum, uintptr_t pagenum) { assert(get_page_status_in(segnum, pagenum) == PAGE_ACCESSIBLE); diff --git a/c8/stm/setup.c b/c8/stm/setup.c --- a/c8/stm/setup.c +++ b/c8/stm/setup.c @@ -68,7 +68,6 @@ setup_mmap("initial stm_object_pages mmap()"); - assert(stm_object_pages_fd); assert(stm_object_pages); setup_protection_settings(); diff --git a/c8/stm/setup.h b/c8/stm/setup.h --- a/c8/stm/setup.h +++ b/c8/stm/setup.h @@ -1,5 +1,4 @@ static void setup_mmap(char *reason); -static void close_fd_mmap(int map_fd); static void setup_protection_settings(void); static pthread_t *_get_cpth(stm_thread_local_t *); _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit