27 #define M0_TRACE_SUBSYSTEM M0_TRACE_SUBSYS_NET 42 M0_EXPORTED(m0_net_tm_tlist_is_empty);
81 m0_net_tm_tlist_is_empty(&tm->
ntm_q[
i]))));
140 m0_net_tm_tlist_fini(&tm->
ntm_q[
i]);
174 return M0_RC(-EINVAL);
183 m0_net_tm_tlist_init(&tm->
ntm_q[
i]);
192 rc =
dom->nd_xprt->nx_ops->xo_tm_init(tm);
231 m0_net_tm_tlist_is_empty(&tm->
ntm_q[
i])));
247 dom->nd_xprt->nx_ops->xo_tm_fini(tm);
280 rc = tm->ntm_dom->nd_xprt->nx_ops->xo_tm_start(tm,
addr);
298 M0_ENTRY(
"tm=%p abort=%d", (
void *)tm, !!abort);
305 oldstate = tm->ntm_state;
307 rc = tm->ntm_dom->nd_xprt->nx_ops->xo_tm_stop(tm, abort);
309 tm->ntm_state = oldstate;
464 uint32_t min_recv_queue_len)
473 M0_PRE(min_recv_size > 0);
518 #undef M0_TRACE_SUBSYSTEM M0_INTERNAL void m0_net__tm_cancel(struct m0_net_transfer_mc *tm)
const struct m0_net_xprt_ops * nx_ops
M0_INTERNAL void m0_list_link_fini(struct m0_list_link *link)
m0_bcount_t ntm_recv_queue_min_recv_size
M0_INTERNAL void m0_chan_wait(struct m0_clink *link)
uint32_t ntm_recv_queue_min_length
M0_INTERNAL void m0_mutex_unlock(struct m0_mutex *mutex)
M0_INTERNAL int m0_net_tm_start(struct m0_net_transfer_mc *tm, const char *addr)
void(* xo_bev_deliver_all)(struct m0_net_transfer_mc *tm)
M0_INTERNAL void m0_clink_init(struct m0_clink *link, m0_chan_cb_t cb)
M0_INTERNAL void m0_clink_del_lock(struct m0_clink *link)
M0_INTERNAL int m0_net__tm_stats_get(struct m0_net_transfer_mc *tm, enum m0_net_queue_type qtype, struct m0_net_qstats *qs, bool reset)
#define M0_LOG(level,...)
M0_INTERNAL bool m0_net__tm_invariant(const struct m0_net_transfer_mc *tm)
M0_INTERNAL bool m0_mutex_is_not_locked(const struct m0_mutex *mutex)
M0_INTERNAL int m0_net_tm_stats_get(struct m0_net_transfer_mc *tm, enum m0_net_queue_type qtype, struct m0_net_qstats *qs, bool reset)
struct m0_net_qstats ntm_qstats[M0_NET_QT_NR]
enum m0_net_tm_state ntm_state
M0_INTERNAL bool m0_net__tm_event_invariant(const struct m0_net_tm_event *ev)
void(* xo_bev_notify)(struct m0_net_transfer_mc *tm, struct m0_chan *chan)
M0_INTERNAL void m0_list_del(struct m0_list_link *old)
struct m0_net_domain * ntm_dom
M0_INTERNAL bool m0_net__ep_invariant(struct m0_net_end_point *ep, struct m0_net_transfer_mc *tm, bool under_tm_mutex)
M0_INTERNAL void m0_mutex_lock(struct m0_mutex *mutex)
M0_INTERNAL int m0_net_tm_pool_attach(struct m0_net_transfer_mc *tm, struct m0_net_buffer_pool *bufpool, const struct m0_net_buffer_callbacks *callbacks, m0_bcount_t min_recv_size, uint32_t max_recv_msgs, uint32_t min_recv_queue_len)
M0_INTERNAL void m0_net__tm_provision_recv_q(struct m0_net_transfer_mc *tm)
bool ntm_bev_auto_deliver
struct m0_tl ntm_end_points
const struct m0_net_buffer_callbacks * ntm_recv_pool_callbacks
M0_INTERNAL void m0_ref_put(struct m0_ref *ref)
enum m0_net_tm_state nte_next_state
M0_INTERNAL int m0_net_tm_init(struct m0_net_transfer_mc *tm, struct m0_net_domain *dom)
M0_INTERNAL bool m0_net__tm_state_is_valid(enum m0_net_tm_state ts)
uint32_t ntm_recv_queue_max_recv_msgs
M0_INTERNAL void m0_chan_init(struct m0_chan *chan, struct m0_mutex *ch_guard)
M0_INTERNAL void m0_net_tm_fini(struct m0_net_transfer_mc *tm)
M0_INTERNAL bool m0_mutex_is_locked(const struct m0_mutex *mutex)
const struct m0_net_xprt * nd_xprt
M0_INTERNAL bool m0_net__qtype_is_valid(enum m0_net_queue_type qt)
void(* ntc_event_cb)(const struct m0_net_tm_event *ev)
M0_INTERNAL void m0_net_tm_pool_length_set(struct m0_net_transfer_mc *tm, uint32_t len)
struct m0_atomic64 ref_cnt
static struct m0_stob_domain * dom
struct m0_atomic64 ntm_recv_queue_deficit
uint32_t ntm_callback_counter
struct m0_list_link ntm_dom_linkage
M0_INTERNAL void m0_net_tm_event_post(const struct m0_net_tm_event *ev)
M0_INTERNAL void m0_mutex_init(struct m0_mutex *mutex)
M0_TL_DEFINE(m0_net_tm, M0_INTERNAL, struct m0_net_buffer)
m0_net_buffer_cb_proc_t nbc_cb[M0_NET_QT_NR]
struct m0_tl ntm_q[M0_NET_QT_NR]
M0_INTERNAL void m0_net_tm_colour_set(struct m0_net_transfer_mc *tm, uint32_t colour)
M0_INTERNAL int m0_net_tm_stop(struct m0_net_transfer_mc *tm, bool abort)
M0_INTERNAL void m0_net_buffer_event_deliver_all(struct m0_net_transfer_mc *tm)
struct m0_net_end_point * nte_ep
int(* xo_tm_confine)(struct m0_net_transfer_mc *tm, const struct m0_bitmap *processors)
static struct m0_pool pool
static int64_t m0_atomic64_get(const struct m0_atomic64 *a)
#define m0_forall(var, nr,...)
struct m0_net_domain * nbp_ndom
void m0_clink_add_lock(struct m0_chan *chan, struct m0_clink *link)
M0_INTERNAL void m0_net_buffer_event_notify(struct m0_net_transfer_mc *tm, struct m0_chan *chan)
void(* xo_buf_del)(struct m0_net_buffer *nb)
M0_INTERNAL bool m0_net_buffer_event_pending(struct m0_net_transfer_mc *tm)
static struct m0_chan chan[RDWR_REQUEST_MAX]
#define M0_FI_ENABLED(tag)
M0_INTERNAL int m0_net_buffer_event_deliver_synchronously(struct m0_net_transfer_mc *tm)
M0_TL_DESCR_DEFINE(m0_net_tm, "tm list", M0_INTERNAL, struct m0_net_buffer, nb_tm_linkage, nb_magic, M0_NET_BUFFER_LINK_MAGIC, M0_NET_BUFFER_HEAD_MAGIC)
struct m0_net_end_point * ntm_ep
M0_INTERNAL uint32_t m0_net_tm_colour_get(struct m0_net_transfer_mc *tm)
M0_INTERNAL void m0_net__tm_post_callback(struct m0_net_transfer_mc *tm)
M0_INTERNAL int m0_net_tm_confine(struct m0_net_transfer_mc *tm, const struct m0_bitmap *processors)
M0_INTERNAL void m0_mutex_fini(struct m0_mutex *mutex)
bool(* xo_bev_pending)(struct m0_net_transfer_mc *tm)
enum m0_net_tm_ev_type nte_type
M0_INTERNAL bool m0_net__tm_ev_type_is_valid(enum m0_net_tm_ev_type et)
static void m0_net__tm_cleanup(struct m0_net_transfer_mc *tm)
M0_INTERNAL void m0_list_add_tail(struct m0_list *head, struct m0_list_link *new)
#define m0_tl_for(name, head, obj)
M0_INTERNAL void m0_chan_fini_lock(struct m0_chan *chan)
int(* xo_bev_deliver_sync)(struct m0_net_transfer_mc *tm)
M0_INTERNAL void m0_chan_broadcast(struct m0_chan *chan)
const struct m0_net_tm_callbacks * ntm_callbacks
static void m0_atomic64_set(struct m0_atomic64 *a, int64_t num)
struct m0_net_transfer_mc * nte_tm
struct m0_net_buffer_pool * ntm_recv_pool