RDMA/cma: use local SA cache for path queries From: Sean Hefty <[EMAIL PROTECTED]>
Have the rdma_cm check the local SA cache for path records before querying the remote SA. This improves path record lookup time and scale-out connection rates. Signed-off-by: Sean Hefty <[EMAIL PROTECTED]> --- drivers/infiniband/core/cma.c | 19 ++++++++++++++++--- 1 files changed, 16 insertions(+), 3 deletions(-) diff --git a/drivers/infiniband/core/cma.c b/drivers/infiniband/core/cma.c index fde92ce..c8e2024 100644 --- a/drivers/infiniband/core/cma.c +++ b/drivers/infiniband/core/cma.c @@ -45,6 +45,7 @@ #include <rdma/ib_cm.h> #include <rdma/ib_sa.h> #include <rdma/iw_cm.h> +#include <rdma/ib_local_sa.h> MODULE_AUTHOR("Sean Hefty"); MODULE_DESCRIPTION("Generic RDMA CM Agent"); @@ -1529,6 +1530,7 @@ out: static int cma_resolve_ib_route(struct rdma_id_private *id_priv, int timeout_ms) { struct rdma_route *route = &id_priv->id.route; + struct rdma_dev_addr *addr = &id_priv->id.route.addr.dev_addr; struct cma_work *work; int ret; @@ -1548,9 +1550,20 @@ static int cma_resolve_ib_route(struct rdma_id_private *id_priv, int timeout_ms) goto err1; } - ret = cma_query_ib_route(id_priv, timeout_ms, work); - if (ret) - goto err2; + ib_addr_get_sgid(addr, &route->path_rec->sgid); + ib_addr_get_dgid(addr, &route->path_rec->dgid); + ret = ib_get_path_rec(id_priv->id.device, id_priv->id.port_num, + &route->path_rec->sgid, &route->path_rec->dgid, + ib_addr_get_pkey(addr), route->path_rec); + if (!ret) { + route->num_paths = 1; + queue_work(cma_wq, &work->work); + } else { + if (ret == -ENODATA) + ret = cma_query_ib_route(id_priv, timeout_ms, work); + if (ret) + goto err2; + } return 0; err2: _______________________________________________ general mailing list general@lists.openfabrics.org http://lists.openfabrics.org/cgi-bin/mailman/listinfo/general To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general