From a714ab06f82220c26301c2bac761b9e8ba87c9b6 Mon Sep 17 00:00:00 2001 From: Kevin Tew Date: Wed, 5 Nov 2008 21:09:43 +0000 Subject: [PATCH] Moved protect_range to NewGC struct svn: r12301 --- src/mzscheme/gc2/newgc.c | 16 +++++++++------- src/mzscheme/gc2/newgc.h | 16 ++++++++++++++++ src/mzscheme/gc2/page_range.c | 12 ------------ src/mzscheme/gc2/protect_range.c | 22 ++++++++++------------ 4 files changed, 35 insertions(+), 31 deletions(-) diff --git a/src/mzscheme/gc2/newgc.c b/src/mzscheme/gc2/newgc.c index 7f2b54a8e5..77191b85b1 100644 --- a/src/mzscheme/gc2/newgc.c +++ b/src/mzscheme/gc2/newgc.c @@ -1347,7 +1347,7 @@ void GC_init_type_tags(int count, int pair, int mutable_pair, int weakbox, int e GC_add_roots(&GC->park, (char *)&GC->park + sizeof(GC->park) + 1); GC_add_roots(&GC->park_save, (char *)&GC->park_save + sizeof(GC->park_save) + 1); - initialize_protect_page_ranges(malloc_dirty_pages(APAGE_SIZE, APAGE_SIZE), APAGE_SIZE); + initialize_protect_page_ranges(GC->protect_range, malloc_dirty_pages(APAGE_SIZE, APAGE_SIZE), APAGE_SIZE); } else { GCPRINT(GCOUTF, "HEY WHATS UP.\n"); @@ -1832,6 +1832,7 @@ void *GC_next_tagged_start(void *p) static void prepare_pages_for_collection(void) { + Page_Range *protect_range = GC->protect_range; struct mpage *work; int i; @@ -1844,10 +1845,10 @@ static void prepare_pages_for_collection(void) for(work = GC->gen1_pages[i]; work; work = work->next) { if (work->mprotected) { work->mprotected = 0; - add_protect_page_range(work->addr, work->big_page ? round_to_apage_size(work->size) : APAGE_SIZE, APAGE_SIZE, 1); + add_protect_page_range(protect_range, work->addr, work->big_page ? round_to_apage_size(work->size) : APAGE_SIZE, APAGE_SIZE, 1); } } - flush_protect_page_ranges(1); + flush_protect_page_ranges(protect_range, 1); } for(i = 0; i < PAGE_TYPES; i++) for(work = GC->gen1_pages[i]; work; work = work->next) { @@ -1864,13 +1865,13 @@ static void prepare_pages_for_collection(void) if (work->back_pointers) { if (work->mprotected) { work->mprotected = 0; - add_protect_page_range(work->addr, work->big_page ? round_to_apage_size(work->size) : APAGE_SIZE, APAGE_SIZE, 1); + add_protect_page_range(protect_range, work->addr, work->big_page ? round_to_apage_size(work->size) : APAGE_SIZE, APAGE_SIZE, 1); } } } pagemap_remove(pagemap, work); } - flush_protect_page_ranges(1); + flush_protect_page_ranges(protect_range, 1); } } @@ -2236,6 +2237,7 @@ static void clean_up_heap(void) static void protect_old_pages(void) { + Page_Range *protect_range = GC->protect_range; struct mpage *page; int i; @@ -2245,11 +2247,11 @@ static void protect_old_pages(void) if(page->page_type != PAGE_ATOMIC) { if (!page->mprotected) { page->mprotected = 1; - add_protect_page_range(page->addr, page->size, APAGE_SIZE, 0); + add_protect_page_range(protect_range, page->addr, page->size, APAGE_SIZE, 0); } } - flush_protect_page_ranges(0); + flush_protect_page_ranges(protect_range, 0); } #if 0 diff --git a/src/mzscheme/gc2/newgc.h b/src/mzscheme/gc2/newgc.h index 55a274478e..855b70f441 100644 --- a/src/mzscheme/gc2/newgc.h +++ b/src/mzscheme/gc2/newgc.h @@ -65,6 +65,20 @@ typedef struct OTEntry { char required_set; } OTEntry; +typedef struct Range { + unsigned long start, len; + struct Range *left, *right, *prev, *next; +} Range; + +typedef struct Page_Range { + Range *range_root; + Range *range_start; + void *range_alloc_block; + unsigned long range_alloc_size; + unsigned long range_alloc_used; +} Page_Range; + + #ifdef SIXTY_FOUR_BIT_INTEGERS typedef mpage ****PageMap; #else @@ -78,6 +92,7 @@ typedef struct NewGC { PageMap page_maps; /* All non-gen0 pages are held in the following structure. */ struct mpage *gen1_pages[PAGE_TYPES]; + Page_Range *protect_range; /* Finalization */ @@ -169,6 +184,7 @@ void NewGC_initialize(NewGC *newgc) { newgc->page_maps = malloc(PAGEMAP32_SIZE * sizeof (mpage*)); #endif newgc->blockfree = malloc(sizeof(Free_Block) * BLOCKFREE_CACHE_SIZE); + newgc->protect_range = malloc(sizeof(Page_Range)); newgc->generations_available = 1; newgc->last_full_mem_use = (20 * 1024 * 1024); diff --git a/src/mzscheme/gc2/page_range.c b/src/mzscheme/gc2/page_range.c index 764d0518d2..15027b6d4b 100644 --- a/src/mzscheme/gc2/page_range.c +++ b/src/mzscheme/gc2/page_range.c @@ -6,11 +6,6 @@ add_page_range */ -typedef struct Range { - unsigned long start, len; - struct Range *left, *right, *prev, *next; -} Range; - #define Tree Range #define Splay_Item(t) (t)->start #define Set_Splay_Item(t, v) (t)->start = (v) @@ -25,13 +20,6 @@ typedef struct Range { #undef Splay_Item #undef Set_Splay_Item -typedef struct Page_Range { - Range *range_root, *range_start; - void *range_alloc_block; - unsigned long range_alloc_size; - unsigned long range_alloc_used; -} Page_Range; - static void initialize_page_ranges(Page_Range *pr, void *block, unsigned long size) { pr->range_root = NULL; diff --git a/src/mzscheme/gc2/protect_range.c b/src/mzscheme/gc2/protect_range.c index a6dfe285d8..0fc6580027 100644 --- a/src/mzscheme/gc2/protect_range.c +++ b/src/mzscheme/gc2/protect_range.c @@ -16,31 +16,29 @@ #else -static Page_Range protect_range; - -static void initialize_protect_page_ranges(void *block, unsigned long size) +static void initialize_protect_page_ranges(Page_Range *protect_range, void *block, unsigned long size) { - initialize_page_ranges(&protect_range, block, size); + initialize_page_ranges(protect_range, block, size); } -static void flush_protect_page_ranges(int writeable) +static void flush_protect_page_ranges(Page_Range *protect_range, int writeable) { Range *work; - compact_page_ranges(&protect_range); + compact_page_ranges(protect_range); - for (work = protect_range.range_start; work; work = work->next) { + for (work = protect_range->range_start; work; work = work->next) { protect_pages((void *)work->start, work->len, writeable); } - reset_page_ranges(&protect_range); + reset_page_ranges(protect_range); } -static void add_protect_page_range(void *_start, unsigned long len, unsigned long alignment, int writeable) +static void add_protect_page_range(Page_Range *protect_range, void *_start, unsigned long len, unsigned long alignment, int writeable) { - if (!add_page_range(&protect_range, _start, len, alignment)) { - flush_protect_page_ranges(writeable); - add_page_range(&protect_range, _start, len, alignment); + if (!add_page_range(protect_range, _start, len, alignment)) { + flush_protect_page_ranges(protect_range, writeable); + add_page_range(protect_range, _start, len, alignment); } }