From 8dbe6957da40b713a214d765a83cbe81d24e753e Mon Sep 17 00:00:00 2001 From: Richard Braun Date: Sat, 24 Feb 2018 05:04:07 +0100 Subject: lib: update from upstream --- lib/cbuf.h | 6 ++++++ lib/hash.h | 2 +- lib/list.h | 60 ++++++++++++++++++++++++++++++------------------------------ 3 files changed, 37 insertions(+), 31 deletions(-) diff --git a/lib/cbuf.h b/lib/cbuf.h index 83975db..df55f1a 100644 --- a/lib/cbuf.h +++ b/lib/cbuf.h @@ -70,6 +70,12 @@ cbuf_size(const struct cbuf *cbuf) return cbuf->end - cbuf->start; } +static inline size_t +cbuf_avail_size(const struct cbuf *cbuf) +{ + return cbuf_capacity(cbuf) - cbuf_size(cbuf); +} + static inline void cbuf_clear(struct cbuf *cbuf) { diff --git a/lib/hash.h b/lib/hash.h index d14f331..7dd52d0 100644 --- a/lib/hash.h +++ b/lib/hash.h @@ -117,7 +117,7 @@ hash_str(const char *str, unsigned int bits) hash = ((hash << 5) - hash) + c; } - return hash & ((1 << bits) - 1); + return hash & ((1UL << bits) - 1); } #endif /* HASH_H */ diff --git a/lib/list.h b/lib/list.h index 0df77dd..6a23acc 100644 --- a/lib/list.h +++ b/lib/list.h @@ -394,25 +394,25 @@ for (entry = list_last_entry(list, typeof(*entry), member), \ * These macros can be replaced by actual functions in an environment * that provides lockless synchronization such as RCU. */ -#define llsync_store_ptr(ptr, value) ((ptr) = (value)) -#define llsync_load_ptr(ptr) (ptr) +#define rcu_store_ptr(ptr, value) ((ptr) = (value)) +#define rcu_load_ptr(ptr) (ptr) /* * Return the first node of a list. */ static inline struct list * -list_llsync_first(const struct list *list) +list_rcu_first(const struct list *list) { - return llsync_load_ptr(list->next); + return rcu_load_ptr(list->next); } /* * Return the node next to the given node. */ static inline struct list * -list_llsync_next(const struct list *node) +list_rcu_next(const struct list *node) { - return llsync_load_ptr(node->next); + return rcu_load_ptr(node->next); } /* @@ -421,11 +421,11 @@ list_llsync_next(const struct list *node) * This function is private. */ static inline void -list_llsync_add(struct list *prev, struct list *next, struct list *node) +list_rcu_add(struct list *prev, struct list *next, struct list *node) { node->next = next; node->prev = prev; - llsync_store_ptr(prev->next, node); + rcu_store_ptr(prev->next, node); next->prev = node; } @@ -433,36 +433,36 @@ list_llsync_add(struct list *prev, struct list *next, struct list *node) * Insert a node at the head of a list. */ static inline void -list_llsync_insert_head(struct list *list, struct list *node) +list_rcu_insert_head(struct list *list, struct list *node) { - list_llsync_add(list, list->next, node); + list_rcu_add(list, list->next, node); } /* * Insert a node at the tail of a list. */ static inline void -list_llsync_insert_tail(struct list *list, struct list *node) +list_rcu_insert_tail(struct list *list, struct list *node) { - list_llsync_add(list->prev, list, node); + list_rcu_add(list->prev, list, node); } /* * Insert a node before another node. */ static inline void -list_llsync_insert_before(struct list *node, struct list *next) +list_rcu_insert_before(struct list *node, struct list *next) { - list_llsync_add(next->prev, next, node); + list_rcu_add(next->prev, next, node); } /* * Insert a node after another node. */ static inline void -list_llsync_insert_after(struct list *node, struct list *prev) +list_rcu_insert_after(struct list *node, struct list *prev) { - list_llsync_add(prev, prev->next, node); + list_rcu_add(prev, prev->next, node); } /* @@ -471,18 +471,18 @@ list_llsync_insert_after(struct list *node, struct list *prev) * After completion, the node is stale. */ static inline void -list_llsync_remove(struct list *node) +list_rcu_remove(struct list *node) { node->next->prev = node->prev; - llsync_store_ptr(node->prev->next, node->next); + rcu_store_ptr(node->prev->next, node->next); } /* * Macro that evaluates to the address of the structure containing the * given node based on the given type and member. */ -#define list_llsync_entry(node, type, member) \ - structof(llsync_load_ptr(node), type, member) +#define list_rcu_entry(node, type, member) \ + structof(rcu_load_ptr(node), type, member) /* * Get the first entry of a list. @@ -491,13 +491,13 @@ list_llsync_remove(struct list *node) * the node pointer can only be read once, preventing the combination * of lockless list_empty()/list_first_entry() variants. */ -#define list_llsync_first_entry(list, type, member) \ +#define list_rcu_first_entry(list, type, member) \ MACRO_BEGIN \ struct list *list___; \ struct list *first___; \ \ list___ = (list); \ - first___ = list_llsync_first(list___); \ + first___ = list_rcu_first(list___); \ list_end(list___, first___) \ ? NULL \ : list_entry(first___, type, member); \ @@ -510,29 +510,29 @@ MACRO_END * the node pointer can only be read once, preventing the combination * of lockless list_empty()/list_next_entry() variants. */ -#define list_llsync_next_entry(entry, member) \ - list_llsync_first_entry(&entry->member, typeof(*entry), member) +#define list_rcu_next_entry(entry, member) \ + list_rcu_first_entry(&entry->member, typeof(*entry), member) /* * Forge a loop to process all nodes of a list. * * The node must not be altered during the loop. */ -#define list_llsync_for_each(list, node) \ -for (node = list_llsync_first(list); \ +#define list_rcu_for_each(list, node) \ +for (node = list_rcu_first(list); \ !list_end(list, node); \ - node = list_llsync_next(node)) + node = list_rcu_next(node)) /* * Forge a loop to process all entries of a list. * * The entry node must not be altered during the loop. */ -#define list_llsync_for_each_entry(list, entry, member) \ -for (entry = list_llsync_entry(list_first(list), \ +#define list_rcu_for_each_entry(list, entry, member) \ +for (entry = list_rcu_entry(list_first(list), \ typeof(*entry), member); \ !list_end(list, &entry->member); \ - entry = list_llsync_entry(list_next(&entry->member), \ + entry = list_rcu_entry(list_next(&entry->member), \ typeof(*entry), member)) #endif /* LIST_H */ -- cgit v1.2.3