Skip to content

Commit

Permalink
Edata: Pull out comparison fields into a summary.
Browse files Browse the repository at this point in the history
For now, this is a no-op; eventually, it will allow some caching in the eset.
  • Loading branch information
davidtgoldblatt committed Aug 2, 2021
1 parent 0170dd1 commit dc0a4b8
Showing 1 changed file with 23 additions and 21 deletions.
44 changes: 23 additions & 21 deletions include/jemalloc/internal/edata.h
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down Expand Up @@ -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);
Expand All @@ -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;
Expand All @@ -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;
Expand Down

0 comments on commit dc0a4b8

Please sign in to comment.