Lines Matching refs:qp
351 int mlx4_bind_mw(struct ibv_qp *qp, struct ibv_mw *mw, in mlx4_bind_mw() argument
369 ret = mlx4_post_send(qp, &wr, &bad_wr); in mlx4_bind_mw()
758 struct mlx4_qp *qp) in mlx4_cmd_create_qp_ex() argument
774 ret = ibv_cmd_create_qp_ex2(context, &qp->verbs_qp, in mlx4_cmd_create_qp_ex()
775 sizeof(qp->verbs_qp), attr, in mlx4_cmd_create_qp_ex()
798 struct mlx4_qp *qp; in mlx4_create_qp_ex() local
821 qp = calloc(1, sizeof *qp); in mlx4_create_qp_ex()
822 if (!qp) in mlx4_create_qp_ex()
826 attr->cap.max_send_wr = qp->sq.wqe_cnt = 0; in mlx4_create_qp_ex()
828 mlx4_calc_sq_wqe_size(&attr->cap, attr->qp_type, qp); in mlx4_create_qp_ex()
833 qp->sq_spare_wqes = (2048 >> qp->sq.wqe_shift) + 1; in mlx4_create_qp_ex()
834 qp->sq.wqe_cnt = align_queue_size(attr->cap.max_send_wr + qp->sq_spare_wqes); in mlx4_create_qp_ex()
839 attr->cap.max_recv_wr = qp->rq.wqe_cnt = attr->cap.max_recv_sge = 0; in mlx4_create_qp_ex()
841 qp->rq.wqe_cnt = align_queue_size(attr->cap.max_recv_wr); in mlx4_create_qp_ex()
848 if (mlx4_alloc_qp_buf(context, &attr->cap, attr->qp_type, qp)) in mlx4_create_qp_ex()
851 mlx4_init_qp_indices(qp); in mlx4_create_qp_ex()
853 if (pthread_spin_init(&qp->sq.lock, PTHREAD_PROCESS_PRIVATE)) in mlx4_create_qp_ex()
855 if (pthread_spin_init(&qp->rq.lock, PTHREAD_PROCESS_PRIVATE)) in mlx4_create_qp_ex()
859 qp->db = mlx4_alloc_db(to_mctx(context), MLX4_DB_TYPE_RQ); in mlx4_create_qp_ex()
860 if (!qp->db) in mlx4_create_qp_ex()
863 *qp->db = 0; in mlx4_create_qp_ex()
864 cmd.db_addr = (uintptr_t) qp->db; in mlx4_create_qp_ex()
869 cmd.buf_addr = (uintptr_t) qp->buf.buf; in mlx4_create_qp_ex()
870 cmd.log_sq_stride = qp->sq.wqe_shift; in mlx4_create_qp_ex()
872 qp->sq.wqe_cnt > 1 << cmd.log_sq_bb_count; in mlx4_create_qp_ex()
880 ret = mlx4_cmd_create_qp_ex(context, attr, &cmd, qp); in mlx4_create_qp_ex()
882 ret = ibv_cmd_create_qp_ex(context, &qp->verbs_qp, in mlx4_create_qp_ex()
883 sizeof(qp->verbs_qp), attr, in mlx4_create_qp_ex()
889 if (qp->sq.wqe_cnt || qp->rq.wqe_cnt) { in mlx4_create_qp_ex()
890 ret = mlx4_store_qp(to_mctx(context), qp->verbs_qp.qp.qp_num, qp); in mlx4_create_qp_ex()
896 qp->rq.wqe_cnt = qp->rq.max_post = attr->cap.max_recv_wr; in mlx4_create_qp_ex()
897 qp->rq.max_gs = attr->cap.max_recv_sge; in mlx4_create_qp_ex()
899 mlx4_set_sq_sizes(qp, &attr->cap, attr->qp_type); in mlx4_create_qp_ex()
901 qp->doorbell_qpn = htobe32(qp->verbs_qp.qp.qp_num << 8); in mlx4_create_qp_ex()
903 qp->sq_signal_bits = htobe32(MLX4_WQE_CTRL_CQ_UPDATE); in mlx4_create_qp_ex()
905 qp->sq_signal_bits = 0; in mlx4_create_qp_ex()
907 return &qp->verbs_qp.qp; in mlx4_create_qp_ex()
910 ibv_cmd_destroy_qp(&qp->verbs_qp.qp); in mlx4_create_qp_ex()
915 mlx4_free_db(to_mctx(context), MLX4_DB_TYPE_RQ, qp->db); in mlx4_create_qp_ex()
917 pthread_spin_destroy(&qp->rq.lock); in mlx4_create_qp_ex()
919 pthread_spin_destroy(&qp->sq.lock); in mlx4_create_qp_ex()
921 free(qp->sq.wrid); in mlx4_create_qp_ex()
922 if (qp->rq.wqe_cnt) in mlx4_create_qp_ex()
923 free(qp->rq.wrid); in mlx4_create_qp_ex()
924 mlx4_free_buf(&qp->buf); in mlx4_create_qp_ex()
927 free(qp); in mlx4_create_qp_ex()
935 struct ibv_qp *qp; in mlx4_create_qp() local
940 qp = mlx4_create_qp_ex(pd->context, &attr_ex); in mlx4_create_qp()
941 if (qp) in mlx4_create_qp()
943 return qp; in mlx4_create_qp()
950 struct mlx4_qp *qp; in mlx4_open_qp() local
953 qp = calloc(1, sizeof *qp); in mlx4_open_qp()
954 if (!qp) in mlx4_open_qp()
957 ret = ibv_cmd_open_qp(context, &qp->verbs_qp, sizeof(qp->verbs_qp), attr, in mlx4_open_qp()
962 return &qp->verbs_qp.qp; in mlx4_open_qp()
965 free(qp); in mlx4_open_qp()
974 struct mlx4_qp *qp = to_mqp(ibqp); in mlx4_query_qp() local
981 init_attr->cap.max_send_wr = qp->sq.max_post; in mlx4_query_qp()
982 init_attr->cap.max_send_sge = qp->sq.max_gs; in mlx4_query_qp()
983 init_attr->cap.max_inline_data = qp->max_inline_data; in mlx4_query_qp()
990 int mlx4_modify_qp(struct ibv_qp *qp, struct ibv_qp_attr *attr, in mlx4_modify_qp() argument
995 struct mlx4_qp *mqp = to_mqp(qp); in mlx4_modify_qp()
1001 ret = ibv_query_port(qp->context, attr->port_num, in mlx4_modify_qp()
1007 ret = ibv_query_device(qp->context, &device_attr); in mlx4_modify_qp()
1011 switch(qp->qp_type) { in mlx4_modify_qp()
1030 if (qp->state == IBV_QPS_RESET && in mlx4_modify_qp()
1033 mlx4_qp_init_sq_ownership(to_mqp(qp)); in mlx4_modify_qp()
1036 ret = ibv_cmd_modify_qp(qp, attr, attr_mask, &cmd, sizeof cmd); in mlx4_modify_qp()
1041 if (qp->recv_cq) in mlx4_modify_qp()
1042 mlx4_cq_clean(to_mcq(qp->recv_cq), qp->qp_num, in mlx4_modify_qp()
1043 qp->srq ? to_msrq(qp->srq) : NULL); in mlx4_modify_qp()
1044 if (qp->send_cq && qp->send_cq != qp->recv_cq) in mlx4_modify_qp()
1045 mlx4_cq_clean(to_mcq(qp->send_cq), qp->qp_num, NULL); in mlx4_modify_qp()
1047 mlx4_init_qp_indices(to_mqp(qp)); in mlx4_modify_qp()
1048 if (to_mqp(qp)->rq.wqe_cnt) in mlx4_modify_qp()
1049 *to_mqp(qp)->db = 0; in mlx4_modify_qp()
1055 static void mlx4_lock_cqs(struct ibv_qp *qp) in mlx4_lock_cqs() argument
1057 struct mlx4_cq *send_cq = to_mcq(qp->send_cq); in mlx4_lock_cqs()
1058 struct mlx4_cq *recv_cq = to_mcq(qp->recv_cq); in mlx4_lock_cqs()
1060 if (!qp->send_cq || !qp->recv_cq) { in mlx4_lock_cqs()
1061 if (qp->send_cq) in mlx4_lock_cqs()
1063 else if (qp->recv_cq) in mlx4_lock_cqs()
1076 static void mlx4_unlock_cqs(struct ibv_qp *qp) in mlx4_unlock_cqs() argument
1078 struct mlx4_cq *send_cq = to_mcq(qp->send_cq); in mlx4_unlock_cqs()
1079 struct mlx4_cq *recv_cq = to_mcq(qp->recv_cq); in mlx4_unlock_cqs()
1082 if (!qp->send_cq || !qp->recv_cq) { in mlx4_unlock_cqs()
1083 if (qp->send_cq) in mlx4_unlock_cqs()
1085 else if (qp->recv_cq) in mlx4_unlock_cqs()
1100 struct mlx4_qp *qp = to_mqp(ibqp); in mlx4_destroy_qp() local
1118 if (qp->sq.wqe_cnt || qp->rq.wqe_cnt) in mlx4_destroy_qp()
1124 pthread_spin_destroy(&qp->rq.lock); in mlx4_destroy_qp()
1125 pthread_spin_destroy(&qp->sq.lock); in mlx4_destroy_qp()
1127 if (qp->rq.wqe_cnt) { in mlx4_destroy_qp()
1128 mlx4_free_db(to_mctx(ibqp->context), MLX4_DB_TYPE_RQ, qp->db); in mlx4_destroy_qp()
1129 free(qp->rq.wrid); in mlx4_destroy_qp()
1131 if (qp->sq.wqe_cnt) in mlx4_destroy_qp()
1132 free(qp->sq.wrid); in mlx4_destroy_qp()
1133 mlx4_free_buf(&qp->buf); in mlx4_destroy_qp()
1134 free(qp); in mlx4_destroy_qp()