Skip to content

Commit

Permalink
IB/core: Add creation flags to struct ib_qp_init_attr
Browse files Browse the repository at this point in the history
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: Eli Cohen <[email protected]>
Signed-off-by: Roland Dreier <[email protected]>
  • Loading branch information
Eli Cohen authored and Roland Dreier committed Apr 17, 2008
1 parent d84e0b2 commit b846f25
Show file tree
Hide file tree
Showing 8 changed files with 26 additions and 0 deletions.
1 change: 1 addition & 0 deletions drivers/infiniband/core/uverbs_cmd.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
3 changes: 3 additions & 0 deletions drivers/infiniband/hw/amso1100/c2_provider.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
3 changes: 3 additions & 0 deletions drivers/infiniband/hw/ehca/ehca_qp.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down
5 changes: 5 additions & 0 deletions drivers/infiniband/hw/ipath/ipath_qp.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
3 changes: 3 additions & 0 deletions drivers/infiniband/hw/mlx4/qp.c
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down
3 changes: 3 additions & 0 deletions drivers/infiniband/hw/mthca/mthca_provider.c
Original file line number Diff line number Diff line change
Expand Up @@ -540,6 +540,9 @@ static struct ib_qp *mthca_create_qp(struct ib_pd *pd,
struct mthca_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:
Expand Down
3 changes: 3 additions & 0 deletions drivers/infiniband/hw/nes/nes_verbs.c
Original file line number Diff line number Diff line change
Expand Up @@ -1252,6 +1252,9 @@ static struct ib_qp *nes_create_qp(struct ib_pd *ibpd,
u8 rq_encoded_size;
/* int counter; */

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

atomic_inc(&qps_created);
switch (init_attr->qp_type) {
case IB_QPT_RC:
Expand Down
5 changes: 5 additions & 0 deletions include/rdma/ib_verbs.h
Original file line number Diff line number Diff line change
Expand Up @@ -495,6 +495,10 @@ enum ib_qp_type {
IB_QPT_RAW_ETY
};

enum ib_qp_create_flags {
IB_QP_CREATE_IPOIB_UD_LSO = 1 << 0,
};

struct ib_qp_init_attr {
void (*event_handler)(struct ib_event *, void *);
void *qp_context;
Expand All @@ -504,6 +508,7 @@ struct ib_qp_init_attr {
struct ib_qp_cap cap;
enum ib_sig_type sq_sig_type;
enum ib_qp_type qp_type;
enum ib_qp_create_flags create_flags;
u8 port_num; /* special QP types only */
};

Expand Down

0 comments on commit b846f25

Please sign in to comment.