From a365b74a5ed0cc020b04b5ba877e73a84d46ffb7 Mon Sep 17 00:00:00 2001 From: Sai Sunku Date: Mon, 9 Oct 2023 19:02:37 +0000 Subject: [PATCH] ofi_list: Add dlist_size Signed-off-by: Sai Sunku --- include/ofi_list.h | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/include/ofi_list.h b/include/ofi_list.h index 05e032b1a29..206dce3d27d 100644 --- a/include/ofi_list.h +++ b/include/ofi_list.h @@ -57,15 +57,23 @@ enum ofi_list_end { struct dlist_entry { struct dlist_entry *next; struct dlist_entry *prev; + OFI_DBG_VAR(ssize_t, size) + OFI_DBG_VAR(struct dlist_entry *, list) }; +#if ENABLE_DEBUG +#define DLIST_INIT(addr) { addr, addr, 0, addr } +#else #define DLIST_INIT(addr) { addr, addr } +#endif #define DEFINE_LIST(name) struct dlist_entry name = DLIST_INIT(&name) static inline void dlist_init(struct dlist_entry *head) { head->next = head; head->prev = head; + OFI_DBG_SET(head->size, 0); + OFI_DBG_SET(head->list, head); } static inline int dlist_empty(struct dlist_entry *head) @@ -80,6 +88,8 @@ dlist_insert_after(struct dlist_entry *item, struct dlist_entry *head) item->prev = head; head->next->prev = item; head->next = item; + OFI_DBG_SET(item->list, head->list); + OFI_DBG_ADD(item->list->size, 1); } static inline void @@ -95,6 +105,8 @@ static inline void dlist_remove(struct dlist_entry *item) { item->prev->next = item->next; item->next->prev = item->prev; + OFI_DBG_ADD(item->list->size, -1); + OFI_DBG_SET(item->list, NULL); } static inline void dlist_remove_init(struct dlist_entry *item) @@ -156,6 +168,18 @@ static inline void dlist_remove_init(struct dlist_entry *item) typedef int dlist_func_t(struct dlist_entry *item, const void *arg); +#if ENABLE_DEBUG +static inline ssize_t dlist_size(struct dlist_entry *item) +{ + return item->list->size; +} +#else +static inline ssize_t dlist_size(struct dlist_entry *item) +{ + return -1; +} +#endif + static inline struct dlist_entry * dlist_find_first_match(struct dlist_entry *head, dlist_func_t *match, const void *arg) @@ -219,6 +243,15 @@ static inline void dlist_splice_head(struct dlist_entry *head, head->next = to_splice->next; head->next->prev = head; + OFI_DBG_ADD(head->size, to_splice->size); +#if ENABLE_DEBUG + struct dlist_entry *item; + dlist_foreach(to_splice, item) { + item->list = head->list; + item->size = head->size; + } +#endif + /* set list to empty */ dlist_init(to_splice); }