Lines Matching refs:sh

276     ((char*)(p) >= sh.arena && (char*)(p) < &sh.arena[sh.arena_size])
278 ((char*)(p) >= (char*)sh.freelist && (char*)(p) < (char*)&sh.freelist[sh.freelist_size])
301 static SH sh; variable
305 ossl_ssize_t list = sh.freelist_size - 1; in sh_getlist()
306 size_t bit = (sh.arena_size + ptr - sh.arena) / sh.minsize; in sh_getlist()
309 if (TESTBIT(sh.bittable, bit)) in sh_getlist()
322 OPENSSL_assert(list >= 0 && list < sh.freelist_size); in sh_testbit()
323 OPENSSL_assert(((ptr - sh.arena) & ((sh.arena_size >> list) - 1)) == 0); in sh_testbit()
324 bit = (ONE << list) + ((ptr - sh.arena) / (sh.arena_size >> list)); in sh_testbit()
325 OPENSSL_assert(bit > 0 && bit < sh.bittable_size); in sh_testbit()
333 OPENSSL_assert(list >= 0 && list < sh.freelist_size); in sh_clearbit()
334 OPENSSL_assert(((ptr - sh.arena) & ((sh.arena_size >> list) - 1)) == 0); in sh_clearbit()
335 bit = (ONE << list) + ((ptr - sh.arena) / (sh.arena_size >> list)); in sh_clearbit()
336 OPENSSL_assert(bit > 0 && bit < sh.bittable_size); in sh_clearbit()
345 OPENSSL_assert(list >= 0 && list < sh.freelist_size); in sh_setbit()
346 OPENSSL_assert(((ptr - sh.arena) & ((sh.arena_size >> list) - 1)) == 0); in sh_setbit()
347 bit = (ONE << list) + ((ptr - sh.arena) / (sh.arena_size >> list)); in sh_setbit()
348 OPENSSL_assert(bit > 0 && bit < sh.bittable_size); in sh_setbit()
400 memset(&sh, 0, sizeof(sh)); in sh_init()
430 sh.arena_size = size; in sh_init()
431 sh.minsize = minsize; in sh_init()
432 sh.bittable_size = (sh.arena_size / sh.minsize) * 2; in sh_init()
435 if (sh.bittable_size >> 3 == 0) in sh_init()
438 sh.freelist_size = -1; in sh_init()
439 for (i = sh.bittable_size; i; i >>= 1) in sh_init()
440 sh.freelist_size++; in sh_init()
442 sh.freelist = OPENSSL_zalloc(sh.freelist_size * sizeof(char *)); in sh_init()
443 OPENSSL_assert(sh.freelist != NULL); in sh_init()
444 if (sh.freelist == NULL) in sh_init()
447 sh.bittable = OPENSSL_zalloc(sh.bittable_size >> 3); in sh_init()
448 OPENSSL_assert(sh.bittable != NULL); in sh_init()
449 if (sh.bittable == NULL) in sh_init()
452 sh.bitmalloc = OPENSSL_zalloc(sh.bittable_size >> 3); in sh_init()
453 OPENSSL_assert(sh.bitmalloc != NULL); in sh_init()
454 if (sh.bitmalloc == NULL) in sh_init()
476 sh.map_size = pgsize + sh.arena_size + pgsize; in sh_init()
480 sh.map_result = mmap(NULL, sh.map_size, in sh_init()
486 sh.map_result = MAP_FAILED; in sh_init()
488 sh.map_result = mmap(NULL, sh.map_size, in sh_init()
494 if (sh.map_result == MAP_FAILED) in sh_init()
497 sh.map_result = VirtualAlloc(NULL, sh.map_size, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE); in sh_init()
499 if (sh.map_result == NULL) in sh_init()
503 sh.arena = (char *)(sh.map_result + pgsize); in sh_init()
504 sh_setbit(sh.arena, 0, sh.bittable); in sh_init()
505 sh_add_to_list(&sh.freelist[0], sh.arena); in sh_init()
512 if (mprotect(sh.map_result, pgsize, PROT_NONE) < 0) in sh_init()
515 if (VirtualProtect(sh.map_result, pgsize, PAGE_NOACCESS, &flOldProtect) == FALSE) in sh_init()
520 aligned = (pgsize + sh.arena_size + (pgsize - 1)) & ~(pgsize - 1); in sh_init()
522 if (mprotect(sh.map_result + aligned, pgsize, PROT_NONE) < 0) in sh_init()
525 if (VirtualProtect(sh.map_result + aligned, pgsize, PAGE_NOACCESS, &flOldProtect) == FALSE) in sh_init()
530 if (syscall(SYS_mlock2, sh.arena, sh.arena_size, MLOCK_ONFAULT) < 0) { in sh_init()
532 if (mlock(sh.arena, sh.arena_size) < 0) in sh_init()
539 if (VirtualLock(sh.arena, sh.arena_size) == FALSE) in sh_init()
542 if (mlock(sh.arena, sh.arena_size) < 0) in sh_init()
546 if (madvise(sh.arena, sh.arena_size, MADV_DONTDUMP) < 0) in sh_init()
559 OPENSSL_free(sh.freelist); in sh_done()
560 OPENSSL_free(sh.bittable); in sh_done()
561 OPENSSL_free(sh.bitmalloc); in sh_done()
563 if (sh.map_result != MAP_FAILED && sh.map_size) in sh_done()
564 munmap(sh.map_result, sh.map_size); in sh_done()
566 if (sh.map_result != NULL && sh.map_size) in sh_done()
567 VirtualFree(sh.map_result, 0, MEM_RELEASE); in sh_done()
569 memset(&sh, 0, sizeof(sh)); in sh_done()
582 bit = (ONE << list) + (ptr - sh.arena) / (sh.arena_size >> list); in sh_find_my_buddy()
585 if (TESTBIT(sh.bittable, bit) && !TESTBIT(sh.bitmalloc, bit)) in sh_find_my_buddy()
586 chunk = sh.arena + ((bit & ((ONE << list) - 1)) * (sh.arena_size >> list)); in sh_find_my_buddy()
597 if (size > sh.arena_size) in sh_malloc()
600 list = sh.freelist_size - 1; in sh_malloc()
601 for (i = sh.minsize; i < size; i <<= 1) in sh_malloc()
608 if (sh.freelist[slist] != NULL) in sh_malloc()
615 char *temp = sh.freelist[slist]; in sh_malloc()
618 OPENSSL_assert(!sh_testbit(temp, slist, sh.bitmalloc)); in sh_malloc()
619 sh_clearbit(temp, slist, sh.bittable); in sh_malloc()
621 OPENSSL_assert(temp != sh.freelist[slist]); in sh_malloc()
627 OPENSSL_assert(!sh_testbit(temp, slist, sh.bitmalloc)); in sh_malloc()
628 sh_setbit(temp, slist, sh.bittable); in sh_malloc()
629 sh_add_to_list(&sh.freelist[slist], temp); in sh_malloc()
630 OPENSSL_assert(sh.freelist[slist] == temp); in sh_malloc()
633 temp += sh.arena_size >> slist; in sh_malloc()
634 OPENSSL_assert(!sh_testbit(temp, slist, sh.bitmalloc)); in sh_malloc()
635 sh_setbit(temp, slist, sh.bittable); in sh_malloc()
636 sh_add_to_list(&sh.freelist[slist], temp); in sh_malloc()
637 OPENSSL_assert(sh.freelist[slist] == temp); in sh_malloc()
639 OPENSSL_assert(temp-(sh.arena_size >> slist) == sh_find_my_buddy(temp, slist)); in sh_malloc()
643 chunk = sh.freelist[list]; in sh_malloc()
644 OPENSSL_assert(sh_testbit(chunk, list, sh.bittable)); in sh_malloc()
645 sh_setbit(chunk, list, sh.bitmalloc); in sh_malloc()
668 OPENSSL_assert(sh_testbit(ptr, list, sh.bittable)); in sh_free()
669 sh_clearbit(ptr, list, sh.bitmalloc); in sh_free()
670 sh_add_to_list(&sh.freelist[list], ptr); in sh_free()
676 OPENSSL_assert(!sh_testbit(ptr, list, sh.bitmalloc)); in sh_free()
677 sh_clearbit(ptr, list, sh.bittable); in sh_free()
679 OPENSSL_assert(!sh_testbit(ptr, list, sh.bitmalloc)); in sh_free()
680 sh_clearbit(buddy, list, sh.bittable); in sh_free()
690 OPENSSL_assert(!sh_testbit(ptr, list, sh.bitmalloc)); in sh_free()
691 sh_setbit(ptr, list, sh.bittable); in sh_free()
692 sh_add_to_list(&sh.freelist[list], ptr); in sh_free()
693 OPENSSL_assert(sh.freelist[list] == ptr); in sh_free()
705 OPENSSL_assert(sh_testbit(ptr, list, sh.bittable)); in sh_actual_size()
706 return sh.arena_size / (ONE << list); in sh_actual_size()