Author: Armin Rigo <[email protected]>
Branch: c7-refactor
Changeset: r718:3b6d316ef539
Date: 2014-02-10 16:38 +0100
http://bitbucket.org/pypy/stmgc/changeset/3b6d316ef539/
Log: Rename "region" -> "segment".
diff --git a/c7/stm/core.h b/c7/stm/core.h
--- a/c7/stm/core.h
+++ b/c7/stm/core.h
@@ -7,7 +7,7 @@
#define NB_PAGES (1500*256) // 1500MB
-#define NB_REGIONS 2
+#define NB_SEGMENTS 2
#define MAP_PAGES_FLAGS (MAP_SHARED | MAP_ANONYMOUS | MAP_NORESERVE)
#define LARGE_OBJECT_WORDS 36
#define NB_NURSERY_PAGES 1024 // 4MB
@@ -15,7 +15,7 @@
#define NURSERY_SECTION_SIZE (24*4096)
-#define TOTAL_MEMORY (NB_PAGES * 4096UL * NB_REGIONS)
+#define TOTAL_MEMORY (NB_PAGES * 4096UL * NB_SEGMENTS)
#define READMARKER_END ((NB_PAGES * 4096UL) >> 4)
#define FIRST_OBJECT_PAGE ((READMARKER_END + 4095) / 4096UL)
#define FIRST_NURSERY_PAGE FIRST_OBJECT_PAGE
@@ -42,30 +42,32 @@
};
-#define STM_PREGION ((stm_priv_region_info_t *)STM_REGION)
+#define STM_PSEGMENT ((stm_priv_segment_info_t *)STM_SEGMENT)
-typedef TLPREFIX struct stm_priv_region_info_s stm_priv_region_info_t;
+typedef TLPREFIX struct stm_priv_segment_info_s stm_priv_segment_info_t;
-struct stm_priv_region_info_s {
- struct stm_region_info_s pub;
+struct stm_priv_segment_info_s {
+ struct stm_segment_info_s pub;
};
static char *stm_object_pages;
static stm_thread_local_t *stm_thread_locals = NULL;
-#define REAL_ADDRESS(region_base, src) ((region_base) + (uintptr_t)(src))
+#define REAL_ADDRESS(segment_base, src) ((segment_base) + (uintptr_t)(src))
-static inline char *get_region_base(long region_num) {
- return stm_object_pages + region_num * (NB_PAGES * 4096UL);
+static inline char *get_segment_base(long segment_num) {
+ return stm_object_pages + segment_num * (NB_PAGES * 4096UL);
}
-static inline struct stm_region_info_s *get_region(long region_num) {
- return (struct stm_region_info_s *)REAL_ADDRESS(
- get_region_base(region_num), STM_PREGION);
+static inline
+struct stm_segment_info_s *get_segment(long segment_num) {
+ return (struct stm_segment_info_s *)REAL_ADDRESS(
+ get_segment_base(segment_num), STM_PSEGMENT);
}
-static inline struct stm_priv_region_info_s *get_priv_region(long region_num) {
- return (struct stm_priv_region_info_s *)REAL_ADDRESS(
- get_region_base(region_num), STM_PREGION);
+static inline
+struct stm_priv_segment_info_s *get_priv_segment(long segment_num) {
+ return (struct stm_priv_segment_info_s *)REAL_ADDRESS(
+ get_segment_base(segment_num), STM_PSEGMENT);
}
diff --git a/c7/stm/misc.c b/c7/stm/misc.c
--- a/c7/stm/misc.c
+++ b/c7/stm/misc.c
@@ -10,15 +10,15 @@
assert(FIRST_OBJECT_PAGE * 4096UL <= (uintptr_t)o
&& (uintptr_t)o < NB_PAGES * 4096UL);
- return REAL_ADDRESS(STM_REGION->region_base, o);
+ return REAL_ADDRESS(STM_SEGMENT->segment_base, o);
}
-object_t *_stm_region_address(char *ptr)
+object_t *_stm_segment_address(char *ptr)
{
if (ptr == NULL)
return NULL;
- uintptr_t res = ptr - STM_REGION->region_base;
+ uintptr_t res = ptr - STM_SEGMENT->segment_base;
assert(FIRST_OBJECT_PAGE * 4096UL <= res
&& res < NB_PAGES * 4096UL);
return (object_t*)res;
@@ -27,7 +27,7 @@
bool _stm_was_read(object_t *obj)
{
return ((stm_read_marker_t *)(((uintptr_t)obj) >> 4))->rm ==
- STM_REGION->transaction_read_version;
+ STM_SEGMENT->transaction_read_version;
}
bool _stm_was_written(object_t *obj)
diff --git a/c7/stm/pages.c b/c7/stm/pages.c
--- a/c7/stm/pages.c
+++ b/c7/stm/pages.c
@@ -7,11 +7,11 @@
{
/* call remap_file_pages() to make all pages in the
range(pagenum, pagenum+count) refer to the same
- physical range of pages from region 0 */
+ physical range of pages from segment 0 */
long i;
- for (i = 1; i < NB_REGIONS; i++) {
- char *region_base = get_region_base(i);
- int res = remap_file_pages(region_base + pagenum * 4096UL,
+ for (i = 1; i < NB_SEGMENTS; i++) {
+ char *segment_base = get_segment_base(i);
+ int res = remap_file_pages(segment_base + pagenum * 4096UL,
count * 4096UL,
0, pagenum, 0);
if (res != 0) {
diff --git a/c7/stm/pages.h b/c7/stm/pages.h
--- a/c7/stm/pages.h
+++ b/c7/stm/pages.h
@@ -1,10 +1,10 @@
enum {
- /* The page is not in use. Assume that each region sees its own copy. */
+ /* The page is not in use. Assume that each segment sees its own copy. */
FREE_PAGE=0,
- /* The page is shared by all threads. Each region sees the same
- physical page (the one that is within the region 0 mmap address). */
+ /* The page is shared by all threads. Each segment sees the same
+ physical page (the one that is within the segment 0 mmap address). */
SHARED_PAGE,
/* Page being in the process of privatization */
diff --git a/c7/stm/setup.c b/c7/stm/setup.c
--- a/c7/stm/setup.c
+++ b/c7/stm/setup.c
@@ -13,9 +13,9 @@
#endif
/* Check that some values are acceptable */
- assert(4096 <= ((uintptr_t)STM_REGION));
- assert((uintptr_t)STM_REGION == (uintptr_t)STM_PREGION);
- assert(((uintptr_t)STM_PREGION) + sizeof(*STM_PREGION) <= 8192);
+ assert(4096 <= ((uintptr_t)STM_SEGMENT));
+ assert((uintptr_t)STM_SEGMENT == (uintptr_t)STM_PSEGMENT);
+ assert(((uintptr_t)STM_PSEGMENT) + sizeof(*STM_PSEGMENT) <= 8192);
assert(2 <= FIRST_READMARKER_PAGE);
assert(FIRST_READMARKER_PAGE * 4096UL <= READMARKER_START);
assert(READMARKER_START < READMARKER_END);
@@ -31,27 +31,27 @@
}
long i;
- for (i = 0; i < NB_REGIONS; i++) {
- char *region_base = get_region_base(i);
+ for (i = 0; i < NB_SEGMENTS; i++) {
+ char *segment_base = get_segment_base(i);
- /* In each region, the first page is where TLPREFIX'ed
+ /* In each segment, the first page is where TLPREFIX'ed
NULL accesses land. We mprotect it so that accesses fail. */
- mprotect(region_base, 4096, PROT_NONE);
+ mprotect(segment_base, 4096, PROT_NONE);
/* Fill the TLS page (page 1) with 0xDD, for debugging */
- memset(REAL_ADDRESS(region_base, 4096), 0xDD, 4096);
- /* Make a "hole" at STM_PREGION */
- memset(REAL_ADDRESS(region_base, STM_PREGION), 0,
- sizeof(*STM_PREGION));
+ memset(REAL_ADDRESS(segment_base, 4096), 0xDD, 4096);
+ /* Make a "hole" at STM_PSEGMENT */
+ memset(REAL_ADDRESS(segment_base, STM_PSEGMENT), 0,
+ sizeof(*STM_PSEGMENT));
/* Pages in range(2, FIRST_READMARKER_PAGE) are never used */
if (FIRST_READMARKER_PAGE > 2)
- mprotect(region_base + 8192, (FIRST_READMARKER_PAGE - 2) * 4096UL,
+ mprotect(segment_base + 8192, (FIRST_READMARKER_PAGE - 2) * 4096UL,
PROT_NONE);
- struct stm_priv_region_info_s *pr = get_priv_region(i);
- pr->pub.region_num = i;
- pr->pub.region_base = region_base;
+ struct stm_priv_segment_info_s *pr = get_priv_segment(i);
+ pr->pub.segment_num = i;
+ pr->pub.segment_base = segment_base;
}
/* Make the nursery pages shared. The other pages are
@@ -85,7 +85,7 @@
stm_thread_locals->prev->next = tl;
stm_thread_locals->prev = tl;
}
- tl->associated_region = get_region(0);
+ tl->associated_segment = get_segment(0);
}
void stm_unregister_thread_local(stm_thread_local_t *tl)
diff --git a/c7/stmgc.h b/c7/stmgc.h
--- a/c7/stmgc.h
+++ b/c7/stmgc.h
@@ -31,7 +31,7 @@
#define TLPREFIX __attribute__((address_space(256)))
typedef TLPREFIX struct object_s object_t;
-typedef TLPREFIX struct stm_region_info_s stm_region_info_t;
+typedef TLPREFIX struct stm_segment_info_s stm_segment_info_t;
typedef TLPREFIX struct stm_read_marker_s stm_read_marker_t;
typedef TLPREFIX char stm_char;
typedef void* stm_jmpbuf_t[5]; /* for use with __builtin_setjmp() */
@@ -40,22 +40,22 @@
uint8_t rm;
};
-struct stm_region_info_s {
+struct stm_segment_info_s {
uint8_t transaction_read_version;
- int region_num;
- char *region_base;
+ int segment_num;
+ char *segment_base;
stm_char *nursery_current;
uintptr_t nursery_section_end;
struct stm_thread_local_s *running_thread;
stm_jmpbuf_t *jmpbuf_ptr;
};
-#define STM_REGION ((stm_region_info_t *)4352)
+#define STM_SEGMENT ((stm_segment_info_t *)4352)
typedef struct stm_thread_local_s {
/* every thread should handle the shadow stack itself */
object_t **shadowstack, **shadowstack_base;
/* the next fields are handled automatically by the library */
- struct stm_region_info_s *associated_region;
+ struct stm_segment_info_s *associated_segment;
struct stm_thread_local_s *prev, *next;
} stm_thread_local_t;
@@ -70,7 +70,7 @@
bool _stm_was_written(object_t *obj);
bool _stm_in_nursery(object_t *obj);
char *_stm_real_address(object_t *o);
-object_t *_stm_region_address(char *ptr);
+object_t *_stm_segment_address(char *ptr);
#endif
#define _STM_GCFLAG_WRITE_BARRIER 0x01
@@ -108,7 +108,7 @@
static inline void stm_read(object_t *obj)
{
((stm_read_marker_t *)(((uintptr_t)obj) >> 4))->rm =
- STM_REGION->transaction_read_version;
+ STM_SEGMENT->transaction_read_version;
}
static inline void stm_write(object_t *obj)
@@ -128,10 +128,10 @@
OPT_ASSERT(size_rounded_up >= 16);
OPT_ASSERT((size_rounded_up & 7) == 0);
- stm_char *p = STM_REGION->nursery_current;
+ stm_char *p = STM_SEGMENT->nursery_current;
stm_char *end = p + size_rounded_up;
- STM_REGION->nursery_current = end;
- if (UNLIKELY((uintptr_t)end > STM_REGION->nursery_section_end))
+ STM_SEGMENT->nursery_current = end;
+ if (UNLIKELY((uintptr_t)end > STM_SEGMENT->nursery_section_end))
p = _stm_allocate_slowpath(size_rounded_up);
return (object_t *)p;
}
@@ -155,7 +155,7 @@
})
static inline void stm_become_inevitable(char* msg) {
- if (STM_REGION->jmpbuf_ptr != NULL)
+ if (STM_SEGMENT->jmpbuf_ptr != NULL)
_stm_become_inevitable(msg);
}
diff --git a/c7/test/support.py b/c7/test/support.py
--- a/c7/test/support.py
+++ b/c7/test/support.py
@@ -64,7 +64,7 @@
void stm_become_inevitable(char* msg);
bool _stm_in_nursery(object_t *obj);
char *_stm_real_address(object_t *obj);
-object_t *_stm_region_address(char *ptr);
+object_t *_stm_segment_address(char *ptr);
void _stm_start_safe_point(uint8_t);
void _stm_stop_safe_point(uint8_t);
@@ -164,15 +164,15 @@
bool _checked_stm_write(object_t *object) {
stm_jmpbuf_t here;
- stm_region_info_t *region = STM_REGION;
+ stm_segment_info_t *segment = STM_SEGMENT;
if (__builtin_setjmp(here) == 0) { // returned directly
- assert(region->jmpbuf_ptr == (stm_jmpbuf_t *)-1);
- region->jmpbuf_ptr = &here;
+ assert(segment->jmpbuf_ptr == (stm_jmpbuf_t *)-1);
+ segment->jmpbuf_ptr = &here;
stm_write(object);
- region->jmpbuf_ptr = (stm_jmpbuf_t *)-1;
+ segment->jmpbuf_ptr = (stm_jmpbuf_t *)-1;
return 0;
}
- region->jmpbuf_ptr = (stm_jmpbuf_t *)-1;
+ segment->jmpbuf_ptr = (stm_jmpbuf_t *)-1;
return 1;
}
@@ -338,8 +338,8 @@
def stm_get_real_address(obj):
return lib._stm_real_address(ffi.cast('object_t*', obj))
-def stm_get_region_address(ptr):
- return int(ffi.cast('uintptr_t', lib._stm_region_address(ptr)))
+def stm_get_segment_address(ptr):
+ return int(ffi.cast('uintptr_t', lib._stm_segment_address(ptr)))
def stm_read(o):
lib.stm_read(o)
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit