struct ibv_pd *pd;
uint64_t guid;
int port_cnt;
+ int max_qpsize;
uint8_t max_initiator_depth;
uint8_t max_responder_resources;
};
}
cma_dev->port_cnt = attr.phys_port_cnt;
+ cma_dev->max_qpsize = attr.max_qp_wr;
cma_dev->max_initiator_depth = (uint8_t) attr.max_qp_init_rd_atom;
cma_dev->max_responder_resources = (uint8_t) attr.max_qp_rd_atom;
ib += (cma_dev->verbs->device->transport_type == IBV_TRANSPORT_IB);
rdma_destroy_id(id);
}
+
+int ucma_max_qpsize(struct rdma_cm_id *id)
+{
+ struct cma_id_private *id_priv;
+
+ id_priv = container_of(id, struct cma_id_private, id);
+ return id_priv->cma_dev->max_qpsize;
+}
}
#endif /* DEFINE_ATOMICS */
+int ucma_max_qpsize(struct rdma_cm_id *id);
int ucma_complete(struct rdma_cm_id *id);
static inline int ERR(int err)
{
static void rs_set_qp_size(struct rsocket *rs)
{
- struct ibv_device_attr attr;
uint16_t max_size;
- attr.max_qp_wr = RS_QP_SIZE;
- ibv_query_device(rs->cm_id->verbs, &attr);
- max_size = min(attr.max_qp_wr, RS_QP_MAX_SIZE);
+ max_size = min(ucma_max_qpsize(rs->cm_id), RS_QP_MAX_SIZE);
if (rs->sq_size > max_size)
rs->sq_size = max_size;