History

IB/mlx5: Allow scatter to CQE without global signaled WRs

Requester scatter to CQE is restricted to QPs configured to signal all WRs. This patch adds ability to enable scatter to cqe (force enable) in the requester without sig_all, for users who do not want all WRs signaled but rather just the ones whose data found in the CQE.

Yonatan Cohen committed 8 years ago

Commit 6f4bc0e1 parent 2e43bb32 files · +12 −3Browse files

Unified · Split

2 files
  1. drivers/infiniband/hw/mlx5/qp.c +11 −3
  2. include/uapi/rdma/mlx5-abi.h +1 −0
drivers/infiniband/hw/mlx5/qp.c+11−3
@@ -1706,15 +1706,20 @@ static void configure_responder_scat_cqe(struct ib_qp_init_attr *init_attr, · 1705 unmodified lines
1706 1706
1707static void configure_requester_scat_cqe(struct mlx5_ib_dev *dev,1707static void configure_requester_scat_cqe(struct mlx5_ib_dev *dev,
1708 struct ib_qp_init_attr *init_attr,1708 struct ib_qp_init_attr *init_attr,
1709 struct mlx5_ib_create_qp *ucmd,
1709 void *qpc)1710 void *qpc)
1710{1711{
1711 enum ib_qp_type qpt = init_attr->qp_type;1712 enum ib_qp_type qpt = init_attr->qp_type;
1712 int scqe_sz;1713 int scqe_sz;
1714 bool allow_scat_cqe = 0;
1713 1715
1714 if (qpt == IB_QPT_UC || qpt == IB_QPT_UD)1716 if (qpt == IB_QPT_UC || qpt == IB_QPT_UD)
1715 return;1717 return;
1716 1718
1717 if (init_attr->sq_sig_type != IB_SIGNAL_ALL_WR)1719 if (ucmd)
1720 allow_scat_cqe = ucmd->flags & MLX5_QP_FLAG_ALLOW_SCATTER_CQE;
1721
1722 if (!allow_scat_cqe && init_attr->sq_sig_type != IB_SIGNAL_ALL_WR)
1718 return;1723 return;
1719 1724
1720 scqe_sz = mlx5_ib_get_cqe_size(init_attr->send_cq);1725 scqe_sz = mlx5_ib_get_cqe_size(init_attr->send_cq);
@@ -1836,7 +1841,8 @@ static int create_qp_common(struct mlx5_ib_dev *dev, struct ib_pd *pd, · 115 unmodified lines
1836 MLX5_QP_FLAG_TUNNEL_OFFLOADS |1841 MLX5_QP_FLAG_TUNNEL_OFFLOADS |
1837 MLX5_QP_FLAG_BFREG_INDEX |1842 MLX5_QP_FLAG_BFREG_INDEX |
1838 MLX5_QP_FLAG_TYPE_DCT |1843 MLX5_QP_FLAG_TYPE_DCT |
1839 MLX5_QP_FLAG_TYPE_DCI))1844 MLX5_QP_FLAG_TYPE_DCI |
1845 MLX5_QP_FLAG_ALLOW_SCATTER_CQE))
1840 return -EINVAL;1846 return -EINVAL;
1841 1847
1842 err = get_qp_user_index(to_mucontext(pd->uobject->context),1848 err = get_qp_user_index(to_mucontext(pd->uobject->context),
@@ -1971,7 +1977,9 @@ static int create_qp_common(struct mlx5_ib_dev *dev, struct ib_pd *pd, · 128 unmodified lines
1971 1977
1972 if (qp->scat_cqe && is_connected(init_attr->qp_type)) {1978 if (qp->scat_cqe && is_connected(init_attr->qp_type)) {
1973 configure_responder_scat_cqe(init_attr, qpc);1979 configure_responder_scat_cqe(init_attr, qpc);
1974 configure_requester_scat_cqe(dev, init_attr, qpc);1980 configure_requester_scat_cqe(dev, init_attr,
1981 (pd && pd->uobject) ? &ucmd : NULL,
1982 qpc);
1975 }1983 }
1976 1984
1977 if (qp->rq.wqe_cnt) {1985 if (qp->rq.wqe_cnt) {
include/uapi/rdma/mlx5-abi.h+1−0
@@ -47,6 +47,7 @@ enum { · 46 unmodified lines
47 MLX5_QP_FLAG_TYPE_DCI = 1 << 5,47 MLX5_QP_FLAG_TYPE_DCI = 1 << 5,
48 MLX5_QP_FLAG_TIR_ALLOW_SELF_LB_UC = 1 << 6,48 MLX5_QP_FLAG_TIR_ALLOW_SELF_LB_UC = 1 << 6,
49 MLX5_QP_FLAG_TIR_ALLOW_SELF_LB_MC = 1 << 7,49 MLX5_QP_FLAG_TIR_ALLOW_SELF_LB_MC = 1 << 7,
50 MLX5_QP_FLAG_ALLOW_SCATTER_CQE = 1 << 8,
50};51};
51 52
52enum {53enum {

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t