Before spending any more time on this patch series, is there any disagreement to accepting this patch (as is or slightly modified) upstream?
- Sean >Export rdma_set_ib_paths to user space to allow applications to >manually set the IB path used for connections. This allows >alternative ways for a user space application or library to obtain >path record information, including retrieving path information >from cached data, avoiding direct interaction with the IB SA. >The IB SA is a single, centralized entity that can limit scaling >on large clusters running MPI applications. > >Signed-off-by: Sean Hefty <sean.he...@intel.com> >--- >I'd like to get feedback on this approach with the possibility of merging >for 2.6.33. > > drivers/infiniband/core/ucma.c | 40 ++++++++++++++++++++++++++++++++++++++++ > include/rdma/rdma_user_cm.h | 7 +++++-- > 2 files changed, 45 insertions(+), 2 deletions(-) > >diff --git a/drivers/infiniband/core/ucma.c b/drivers/infiniband/core/ucma.c >index 4346a24..1359727 100644 >--- a/drivers/infiniband/core/ucma.c >+++ b/drivers/infiniband/core/ucma.c >@@ -42,6 +42,7 @@ > #include <rdma/rdma_user_cm.h> > #include <rdma/ib_marshall.h> > #include <rdma/rdma_cm.h> >+#include <rdma/rdma_cm_ib.h> > > MODULE_AUTHOR("Sean Hefty"); > MODULE_DESCRIPTION("RDMA Userspace Connection Manager Access"); >@@ -811,6 +812,42 @@ static int ucma_set_option_id(struct ucma_context *ctx, >int optname, > return ret; > } > >+static int ucma_set_ib_path(struct ucma_context *ctx, >+ struct ib_user_path_rec *upath, size_t optlen) >+{ >+ struct ib_sa_path_rec sa_path; >+ struct rdma_cm_event event; >+ int ret; >+ >+ if (optlen != sizeof(*upath)) >+ return -EINVAL; >+ >+ ib_copy_path_rec_from_user(&sa_path, upath); >+ ret = rdma_set_ib_paths(ctx->cm_id, &sa_path, 1); >+ if (ret) >+ return ret; >+ >+ memset(&event, 0, sizeof event); >+ event.event = RDMA_CM_EVENT_ROUTE_RESOLVED; >+ return ucma_event_handler(ctx->cm_id, &event); >+} >+ >+static int ucma_set_option_ib(struct ucma_context *ctx, int optname, >+ void *optval, size_t optlen) >+{ >+ int ret; >+ >+ switch (optname) { >+ case RDMA_OPTION_IB_PATH: >+ ret = ucma_set_ib_path(ctx, optval, optlen); >+ break; >+ default: >+ ret = -ENOSYS; >+ } >+ >+ return ret; >+} >+ > static int ucma_set_option_level(struct ucma_context *ctx, int level, > int optname, void *optval, size_t optlen) > { >@@ -820,6 +857,9 @@ static int ucma_set_option_level(struct ucma_context *ctx, >int level, > case RDMA_OPTION_ID: > ret = ucma_set_option_id(ctx, optname, optval, optlen); > break; >+ case RDMA_OPTION_IB: >+ ret = ucma_set_option_ib(ctx, optname, optval, optlen); >+ break; > default: > ret = -ENOSYS; > } >diff --git a/include/rdma/rdma_user_cm.h b/include/rdma/rdma_user_cm.h >index c557054..d7829f4 100644 >--- a/include/rdma/rdma_user_cm.h >+++ b/include/rdma/rdma_user_cm.h >@@ -215,12 +215,15 @@ struct rdma_ucm_event_resp { > > /* Option levels */ > enum { >- RDMA_OPTION_ID = 0 >+ RDMA_OPTION_ID = 0, >+ RDMA_OPTION_IB = 1 > }; > > /* Option details */ > enum { >- RDMA_OPTION_ID_TOS = 0 >+ RDMA_OPTION_ID_TOS = 0, >+ >+ RDMA_OPTION_IB_PATH = 1 > }; > > struct rdma_ucm_set_option { > > -- To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html