From dc0a4b8b2f2daf17a27b4b1fc869ef48d40d3ef2 Mon Sep 17 00:00:00 2001 From: David Goldblatt Date: Tue, 20 Jul 2021 09:02:17 -0700 Subject: [PATCH] Edata: Pull out comparison fields into a summary. For now, this is a no-op; eventually, it will allow some caching in the eset. --- include/jemalloc/internal/edata.h | 44 ++++++++++++++++--------------- 1 file changed, 23 insertions(+), 21 deletions(-) diff --git a/include/jemalloc/internal/edata.h b/include/jemalloc/internal/edata.h index da0774fbb2..ff14982cdf 100644 --- a/include/jemalloc/internal/edata.h +++ b/include/jemalloc/internal/edata.h @@ -79,6 +79,12 @@ struct edata_map_info_s { szind_t szind; }; +typedef struct edata_cmp_summary_s edata_cmp_summary_t; +struct edata_cmp_summary_s { + uint64_t sn; + uintptr_t addr; +}; + /* Extent (span of pages). Use accessor functions for e_* fields. */ typedef struct edata_s edata_t; ph_structs(edata_avail, edata_t); @@ -610,14 +616,6 @@ edata_binit(edata_t *edata, void *addr, size_t bsize, uint64_t sn) { edata_pai_set(edata, EXTENT_PAI_PAC); } -static inline int -edata_sn_comp(const edata_t *a, const edata_t *b) { - uint64_t a_sn = edata_sn_get(a); - uint64_t b_sn = edata_sn_get(b); - - return (a_sn > b_sn) - (a_sn < b_sn); -} - static inline int edata_esn_comp(const edata_t *a, const edata_t *b) { size_t a_esn = edata_esn_get(a); @@ -626,14 +624,6 @@ edata_esn_comp(const edata_t *a, const edata_t *b) { return (a_esn > b_esn) - (a_esn < b_esn); } -static inline int -edata_ad_comp(const edata_t *a, const edata_t *b) { - uintptr_t a_addr = (uintptr_t)edata_addr_get(a); - uintptr_t b_addr = (uintptr_t)edata_addr_get(b); - - return (a_addr > b_addr) - (a_addr < b_addr); -} - static inline int edata_ead_comp(const edata_t *a, const edata_t *b) { uintptr_t a_eaddr = (uintptr_t)a; @@ -642,19 +632,31 @@ edata_ead_comp(const edata_t *a, const edata_t *b) { return (a_eaddr > b_eaddr) - (a_eaddr < b_eaddr); } +static inline edata_cmp_summary_t +edata_cmp_summary_get(const edata_t *edata) { + return (edata_cmp_summary_t){edata_sn_get(edata), + (uintptr_t)edata_addr_get(edata)}; +} + static inline int -edata_snad_comp(const edata_t *a, const edata_t *b) { +edata_cmp_summary_comp(edata_cmp_summary_t a, edata_cmp_summary_t b) { int ret; - - ret = edata_sn_comp(a, b); + ret = (a.sn > b.sn) - (a.sn < b.sn); if (ret != 0) { return ret; } - - ret = edata_ad_comp(a, b); + ret = (a.addr > b.addr) - (a.addr < b.addr); return ret; } +static inline int +edata_snad_comp(const edata_t *a, const edata_t *b) { + edata_cmp_summary_t a_cmp = edata_cmp_summary_get(a); + edata_cmp_summary_t b_cmp = edata_cmp_summary_get(b); + + return edata_cmp_summary_comp(a_cmp, b_cmp); +} + static inline int edata_esnead_comp(const edata_t *a, const edata_t *b) { int ret;