Allow users to connect XRC QPs through the rdma_cm.  Because
XRC QPs connect INI -> TGT QPs, we need to convert from the local
qp type to the destination qp type when calling the ib_cm.

Signed-off-by: Sean Hefty <[email protected]>
---
 drivers/infiniband/core/cma.c |   10 +++++++++-
 1 files changed, 9 insertions(+), 1 deletions(-)

diff --git a/drivers/infiniband/core/cma.c b/drivers/infiniband/core/cma.c
index d9b18f5..3017888 100644
--- a/drivers/infiniband/core/cma.c
+++ b/drivers/infiniband/core/cma.c
@@ -2464,6 +2464,14 @@ out:
        return ret;
 }
 
+static enum ib_qp_type cma_get_dest_qpt(struct rdma_id_private *id_priv)
+{
+       if (id_priv->id.qp_type == IB_QPT_XRC_INI)
+               return IB_QPT_XRC_TGT;
+
+       return id_priv->id.qp_type;
+}
+
 static int cma_connect_ib(struct rdma_id_private *id_priv,
                          struct rdma_conn_param *conn_param)
 {
@@ -2503,7 +2511,7 @@ static int cma_connect_ib(struct rdma_id_private *id_priv,
        req.service_id = cma_get_service_id(id_priv->id.ps,
                                            (struct sockaddr *) 
&route->addr.dst_addr);
        req.qp_num = id_priv->qp_num;
-       req.qp_type = IB_QPT_RC;
+       req.qp_type = cma_get_dest_qpt(id_priv);
        req.starting_psn = id_priv->seq_num;
        req.responder_resources = conn_param->responder_resources;
        req.initiator_depth = conn_param->initiator_depth;


--
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

Reply via email to