[pypy-commit] pypy stmgc-c7: import stmgc/859b241ec058
arigo
noreply at buildbot.pypy.org
Wed Apr 9 08:57:16 CEST 2014
Author: Armin Rigo <arigo at tunes.org>
Branch: stmgc-c7
Changeset: r70495:b71c564ec8ea
Date: 2014-04-09 08:56 +0200
http://bitbucket.org/pypy/pypy/changeset/b71c564ec8ea/
Log: import stmgc/859b241ec058
diff --git a/rpython/translator/stm/src_stm/revision b/rpython/translator/stm/src_stm/revision
--- a/rpython/translator/stm/src_stm/revision
+++ b/rpython/translator/stm/src_stm/revision
@@ -1,1 +1,1 @@
-cfd37feb0f23+
+859b241ec058
diff --git a/rpython/translator/stm/src_stm/stm/core.h b/rpython/translator/stm/src_stm/stm/core.h
--- a/rpython/translator/stm/src_stm/stm/core.h
+++ b/rpython/translator/stm/src_stm/stm/core.h
@@ -36,8 +36,6 @@
#define WRITELOCK_START ((END_NURSERY_PAGE * 4096UL) >> 4)
#define WRITELOCK_END READMARKER_END
-#define SHADOW_STACK_SIZE 1000
-
enum /* stm_flags */ {
/* This flag is set on non-nursery objects. It forces stm_write()
to call _stm_write_slowpath().
diff --git a/rpython/translator/stm/src_stm/stm/nursery.c b/rpython/translator/stm/src_stm/stm/nursery.c
--- a/rpython/translator/stm/src_stm/stm/nursery.c
+++ b/rpython/translator/stm/src_stm/stm/nursery.c
@@ -242,8 +242,6 @@
mutex_pages_lock();
locked = true;
}
- char *realobj = REAL_ADDRESS(pseg->pub.segment_base, item->addr);
- ssize_t size = stmcb_size_rounded_up((struct object_s *)realobj);
_stm_large_free(stm_object_pages + item->addr);
} TREE_LOOP_END;
diff --git a/rpython/translator/stm/src_stm/stm/pages.c b/rpython/translator/stm/src_stm/stm/pages.c
--- a/rpython/translator/stm/src_stm/stm/pages.c
+++ b/rpython/translator/stm/src_stm/stm/pages.c
@@ -96,6 +96,17 @@
(void *)((addr - stm_object_pages) % (4096UL * NB_PAGES)),
(long)pgoff / NB_PAGES,
(void *)((pgoff % NB_PAGES) * 4096UL)));
+ assert(size % 4096 == 0);
+ assert(size <= TOTAL_MEMORY);
+ assert(((uintptr_t)addr) % 4096 == 0);
+ assert(addr >= stm_object_pages);
+ assert(addr <= stm_object_pages + TOTAL_MEMORY - size);
+ assert(pgoff >= 0);
+ assert(pgoff <= (TOTAL_MEMORY - size) / 4096UL);
+
+ /* assert remappings follow the rule that page N in one segment
+ can only be remapped to page N in another segment */
+ assert(((addr - stm_object_pages) / 4096UL - pgoff) % NB_PAGES == 0);
int res = remap_file_pages(addr, size, 0, pgoff, 0);
if (UNLIKELY(res < 0))
diff --git a/rpython/translator/stm/src_stm/stm/setup.c b/rpython/translator/stm/src_stm/stm/setup.c
--- a/rpython/translator/stm/src_stm/stm/setup.c
+++ b/rpython/translator/stm/src_stm/stm/setup.c
@@ -135,7 +135,7 @@
static void _init_shadow_stack(stm_thread_local_t *tl)
{
struct stm_shadowentry_s *s = (struct stm_shadowentry_s *)
- malloc(SHADOW_STACK_SIZE * sizeof(struct stm_shadowentry_s));
+ malloc(STM_SHADOW_STACK_DEPTH * sizeof(struct stm_shadowentry_s));
assert(s);
tl->shadowstack = s;
tl->shadowstack_base = s;
diff --git a/rpython/translator/stm/src_stm/stmgc.h b/rpython/translator/stm/src_stm/stmgc.h
--- a/rpython/translator/stm/src_stm/stmgc.h
+++ b/rpython/translator/stm/src_stm/stmgc.h
@@ -259,6 +259,10 @@
void stm_setup(void);
void stm_teardown(void);
+/* The size of each shadow stack, in number of entries.
+ Must be big enough to accomodate all STM_PUSH_ROOTs! */
+#define STM_SHADOW_STACK_DEPTH 163840
+
/* Push and pop roots from/to the shadow stack. Only allowed inside
transaction. */
#define STM_PUSH_ROOT(tl, p) ((tl).shadowstack++->ss = (object_t *)(p))
More information about the pypy-commit
mailing list