Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b846f25a authored by Eli Cohen's avatar Eli Cohen Committed by Roland Dreier
Browse files

IB/core: Add creation flags to struct ib_qp_init_attr



Add a create_flags member to struct ib_qp_init_attr that will allow a
kernel verbs consumer to create a pass special flags when creating a QP.
Add a flag value for telling low-level drivers that a QP will be used
for IPoIB UD LSO.  The create_flags member will also be useful for XRC
and ehca low-latency QP support.

Since no create_flags handling is implemented yet, add code to all
low-level drivers to return -EINVAL if create_flags is non-zero.

Signed-off-by: default avatarEli Cohen <eli@mellanox.co.il>
Signed-off-by: default avatarRoland Dreier <rolandd@cisco.com>
parent d84e0b28
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -1065,6 +1065,7 @@ ssize_t ib_uverbs_create_qp(struct ib_uverbs_file *file,
	attr.srq           = srq;
	attr.sq_sig_type   = cmd.sq_sig_all ? IB_SIGNAL_ALL_WR : IB_SIGNAL_REQ_WR;
	attr.qp_type       = cmd.qp_type;
	attr.create_flags  = 0;

	attr.cap.max_send_wr     = cmd.max_send_wr;
	attr.cap.max_recv_wr     = cmd.max_recv_wr;
+3 −0
Original line number Diff line number Diff line
@@ -245,6 +245,9 @@ static struct ib_qp *c2_create_qp(struct ib_pd *pd,

	pr_debug("%s:%u\n", __func__, __LINE__);

	if (init_attr->create_flags)
		return ERR_PTR(-EINVAL);

	switch (init_attr->qp_type) {
	case IB_QPT_RC:
		qp = kzalloc(sizeof(*qp), GFP_KERNEL);
+3 −0
Original line number Diff line number Diff line
@@ -421,6 +421,9 @@ static struct ehca_qp *internal_create_qp(
	u32 swqe_size = 0, rwqe_size = 0, ib_qp_num;
	unsigned long flags;

	if (init_attr->create_flags)
		return ERR_PTR(-EINVAL);

	memset(&parms, 0, sizeof(parms));
	qp_type = init_attr->qp_type;

+5 −0
Original line number Diff line number Diff line
@@ -747,6 +747,11 @@ struct ib_qp *ipath_create_qp(struct ib_pd *ibpd,
	size_t sz;
	struct ib_qp *ret;

	if (init_attr->create_flags) {
		ret = ERR_PTR(-EINVAL);
		goto bail;
	}

	if (init_attr->cap.max_send_sge > ib_ipath_max_sges ||
	    init_attr->cap.max_send_wr > ib_ipath_max_qp_wrs) {
		ret = ERR_PTR(-EINVAL);
+3 −0
Original line number Diff line number Diff line
@@ -673,6 +673,9 @@ struct ib_qp *mlx4_ib_create_qp(struct ib_pd *pd,
	struct mlx4_ib_qp *qp;
	int err;

	if (init_attr->create_flags)
		return ERR_PTR(-EINVAL);

	switch (init_attr->qp_type) {
	case IB_QPT_RC:
	case IB_QPT_UC:
Loading