X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fruntime%2Fgencgc.c;h=6e49fdec07a092395c1e0394e025c576b7c94ac7;hb=79bc50a7798a9fdb92d0c6e233f8f5282539649b;hp=a5f1dc07196cc81ab2284850681dce13ac50e171;hpb=9e58342e3ebb8bbaaa648cd345232b08279f3a0c;p=sbcl.git diff --git a/src/runtime/gencgc.c b/src/runtime/gencgc.c index a5f1dc0..6e49fde 100644 --- a/src/runtime/gencgc.c +++ b/src/runtime/gencgc.c @@ -245,17 +245,17 @@ find_page_index(void *addr) return (-1); } -static size_t +static os_vm_size_t npage_bytes(page_index_t npages) { gc_assert(npages>=0); - return ((unsigned long)npages)*GENCGC_CARD_BYTES; + return ((os_vm_size_t)npages)*GENCGC_CARD_BYTES; } /* Check that X is a higher address than Y and return offset from Y to * X in bytes. */ -static inline -size_t void_diff(void *x, void *y) +static inline os_vm_size_t +void_diff(void *x, void *y) { gc_assert(x >= y); return (pointer_sized_uint_t)x - (pointer_sized_uint_t)y; @@ -350,11 +350,11 @@ static pthread_mutex_t free_pages_lock = PTHREAD_MUTEX_INITIALIZER; static pthread_mutex_t allocation_lock = PTHREAD_MUTEX_INITIALIZER; #endif -extern unsigned long gencgc_release_granularity; -unsigned long gencgc_release_granularity = GENCGC_RELEASE_GRANULARITY; +extern os_vm_size_t gencgc_release_granularity; +os_vm_size_t gencgc_release_granularity = GENCGC_RELEASE_GRANULARITY; -extern unsigned long gencgc_alloc_granularity; -unsigned long gencgc_alloc_granularity = GENCGC_ALLOC_GRANULARITY; +extern os_vm_size_t gencgc_alloc_granularity; +os_vm_size_t gencgc_alloc_granularity = GENCGC_ALLOC_GRANULARITY; /* @@ -408,11 +408,11 @@ count_dont_move_pages(void) /* Work through the pages and add up the number of bytes used for the * given generation. */ -static unsigned long +static os_vm_size_t count_generation_bytes_allocated (generation_index_t gen) { page_index_t i; - unsigned long result = 0; + os_vm_size_t result = 0; for (i = 0; i < last_free_page; i++) { if (page_allocated_p(i) && (page_table[i].gen == gen)) @@ -498,18 +498,20 @@ write_generation_stats(FILE *file) " %5"PAGE_INDEX_FMT" %5"PAGE_INDEX_FMT, boxed_cnt, unboxed_cnt, large_boxed_cnt, large_unboxed_cnt, pinned_cnt); - fprintf(file - " %8ld %5ld %8ld %4ld %3d %7.4f\n", + fprintf(file, + " %8"OS_VM_SIZE_FMT + " %5"OS_VM_SIZE_FMT + " %8"OS_VM_SIZE_FMT + " %4"PAGE_INDEX_FMT" %3d %7.4f\n", generations[i].bytes_allocated, - (npage_bytes(count_generation_pages(i)) - - generations[i].bytes_allocated), + (npage_bytes(count_generation_pages(i)) - generations[i].bytes_allocated), generations[i].gc_trigger, count_write_protect_generation_pages(i), generations[i].num_gc, generation_average_age(i)); } - fprintf(file," Total bytes allocated = %lu\n", (unsigned long)bytes_allocated); - fprintf(file," Dynamic-space-size bytes = %lu\n", (unsigned long)dynamic_space_size); + fprintf(file," Total bytes allocated = %"OS_VM_SIZE_FMT"\n", bytes_allocated); + fprintf(file," Dynamic-space-size bytes = %"OS_VM_SIZE_FMT"\n", dynamic_space_size); fpu_restore(fpu_state); } @@ -590,7 +592,7 @@ void fast_bzero(void*, size_t); /* in -assem.S */ void zero_pages_with_mmap(page_index_t start, page_index_t end) { page_index_t i; void *addr = page_address(start), *new_addr; - size_t length = npage_bytes(1+end-start); + os_vm_size_t length = npage_bytes(1+end-start); if (start > end) return; @@ -787,7 +789,7 @@ gc_alloc_new_region(long nbytes, int page_type_flag, struct alloc_region *alloc_ { page_index_t first_page; page_index_t last_page; - unsigned long bytes_found; + os_vm_size_t bytes_found; page_index_t i; int ret; @@ -986,13 +988,13 @@ add_new_area(page_index_t first_page, size_t offset, size_t size) void gc_alloc_update_page_tables(int page_type_flag, struct alloc_region *alloc_region) { - int more; + boolean more; page_index_t first_page; page_index_t next_page; - unsigned long bytes_used; - unsigned long orig_first_page_bytes_used; - unsigned long region_size; - unsigned long byte_cnt; + os_vm_size_t bytes_used; + os_vm_size_t region_size; + os_vm_size_t byte_cnt; + page_bytes_t orig_first_page_bytes_used; int ret; @@ -1266,27 +1268,29 @@ gc_heap_exhausted_error_or_lose (long available, long requested) } page_index_t -gc_find_freeish_pages(page_index_t *restart_page_ptr, long nbytes, +gc_find_freeish_pages(page_index_t *restart_page_ptr, long bytes, int page_type_flag) { - page_index_t first_page, last_page; - page_index_t restart_page = *restart_page_ptr; - long nbytes_goal = nbytes; - long bytes_found = 0; - long most_bytes_found = 0; - page_index_t most_bytes_found_from, most_bytes_found_to; - int small_object = nbytes < GENCGC_CARD_BYTES; + page_index_t most_bytes_found_from = 0, most_bytes_found_to = 0; + page_index_t first_page, last_page, restart_page = *restart_page_ptr; + os_vm_size_t nbytes = bytes; + os_vm_size_t nbytes_goal = nbytes; + os_vm_size_t bytes_found = 0; + os_vm_size_t most_bytes_found = 0; + boolean small_object = nbytes < GENCGC_CARD_BYTES; /* FIXME: assert(free_pages_lock is held); */ if (nbytes_goal < gencgc_alloc_granularity) - nbytes_goal = gencgc_alloc_granularity; + nbytes_goal = gencgc_alloc_granularity; /* Toggled by gc_and_save for heap compaction, normally -1. */ if (gencgc_alloc_start_page != -1) { restart_page = gencgc_alloc_start_page; } - gc_assert(nbytes>=0); + /* FIXME: This is on bytes instead of nbytes pending cleanup of + * long from the interface. */ + gc_assert(bytes>=0); /* Search for a page with at least nbytes of space. We prefer * not to split small objects on multiple pages, to reduce the * number of contiguous allocation regions spaning multiple @@ -1350,6 +1354,7 @@ gc_find_freeish_pages(page_index_t *restart_page_ptr, long nbytes, gc_heap_exhausted_error_or_lose(most_bytes_found, nbytes); } + gc_assert(most_bytes_found_to); *restart_page_ptr = most_bytes_found_from; return most_bytes_found_to-1; } @@ -3993,7 +3998,7 @@ gc_free_heap(void) for (page = 0; page < page_table_pages; page++) { /* Skip free pages which should already be zero filled. */ if (page_allocated_p(page)) { - void *page_start, *addr; + void *page_start; for (last_page = page; (last_page < page_table_pages) && page_allocated_p(last_page); last_page++) {