30 #define M0_TRACE_SUBSYSTEM M0_TRACE_SUBSYS_BE 50 #define BE_QUEUE_ITEM2BUF(bq, bqi) \ 51 M0_BUF_INIT((bq)->bq_cfg.bqc_item_length, &(bqi)->bqi_data) 100 "bqc_producers_nr_max=%" PRIu64 " bqc_consumers_nr_max=%"PRIu64,
144 bqq_tlist_init(&bq->
bq_q);
166 bqq_tlist_fini(&bq->
bq_q);
227 bqq_tlist_move_tail(&bq->
bq_q, bqi);
240 bqi = bqq_tlist_head(&bq->
bq_q);
254 bqi = bqq_tlist_head(&bq->
bq_q);
273 "Too many producers: bqc_producers_nr_max=%"PRIu64,
277 bqop_tlist_move_tail(&bq->
bq_op_put, bwo);
296 return !bqop_tlist_is_empty(&bq->
bq_op_put);
311 "Too many consumers: bqc_consumers_nr_max=%"PRIu64,
316 bqop_tlist_move_tail(&bq->
bq_op_get, bwo);
341 return !bqop_tlist_is_empty(&bq->
bq_op_get);
440 #undef BE_QUEUE_ITEM2BUF 442 #undef M0_TRACE_SUBSYSTEM uint64_t bqc_consumers_nr_max
M0_INTERNAL void m0_be_queue_unlock(struct m0_be_queue *bq)
#define M0_ALLOC_ARR(arr, nr)
M0_INTERNAL void m0_mutex_unlock(struct m0_mutex *mutex)
static bool be_queue_op_get_is_waiting(struct m0_be_queue *bq)
#define M0_LOG(level,...)
static void be_queue_op_put(struct m0_be_queue *bq, struct m0_be_op *op, struct be_queue_item *bqi)
static uint64_t be_queue_items_nr(struct m0_be_queue *bq)
M0_INTERNAL void m0_be_queue_put(struct m0_be_queue *bq, struct m0_be_op *op, const struct m0_buf *data)
static bool be_queue_op_put_is_waiting(struct m0_be_queue *bq)
M0_INTERNAL void m0_mutex_lock(struct m0_mutex *mutex)
static bool be_queue_invariant(struct m0_be_queue *bq)
M0_INTERNAL void m0_buf_memcpy(struct m0_buf *dst, const struct m0_buf *src)
M0_INTERNAL int m0_be_queue_init(struct m0_be_queue *bq, struct m0_be_queue_cfg *cfg)
M0_TL_DEFINE(bqq, static, struct be_queue_item)
return M0_ERR(-EOPNOTSUPP)
static void be_queue_op_put_done(struct m0_be_queue *bq)
#define BE_QUEUE_ITEM2BUF(bq, bqi)
static void be_queue_op_get_done(struct m0_be_queue *bq, bool success)
static struct be_queue_item * be_queue_q_put(struct m0_be_queue *bq, const struct m0_buf *data)
M0_INTERNAL void m0_be_queue_fini(struct m0_be_queue *bq)
M0_INTERNAL bool m0_mutex_is_locked(const struct m0_mutex *mutex)
M0_INTERNAL void m0_be_queue_get(struct m0_be_queue *bq, struct m0_be_op *op, struct m0_buf *data, bool *successful)
M0_INTERNAL bool m0_be_queue_peek(struct m0_be_queue *bq, struct m0_buf *data)
struct be_queue_wait_op * bq_ops_put
struct m0_tl bq_op_put_unused
M0_INTERNAL void m0_be_queue_lock(struct m0_be_queue *bq)
static struct be_queue_item * be_queue_qitem(struct m0_be_queue *bq, uint64_t index)
M0_INTERNAL void m0_mutex_init(struct m0_mutex *mutex)
struct m0_be_queue_cfg bq_cfg
M0_INTERNAL void m0_be_op_done(struct m0_be_op *op)
struct be_queue_wait_op * bq_ops_get
static bool be_queue_is_full(struct m0_be_queue *bq)
M0_INTERNAL void m0_be_op_active(struct m0_be_op *op)
m0_bcount_t bqc_item_length
static void be_queue_q_peek(struct m0_be_queue *bq, struct m0_buf *data)
M0_INTERNAL void m0_mutex_fini(struct m0_mutex *mutex)
static void be_queue_op_get(struct m0_be_queue *bq, struct m0_be_op *op, struct m0_buf *data, bool *successful)
static bool be_queue_is_empty(struct m0_be_queue *bq)
#define M0_ASSERT_INFO(cond, fmt,...)
#define M0_IS_8ALIGNED(val)
uint64_t bqc_producers_nr_max
M0_INTERNAL void m0_be_queue_end(struct m0_be_queue *bq)
struct m0_tl bq_op_get_unused
#define m0_tl_for(name, head, obj)
M0_TL_DESCR_DEFINE(bqq, "m0_be_queue::bq_q*[]", static, struct be_queue_item, bqi_link, bqi_magic, M0_BE_QUEUE_Q_MAGIC, M0_BE_QUEUE_Q_HEAD_MAGIC)
static uint64_t bq_queue_items_max(struct m0_be_queue *bq)
static void be_queue_q_get(struct m0_be_queue *bq, struct m0_buf *data, bool *successful)
struct be_queue_item * bbo_bqi