31 #define M0_TRACE_SUBSYSTEM M0_TRACE_SUBSYS_NET 62 m0_net_pool_tlist_length(&
pool->nbp_lru)) &&
72 m0_net_pool_tlink_is_in(nb)));
84 uint32_t threshold, uint32_t
seg_nr,
86 unsigned shift,
bool dont_dump)
94 pool->nbp_threshold = threshold;
95 pool->nbp_ndom = ndom;
100 pool->nbp_colours_nr = colours;
101 pool->nbp_align = shift;
102 pool->nbp_dont_dump = dont_dump;
112 m0_net_pool_tlist_init(&
pool->nbp_lru);
113 for (
i = 0;
i < colours; ++
i)
114 m0_net_tm_tlist_init(&
pool->nbp_colours[
i]);
144 m0_net_pool_tlink_del_fini(nb);
145 m0_net_tm_tlist_remove(nb);
146 m0_net_tm_tlink_fini(nb);
161 if (
pool->nbp_colours ==
NULL &&
pool->nbp_colours_nr != 0)
178 m0_net_pool_tlist_fini(&
pool->nbp_lru);
179 for (
i = 0;
i <
pool->nbp_colours_nr;
i++)
180 m0_net_tm_tlist_fini(&
pool->nbp_colours[
i]);
223 if (
pool->nbp_free <= 0)
226 !m0_net_tm_tlist_is_empty(&
pool->nbp_colours[colour]))
227 nb = m0_net_tm_tlist_head(&
pool->nbp_colours[colour]);
229 nb = m0_net_pool_tlist_head(&
pool->nbp_lru);
231 m0_net_pool_tlist_del(nb);
232 m0_net_tm_tlist_remove(nb);
234 if (
pool->nbp_free <
pool->nbp_threshold)
235 pool->nbp_ops->nbpo_below_threshold(
pool);
260 m0_net_tm_tlist_add(&
pool->nbp_colours[colour],
buf);
262 m0_net_pool_tlist_add_tail(&
pool->nbp_lru,
buf);
264 if (
pool->nbp_free == 1)
265 pool->nbp_ops->nbpo_not_empty(
pool);
281 pool->nbp_seg_size,
pool->nbp_align);
284 if(
pool->nbp_align != 0 &&
pool->nbp_dont_dump) {
296 m0_net_pool_tlink_init(nb);
297 m0_net_tm_tlink_init(nb);
316 if (
pool->nbp_free <=
pool->nbp_threshold)
319 nb = m0_net_pool_tlist_head(&
pool->nbp_lru);
325 #undef M0_TRACE_SUBSYSTEM static m0_bcount_t seg_size
M0_INTERNAL void m0_net_buffer_pool_fini(struct m0_net_buffer_pool *pool)
#define M0_ALLOC_ARR(arr, nr)
M0_INTERNAL int m0_bufvec_alloc_aligned_packed(struct m0_bufvec *bufvec, uint32_t num_segs, m0_bcount_t seg_size, unsigned shift)
M0_INTERNAL void m0_mutex_unlock(struct m0_mutex *mutex)
struct m0_net_buffer_pool * nb_pool
struct m0_bufvec nb_buffer
M0_INTERNAL int m0_net_buffer_register(struct m0_net_buffer *buf, struct m0_net_domain *dom)
M0_TL_DEFINE(m0_net_pool, M0_INTERNAL, struct m0_net_buffer)
#define M0_LOG(level,...)
M0_INTERNAL bool m0_mutex_is_not_locked(const struct m0_mutex *mutex)
M0_INTERNAL struct m0_net_buffer * m0_net_buffer_pool_get(struct m0_net_buffer_pool *pool, uint32_t colour)
M0_INTERNAL void m0_net_buffer_pool_unlock(struct m0_net_buffer_pool *pool)
M0_INTERNAL void m0_mutex_lock(struct m0_mutex *mutex)
static bool net_buffer_pool_grow(struct m0_net_buffer_pool *pool)
return M0_ERR(-EOPNOTSUPP)
M0_INTERNAL bool m0_net_buffer_pool_is_locked(const struct m0_net_buffer_pool *pool)
M0_INTERNAL bool m0_net_buffer_pool_invariant(const struct m0_net_buffer_pool *pool)
M0_INTERNAL bool m0_net_buffer_pool_prune(struct m0_net_buffer_pool *pool)
M0_INTERNAL bool m0_mutex_is_locked(const struct m0_mutex *mutex)
M0_INTERNAL bool m0_net_buffer_pool_is_not_locked(const struct m0_net_buffer_pool *pool)
static void buffer_remove(struct m0_net_buffer_pool *pool, struct m0_net_buffer *nb)
M0_INTERNAL void m0_net_buffer_pool_lock(struct m0_net_buffer_pool *pool)
M0_INTERNAL void m0_mutex_init(struct m0_mutex *mutex)
M0_TL_DESCR_DEFINE(m0_net_pool, "net_buffer_pool", M0_INTERNAL, struct m0_net_buffer, nb_lru, nb_magic, M0_NET_BUFFER_LINK_MAGIC, M0_NET_BUFFER_HEAD_MAGIC)
static bool pool_lru_buffer_check(const struct m0_net_buffer_pool *pool)
static struct m0_pool pool
#define m0_forall(var, nr,...)
M0_INTERNAL void m0_net_buffer_deregister(struct m0_net_buffer *buf, struct m0_net_domain *dom)
#define M0_ALLOC_PTR(ptr)
M0_INTERNAL int m0__bufvec_dont_dump(struct m0_bufvec *bufvec)
M0_INTERNAL int m0_net_buffer_pool_provision(struct m0_net_buffer_pool *pool, uint32_t buf_nr)
M0_INTERNAL void m0_mutex_fini(struct m0_mutex *mutex)
M0_INTERNAL int32_t m0_net_domain_get_max_buffer_segments(struct m0_net_domain *dom)
M0_INTERNAL void m0_net_buffer_pool_put(struct m0_net_buffer_pool *pool, struct m0_net_buffer *buf, uint32_t colour)
M0_INTERNAL void m0_bufvec_free_aligned_packed(struct m0_bufvec *bufvec, unsigned shift)
static bool pool_colour_check(const struct m0_net_buffer_pool *pool)
#define m0_tl_for(name, head, obj)
static bool colour_is_valid(const struct m0_net_buffer_pool *pool, uint32_t colour)
M0_INTERNAL int m0_net_buffer_pool_init(struct m0_net_buffer_pool *pool, struct m0_net_domain *ndom, uint32_t threshold, uint32_t seg_nr, m0_bcount_t seg_size, uint32_t colours, unsigned shift, bool dont_dump)
struct m0_net_end_point * nb_ep
#define m0_tl_forall(name, var, head,...)