1234370Sjasone#define JEMALLOC_EXTENT_C_ 2234370Sjasone#include "jemalloc/internal/jemalloc_internal.h" 3234370Sjasone 4234370Sjasone/******************************************************************************/ 5234370Sjasone 6286866SjasoneJEMALLOC_INLINE_C size_t 7286866Sjasoneextent_quantize(size_t size) 8286866Sjasone{ 9286866Sjasone 10286866Sjasone /* 11286866Sjasone * Round down to the nearest chunk size that can actually be requested 12286866Sjasone * during normal huge allocation. 13286866Sjasone */ 14286866Sjasone return (index2size(size2index(size + 1) - 1)); 15286866Sjasone} 16286866Sjasone 17286866SjasoneJEMALLOC_INLINE_C int 18296221Sjasoneextent_szad_comp(const extent_node_t *a, const extent_node_t *b) 19234370Sjasone{ 20234370Sjasone int ret; 21286866Sjasone size_t a_qsize = extent_quantize(extent_node_size_get(a)); 22286866Sjasone size_t b_qsize = extent_quantize(extent_node_size_get(b)); 23234370Sjasone 24286866Sjasone /* 25286866Sjasone * Compare based on quantized size rather than size, in order to sort 26286866Sjasone * equally useful extents only by address. 27286866Sjasone */ 28286866Sjasone ret = (a_qsize > b_qsize) - (a_qsize < b_qsize); 29234370Sjasone if (ret == 0) { 30286866Sjasone uintptr_t a_addr = (uintptr_t)extent_node_addr_get(a); 31286866Sjasone uintptr_t b_addr = (uintptr_t)extent_node_addr_get(b); 32234370Sjasone 33234370Sjasone ret = (a_addr > b_addr) - (a_addr < b_addr); 34234370Sjasone } 35234370Sjasone 36234370Sjasone return (ret); 37234370Sjasone} 38234370Sjasone 39234370Sjasone/* Generate red-black tree functions. */ 40286866Sjasonerb_gen(, extent_tree_szad_, extent_tree_t, extent_node_t, szad_link, 41234370Sjasone extent_szad_comp) 42234370Sjasone 43286866SjasoneJEMALLOC_INLINE_C int 44296221Sjasoneextent_ad_comp(const extent_node_t *a, const extent_node_t *b) 45234370Sjasone{ 46286866Sjasone uintptr_t a_addr = (uintptr_t)extent_node_addr_get(a); 47286866Sjasone uintptr_t b_addr = (uintptr_t)extent_node_addr_get(b); 48234370Sjasone 49234370Sjasone return ((a_addr > b_addr) - (a_addr < b_addr)); 50234370Sjasone} 51234370Sjasone 52234370Sjasone/* Generate red-black tree functions. */ 53286866Sjasonerb_gen(, extent_tree_ad_, extent_tree_t, extent_node_t, ad_link, extent_ad_comp) 54