/** * Copyright (C) Mellanox Technologies Ltd. 2001-2015. ALL RIGHTS RESERVED. * * See file LICENSE for terms. */ #ifndef UCT_IB_LOG_H #define UCT_IB_LOG_H #include "ib_verbs.h" #include "ib_iface.h" #include #include #include enum { UCT_IB_OPCODE_FLAG_HAS_RADDR = UCS_BIT(0), UCT_IB_OPCODE_FLAG_HAS_ATOMIC = UCS_BIT(1), UCT_IB_OPCODE_FLAG_HAS_EXT_ATOMIC = UCS_BIT(2) }; typedef struct uct_ib_opcode { const char *name; uint32_t flags; } uct_ib_opcode_t; const char *uct_ib_qp_type_str(int qp_type); void uct_ib_log_dump_opcode(uct_ib_opcode_t *op, int signal, int fence, int se, char *buf, size_t max); void uct_ib_log_dump_sg_list(uct_ib_iface_t *iface, uct_am_trace_type_t type, struct ibv_sge *sg_list, int num_sge, uint64_t inline_bitmap, uct_log_data_dump_func_t data_dump, char *buf, size_t max); void uct_ib_log_dump_remote_addr(uint64_t remote_addr, uint32_t rkey, char *buf, size_t max); void uct_ib_log_dump_atomic_fadd(uint64_t add, char *buf, size_t max); void uct_ib_log_dump_atomic_cswap(uint64_t compare, uint64_t swap, char *buf, size_t max); void uct_ib_log_dump_atomic_masked_fadd(int argsize, uint64_t add, uint64_t boundary, char *buf, size_t max); void uct_ib_log_dump_atomic_masked_cswap(int argsize, uint64_t compare, uint64_t compare_mask, uint64_t swap, uint64_t swap_mask, char *buf, size_t max); void uct_ib_log_dump_recv_completion(uct_ib_iface_t *iface, uint32_t local_qp, uint32_t sender_qp, uint16_t sender_lid, void *data, size_t length, uct_log_data_dump_func_t data_dump, char *buf, size_t max); void __uct_ib_log_post_send(const char *file, int line, const char *function, uct_ib_iface_t *iface, struct ibv_qp *qp, struct ibv_send_wr *wr, int max_sge, uct_log_data_dump_func_t packet_dump_cb); void __uct_ib_log_recv_completion(const char *file, int line, const char *function, uct_ib_iface_t *iface, uint32_t l_qp, uint32_t r_qp, uint16_t slid, void *data, size_t length, uct_log_data_dump_func_t packet_dump_cb); #if HAVE_DECL_IBV_EXP_POST_SEND void __uct_ib_log_exp_post_send(const char *file, int line, const char *function, uct_ib_iface_t *iface, struct ibv_qp *qp, struct ibv_exp_send_wr *wr, int max_sge, uct_log_data_dump_func_t packet_dump_cb); #endif #define uct_ib_log_post_send(_iface, _qp, _wr, _max_sge, _dump_cb) \ if (ucs_log_is_enabled(UCS_LOG_LEVEL_TRACE_DATA)) { \ __uct_ib_log_post_send(__FILE__, __LINE__, __FUNCTION__, \ _iface, _qp, _wr, _max_sge, _dump_cb); \ } /* Suitable for both: regular and exp wcs */ #define uct_ib_log_recv_completion(_iface, _wc, _data, _length, _dump_cb, ...) \ if (ucs_log_is_enabled(UCS_LOG_LEVEL_TRACE_DATA)) { \ __uct_ib_log_recv_completion(__FILE__, __LINE__, __FUNCTION__, \ _iface, (_wc)->qp_num, (_wc)->src_qp, (_wc)->slid, \ _data, _length, _dump_cb, ## __VA_ARGS__); \ } #define uct_ib_log_exp_post_send(_iface, _qp, _wr, _max_sge,_dump_cb) \ if (ucs_log_is_enabled(UCS_LOG_LEVEL_TRACE_DATA)) { \ __uct_ib_log_exp_post_send(__FILE__, __LINE__, __FUNCTION__, \ _iface, _qp, _wr, _max_sge, _dump_cb); \ } #endif