RDMA/cma: Pass QP type into rdma_create_id()
The RDMA CM currently infers the QP type from the port space selected by the user. In the future (eg with RDMA_PS_IB or XRC), there may not be a 1-1 correspondence between port space and QP type. For netlink export of RDMA CM state, we want to export the QP type to userspace, so it is cleaner to explicitly associate a QP type to an ID. Modify rdma_create_id() to allow the user to specify the QP type, and use it to make our selections of datagram versus connected mode. Signed-off-by: Sean Hefty <sean.hefty@intel.com> Signed-off-by: Roland Dreier <roland@purestorage.com>
This commit is contained in:
committed by
Roland Dreier
parent
9a7147b506
commit
b26f9b9949
+2
-1
@@ -591,7 +591,8 @@ rdma_create_trans(struct p9_client *client, const char *addr, char *args)
|
||||
return -ENOMEM;
|
||||
|
||||
/* Create the RDMA CM ID */
|
||||
rdma->cm_id = rdma_create_id(p9_cm_event_handler, client, RDMA_PS_TCP);
|
||||
rdma->cm_id = rdma_create_id(p9_cm_event_handler, client, RDMA_PS_TCP,
|
||||
IB_QPT_RC);
|
||||
if (IS_ERR(rdma->cm_id))
|
||||
goto error;
|
||||
|
||||
|
||||
+1
-1
@@ -325,7 +325,7 @@ static int rds_ib_laddr_check(__be32 addr)
|
||||
/* Create a CMA ID and try to bind it. This catches both
|
||||
* IB and iWARP capable NICs.
|
||||
*/
|
||||
cm_id = rdma_create_id(NULL, NULL, RDMA_PS_TCP);
|
||||
cm_id = rdma_create_id(NULL, NULL, RDMA_PS_TCP, IB_QPT_RC);
|
||||
if (IS_ERR(cm_id))
|
||||
return PTR_ERR(cm_id);
|
||||
|
||||
|
||||
+1
-1
@@ -587,7 +587,7 @@ int rds_ib_conn_connect(struct rds_connection *conn)
|
||||
/* XXX I wonder what affect the port space has */
|
||||
/* delegate cm event handler to rdma_transport */
|
||||
ic->i_cm_id = rdma_create_id(rds_rdma_cm_event_handler, conn,
|
||||
RDMA_PS_TCP);
|
||||
RDMA_PS_TCP, IB_QPT_RC);
|
||||
if (IS_ERR(ic->i_cm_id)) {
|
||||
ret = PTR_ERR(ic->i_cm_id);
|
||||
ic->i_cm_id = NULL;
|
||||
|
||||
+1
-1
@@ -226,7 +226,7 @@ static int rds_iw_laddr_check(__be32 addr)
|
||||
/* Create a CMA ID and try to bind it. This catches both
|
||||
* IB and iWARP capable NICs.
|
||||
*/
|
||||
cm_id = rdma_create_id(NULL, NULL, RDMA_PS_TCP);
|
||||
cm_id = rdma_create_id(NULL, NULL, RDMA_PS_TCP, IB_QPT_RC);
|
||||
if (IS_ERR(cm_id))
|
||||
return PTR_ERR(cm_id);
|
||||
|
||||
|
||||
+1
-1
@@ -522,7 +522,7 @@ int rds_iw_conn_connect(struct rds_connection *conn)
|
||||
/* XXX I wonder what affect the port space has */
|
||||
/* delegate cm event handler to rdma_transport */
|
||||
ic->i_cm_id = rdma_create_id(rds_rdma_cm_event_handler, conn,
|
||||
RDMA_PS_TCP);
|
||||
RDMA_PS_TCP, IB_QPT_RC);
|
||||
if (IS_ERR(ic->i_cm_id)) {
|
||||
ret = PTR_ERR(ic->i_cm_id);
|
||||
ic->i_cm_id = NULL;
|
||||
|
||||
@@ -158,7 +158,8 @@ static int rds_rdma_listen_init(void)
|
||||
struct rdma_cm_id *cm_id;
|
||||
int ret;
|
||||
|
||||
cm_id = rdma_create_id(rds_rdma_cm_event_handler, NULL, RDMA_PS_TCP);
|
||||
cm_id = rdma_create_id(rds_rdma_cm_event_handler, NULL, RDMA_PS_TCP,
|
||||
IB_QPT_RC);
|
||||
if (IS_ERR(cm_id)) {
|
||||
ret = PTR_ERR(cm_id);
|
||||
printk(KERN_ERR "RDS/RDMA: failed to setup listener, "
|
||||
|
||||
@@ -695,7 +695,8 @@ static struct svc_xprt *svc_rdma_create(struct svc_serv *serv,
|
||||
return ERR_PTR(-ENOMEM);
|
||||
xprt = &cma_xprt->sc_xprt;
|
||||
|
||||
listen_id = rdma_create_id(rdma_listen_handler, cma_xprt, RDMA_PS_TCP);
|
||||
listen_id = rdma_create_id(rdma_listen_handler, cma_xprt, RDMA_PS_TCP,
|
||||
IB_QPT_RC);
|
||||
if (IS_ERR(listen_id)) {
|
||||
ret = PTR_ERR(listen_id);
|
||||
dprintk("svcrdma: rdma_create_id failed = %d\n", ret);
|
||||
|
||||
@@ -387,7 +387,7 @@ rpcrdma_create_id(struct rpcrdma_xprt *xprt,
|
||||
|
||||
init_completion(&ia->ri_done);
|
||||
|
||||
id = rdma_create_id(rpcrdma_conn_upcall, xprt, RDMA_PS_TCP);
|
||||
id = rdma_create_id(rpcrdma_conn_upcall, xprt, RDMA_PS_TCP, IB_QPT_RC);
|
||||
if (IS_ERR(id)) {
|
||||
rc = PTR_ERR(id);
|
||||
dprintk("RPC: %s: rdma_create_id() failed %i\n",
|
||||
|
||||
Reference in New Issue
Block a user