<snip>
+
+/*
+ * siw_create_qp()
+ *
+ * Create QP of requested size on given device.
+ *
+ * @ofa_pd: OFA PD contained in siw PD
+ * @attrs: Initial QP attributes.
+ * @udata: used to provide QP ID, SQ and RQ size back to user.
+ */
+
+struct ib_qp *siw_create_qp(struct ib_pd *ofa_pd,
+ struct ib_qp_init_attr *attrs,
+ struct ib_udata *udata)
+{
+ struct siw_qp *qp = NULL;
+ struct siw_pd *pd = siw_pd_ofa2siw(ofa_pd);
+ struct ib_device *ofa_dev = ofa_pd->device;
+ struct siw_dev *dev = siw_dev_ofa2siw(ofa_dev);
+ struct siw_cq *scq = NULL, *rcq = NULL;
+ struct siw_iwarp_tx *c_tx;
+ struct siw_iwarp_rx *c_rx;
+ struct siw_uresp_create_qp uresp;
+
+ unsigned long flags;
+ int kernel_verbs = ofa_pd->uobject ? 0 : 1;
+ int rv = 0;
+
+ dprint(DBG_OBJ|DBG_CM, ": new QP on device %s\n",
+ ofa_dev->name);
+
+ if (atomic_inc_return(&dev->num_qp)> SIW_MAX_QP) {
+ dprint(DBG_ON, ": Out of QP's\n");
+ rv = -ENOMEM;
+ goto err_out;
+ }
+ if (attrs->qp_type != IB_QPT_RC) {
+ dprint(DBG_ON, ": Only RC QP's supported\n");
+ rv = -EINVAL;
+ goto err_out;
+ }
+ if ((attrs->cap.max_send_wr> SIW_MAX_QP_WR) ||
+ (attrs->cap.max_recv_wr> SIW_MAX_QP_WR) ||
+ (attrs->cap.max_send_sge> SIW_MAX_SGE) ||
+ (attrs->cap.max_recv_sge> SIW_MAX_SGE)) {
+ dprint(DBG_ON, ": QP Size!\n");
+ rv = -EINVAL;
+ goto err_out;
+ }
+ if (attrs->cap.max_inline_data> SIW_MAX_INLINE ||
+ (kernel_verbs&& attrs->cap.max_inline_data != 0)) {
+ dprint(DBG_ON, ": Max Inline Send %d> %d!\n",
+ attrs->cap.max_inline_data, SIW_MAX_INLINE);
+ rv = -EINVAL;
+ goto err_out;
Why no inline support for kernel users?
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html