Lines Matching refs:area

178 	area_id				area;  member
237 guarded_heap_page_protect(guarded_heap_area& area, size_t pageIndex, in guarded_heap_page_protect() argument
240 guarded_heap_page_protect_raw(area.base + pageIndex * B_PAGE_SIZE, in guarded_heap_page_protect()
318 guarded_heap_page_allocate(guarded_heap_area& area, size_t startPageIndex, in guarded_heap_page_allocate() argument
329 guarded_heap_page& page = area.pages[startPageIndex + i]; in guarded_heap_page_allocate()
348 list_remove_item(&area.free_list, &page); in guarded_heap_page_allocate()
352 guarded_heap_page_protect(area, startPageIndex + i, 0); in guarded_heap_page_allocate()
354 guarded_heap_page_protect(area, startPageIndex + i, in guarded_heap_page_allocate()
362 guarded_heap_free_page(guarded_heap_area& area, size_t pageIndex, in guarded_heap_free_page() argument
365 guarded_heap_page& page = area.pages[pageIndex]; in guarded_heap_free_page()
367 if (area.heap->reuse_memory || force) in guarded_heap_free_page()
374 list_add_item(&area.free_list, &page); in guarded_heap_free_page()
376 guarded_heap_page_protect(area, pageIndex, 0); in guarded_heap_free_page()
388 guarded_heap_area_allocate(guarded_heap_area& area, size_t pagesNeeded, in guarded_heap_area_allocate() argument
391 if (pagesNeeded > area.page_count - area.used_pages) in guarded_heap_area_allocate()
398 = (guarded_heap_page*)list_get_next_item(&area.free_list, NULL); in guarded_heap_area_allocate()
401 page = (guarded_heap_page*)list_get_next_item(&area.free_list, page)) { in guarded_heap_area_allocate()
406 size_t pageIndex = page - area.pages; in guarded_heap_area_allocate()
407 if (pageIndex > area.page_count - pagesNeeded) in guarded_heap_area_allocate()
414 if ((area.pages[pageIndex + j].flags & GUARDED_HEAP_PAGE_FLAG_USED) in guarded_heap_area_allocate()
425 void* result = (void*)((area.base + pageIndex * B_PAGE_SIZE in guarded_heap_area_allocate()
428 guarded_heap_page_allocate(area, pageIndex, pagesNeeded, size, in guarded_heap_area_allocate()
431 area.used_pages += pagesNeeded; in guarded_heap_area_allocate()
432 guarded_heap_pages_allocated(*area.heap, pagesNeeded); in guarded_heap_area_allocate()
444 guarded_heap_area* area = (guarded_heap_area*)baseAddress; in guarded_heap_area_init() local
445 area->heap = &heap; in guarded_heap_area_init()
446 area->area = id; in guarded_heap_area_init()
447 area->size = size; in guarded_heap_area_init()
448 area->page_count = area->size / B_PAGE_SIZE; in guarded_heap_area_init()
449 area->used_pages = 0; in guarded_heap_area_init()
452 + area->page_count * sizeof(guarded_heap_page) in guarded_heap_area_init()
455 area->page_count -= pagesNeeded; in guarded_heap_area_init()
456 area->size = area->page_count * B_PAGE_SIZE; in guarded_heap_area_init()
457 area->base = (addr_t)baseAddress + pagesNeeded * B_PAGE_SIZE; in guarded_heap_area_init()
459 mutex_init(&area->lock, "guarded_heap_area_lock"); in guarded_heap_area_init()
461 list_init_etc(&area->free_list, in guarded_heap_area_init()
464 for (size_t i = 0; i < area->page_count; i++) in guarded_heap_area_init()
465 guarded_heap_free_page(*area, i, true); in guarded_heap_area_init()
467 area->next = heap.areas; in guarded_heap_area_init()
468 heap.areas = area; in guarded_heap_area_init()
469 heap.page_count += area->page_count; in guarded_heap_area_init()
523 area_id area = create_area("guarded_heap_huge_allocation", &address, in guarded_heap_allocate_with_area() local
526 if (area < 0) { in guarded_heap_allocate_with_area()
589 for (guarded_heap_area* area = heap.areas; area != NULL; in guarded_heap_allocate() local
590 area = area->next) { in guarded_heap_allocate()
592 MutexLocker locker(area->lock); in guarded_heap_allocate()
593 result = guarded_heap_area_allocate(*area, pagesNeeded, size, in guarded_heap_allocate()
618 for (guarded_heap_area* area = heap.areas; area != NULL; in guarded_heap_get_locked_area_for() local
619 area = area->next) { in guarded_heap_get_locked_area_for()
620 if ((addr_t)address < area->base) in guarded_heap_get_locked_area_for()
623 if ((addr_t)address >= area->base + area->size) in guarded_heap_get_locked_area_for()
626 mutex_lock(&area->lock); in guarded_heap_get_locked_area_for()
627 return area; in guarded_heap_get_locked_area_for()
635 guarded_heap_area_page_index_for(guarded_heap_area& area, void* address) in guarded_heap_area_page_index_for() argument
637 size_t pageIndex = ((addr_t)address - area.base) / B_PAGE_SIZE; in guarded_heap_area_page_index_for()
638 guarded_heap_page& page = area.pages[pageIndex]; in guarded_heap_area_page_index_for()
642 return area.page_count; in guarded_heap_area_page_index_for()
648 return area.page_count; in guarded_heap_area_page_index_for()
654 return area.page_count; in guarded_heap_area_page_index_for()
660 return area.page_count; in guarded_heap_area_page_index_for()
668 guarded_heap_area_free(guarded_heap_area& area, void* address) in guarded_heap_area_free() argument
670 size_t pageIndex = guarded_heap_area_page_index_for(area, address); in guarded_heap_area_free()
671 if (pageIndex >= area.page_count) in guarded_heap_area_free()
675 guarded_heap_page* page = &area.pages[pageIndex]; in guarded_heap_area_free()
678 guarded_heap_free_page(area, pageIndex); in guarded_heap_area_free()
690 page = &area.pages[pageIndex]; in guarded_heap_area_free()
694 guarded_heap_free_page(area, pageIndex); in guarded_heap_area_free()
697 if (area.heap->reuse_memory) { in guarded_heap_area_free()
698 area.used_pages -= pagesFreed; in guarded_heap_area_free()
699 atomic_add((int32*)&area.heap->used_pages, -pagesFreed); in guarded_heap_area_free()
750 guarded_heap_area* area = guarded_heap_get_locked_area_for(sGuardedHeap, in guarded_heap_free() local
752 if (area == NULL) in guarded_heap_free()
755 MutexLocker locker(area->lock, true); in guarded_heap_free()
756 return guarded_heap_area_free(*area, address); in guarded_heap_free()
763 guarded_heap_area* area = guarded_heap_get_locked_area_for(sGuardedHeap, in guarded_heap_realloc() local
768 if (area != NULL) { in guarded_heap_realloc()
769 MutexLocker locker(area->lock, true); in guarded_heap_realloc()
770 size_t pageIndex = guarded_heap_area_page_index_for(*area, address); in guarded_heap_realloc()
771 if (pageIndex >= area->page_count) in guarded_heap_realloc()
774 guarded_heap_page& page = area->pages[pageIndex]; in guarded_heap_realloc()
799 MutexLocker locker(area->lock); in guarded_heap_realloc()
800 guarded_heap_area_free(*area, address); in guarded_heap_realloc()
836 guarded_heap_area* area = NULL; in dump_guarded_heap_page() local
845 area = candidate; in dump_guarded_heap_page()
849 if (area == NULL) { in dump_guarded_heap_page()
854 size_t pageIndex = ((addr_t)address - area->base) / B_PAGE_SIZE; in dump_guarded_heap_page()
855 guarded_heap_page& page = area->pages[pageIndex]; in dump_guarded_heap_page()
861 guarded_heap_page& candidate = area->pages[candidateIndex]; in dump_guarded_heap_page()
899 dump_guarded_heap_area(guarded_heap_area& area) in dump_guarded_heap_area() argument
901 printf("guarded heap area: %p\n", &area); in dump_guarded_heap_area()
902 printf("next heap area: %p\n", area.next); in dump_guarded_heap_area()
903 printf("guarded heap: %p\n", area.heap); in dump_guarded_heap_area()
904 printf("area id: %" B_PRId32 "\n", area.area); in dump_guarded_heap_area()
905 printf("base: 0x%" B_PRIxADDR "\n", area.base); in dump_guarded_heap_area()
906 printf("size: %" B_PRIuSIZE "\n", area.size); in dump_guarded_heap_area()
907 printf("page count: %" B_PRIuSIZE "\n", area.page_count); in dump_guarded_heap_area()
908 printf("used pages: %" B_PRIuSIZE "\n", area.used_pages); in dump_guarded_heap_area()
909 printf("lock: %p\n", &area.lock); in dump_guarded_heap_area()
912 void* item = list_get_next_item(&area.free_list, NULL); in dump_guarded_heap_area()
921 item = list_get_next_item(&area.free_list, item); in dump_guarded_heap_area()
924 printf("free_list: %p (%" B_PRIuSIZE " free)\n", &area.free_list, in dump_guarded_heap_area()
930 for (size_t i = 0; i <= area.page_count; i++) { in dump_guarded_heap_area()
931 guarded_heap_page& page = area.pages[i]; in dump_guarded_heap_area()
932 if (i == area.page_count in dump_guarded_heap_area()
942 for (size_t j = 1; j < area.page_count - i; j++) { in dump_guarded_heap_area()
943 if ((area.pages[i + j].flags & GUARDED_HEAP_PAGE_FLAG_USED) != 0) in dump_guarded_heap_area()
955 printf("pages: %p\n", area.pages); in dump_guarded_heap_area()
970 guarded_heap_area* area = heap.areas; in dump_guarded_heap() local
971 while (area != NULL) { in dump_guarded_heap()
973 area = area->next; in dump_guarded_heap()
987 for (guarded_heap_area* area = heap.areas; area != NULL; in dump_allocations() local
988 area = area->next) { in dump_allocations()
990 MutexLocker areaLocker(area->lock); in dump_allocations()
991 for (size_t i = 0; i < area->page_count; i++) { in dump_allocations()
992 guarded_heap_page& page = area->pages[i]; in dump_allocations()
1068 for (guarded_heap_area* area = sGuardedHeap.areas; area != NULL; in guarded_heap_dump_heaps() local
1069 area = area->next) { in guarded_heap_dump_heaps()
1070 MutexLocker areaLocker(area->lock); in guarded_heap_dump_heaps()
1071 dump_guarded_heap_area(*area); in guarded_heap_dump_heaps()
1076 for (size_t i = 0; i < area->page_count; i++) { in guarded_heap_dump_heaps()
1077 dump_guarded_heap_page(area->pages[i]); in guarded_heap_dump_heaps()
1078 if ((area->pages[i].flags & GUARDED_HEAP_PAGE_FLAG_FIRST) != 0) in guarded_heap_dump_heaps()
1079 guarded_heap_print_stack_traces(area->pages[i]); in guarded_heap_dump_heaps()
1130 for (guarded_heap_area* area = sGuardedHeap.areas; area != NULL; in init_after_fork() local
1131 area = area->next) { in init_after_fork()
1132 area->area = area_for(area); in init_after_fork()
1133 if (area->area < 0) in init_after_fork()
1134 panic("failed to find area for heap area %p after fork", area); in init_after_fork()