From f57c3df5e59c158cb16008031d6b75347609e6ba Mon Sep 17 00:00:00 2001 From: liangzhen Date: Thu, 21 May 2009 09:24:39 +0000 Subject: [PATCH] Branch HEAD b=19520 i=isaac - handle new CM events in OFED 1.4 --- lnet/autoconf/Makefile.am | 2 +- lnet/autoconf/lustre-lnet.m4 | 55 +----------------------- lnet/autoconf/ofed.m4 | 92 +++++++++++++++++++++++++++++++++++++++++ lnet/klnds/o2iblnd/o2iblnd_cb.c | 14 +++++++ 4 files changed, 108 insertions(+), 55 deletions(-) create mode 100644 lnet/autoconf/ofed.m4 diff --git a/lnet/autoconf/Makefile.am b/lnet/autoconf/Makefile.am index 171634a..2c72c6e 100644 --- a/lnet/autoconf/Makefile.am +++ b/lnet/autoconf/Makefile.am @@ -1 +1 @@ -EXTRA_DIST := lustre-lnet.m4 +EXTRA_DIST := ofed.m4 lustre-lnet.m4 diff --git a/lnet/autoconf/lustre-lnet.m4 b/lnet/autoconf/lustre-lnet.m4 index 301a3a3..1d67f1a 100644 --- a/lnet/autoconf/lustre-lnet.m4 +++ b/lnet/autoconf/lustre-lnet.m4 @@ -539,60 +539,7 @@ else fi fi - LB_LINUX_TRY_COMPILE([ - #include - #include - #if !HAVE_GFP_T - typedef int gfp_t; - #endif - #include - ],[ - ib_dma_map_single(NULL, NULL, 0, 0); - return 0; - ],[ - AC_MSG_RESULT(yes) - AC_DEFINE(HAVE_OFED_IB_DMA_MAP, 1, - [ib_dma_map_single defined]) - ],[ - AC_MSG_RESULT(no) - ]) - - LB_LINUX_TRY_COMPILE([ - #include - #include - #if !HAVE_GFP_T - typedef int gfp_t; - #endif - #include - ],[ - ib_create_cq(NULL, NULL, NULL, NULL, 0, 0); - return 0; - ],[ - AC_MSG_RESULT(yes) - AC_DEFINE(HAVE_OFED_IB_COMP_VECTOR, 1, - [has completion vector]) - ],[ - AC_MSG_RESULT(no) - ]) - - LB_LINUX_TRY_COMPILE([ - #include - #include - #if !HAVE_GFP_T - typedef int gfp_t; - #endif - #include - ],[ - return RDMA_TRANSPORT_IWARP == - rdma_node_get_transport(RDMA_NODE_RNIC); - ],[ - AC_MSG_RESULT(yes) - AC_DEFINE(HAVE_OFED_TRANSPORT_IWARP, 1, - [has transport iWARP]) - ],[ - AC_MSG_RESULT(no) - ]) - + LN_CONFIG_OFED_SPEC EXTRA_KCFLAGS="$EXTRA_KCFLAGS_save" fi fi diff --git a/lnet/autoconf/ofed.m4 b/lnet/autoconf/ofed.m4 new file mode 100644 index 0000000..7b1c413 --- /dev/null +++ b/lnet/autoconf/ofed.m4 @@ -0,0 +1,92 @@ +dnl Checks for OFED +AC_DEFUN([LN_CONFIG_OFED_SPEC], +[AC_MSG_CHECKING([check ofed specifics]) + + LB_LINUX_TRY_COMPILE([ + #include + #include + #if !HAVE_GFP_T + typedef int gfp_t; + #endif + #include + ],[ + ib_dma_map_single(NULL, NULL, 0, 0); + return 0; + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_OFED_IB_DMA_MAP, 1, + [ib_dma_map_single defined]) + ],[ + AC_MSG_RESULT(no) + ]) + + LB_LINUX_TRY_COMPILE([ + #include + #include + #if !HAVE_GFP_T + typedef int gfp_t; + #endif + #include + ],[ + ib_create_cq(NULL, NULL, NULL, NULL, 0, 0); + return 0; + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_OFED_IB_COMP_VECTOR, 1, + [has completion vector]) + ],[ + AC_MSG_RESULT(no) + ]) + + LB_LINUX_TRY_COMPILE([ + #include + #include + #if !HAVE_GFP_T + typedef int gfp_t; + #endif + #include + ],[ + return RDMA_TRANSPORT_IWARP == + rdma_node_get_transport(RDMA_NODE_RNIC); + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_OFED_TRANSPORT_IWARP, 1, + [has transport iWARP]) + ],[ + AC_MSG_RESULT(no) + ]) + + LB_LINUX_TRY_COMPILE([ + #include + #include + #if !HAVE_GFP_T + typedef int gfp_t; + #endif + #include + ],[ + return (RDMA_CM_EVENT_ADDR_CHANGE == 0); + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_OFED_RDMA_CMEV_ADDRCHANGE, 1, + [has completion vector]) + ],[ + AC_MSG_RESULT(no) + ]) + + LB_LINUX_TRY_COMPILE([ + #include + #include + #if !HAVE_GFP_T + typedef int gfp_t; + #endif + #include + ],[ + return (RDMA_CM_EVENT_TIMEWAIT_EXIT == 0); + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_OFED_RDMA_CMEV_TIMEWAIT_EXIT, 1, + [has completion vector]) + ],[ + AC_MSG_RESULT(no) + ]) +]) diff --git a/lnet/klnds/o2iblnd/o2iblnd_cb.c b/lnet/klnds/o2iblnd/o2iblnd_cb.c index c03526b..9be28ad 100644 --- a/lnet/klnds/o2iblnd/o2iblnd_cb.c +++ b/lnet/klnds/o2iblnd/o2iblnd_cb.c @@ -2724,6 +2724,8 @@ kiblnd_cm_callback(struct rdma_cm_id *cmid, struct rdma_cm_event *event) switch (event->event) { default: + CERROR("Unexpected event: %d, status: %d\n", + event->event, event->status); LBUG(); case RDMA_CM_EVENT_CONNECT_REQUEST: @@ -2852,6 +2854,11 @@ kiblnd_cm_callback(struct rdma_cm_id *cmid, struct rdma_cm_event *event) /* net keeps its ref on conn! */ return 0; +#ifdef HAVE_OFED_RDMA_CMEV_TIMEWAIT_EXIT + case RDMA_CM_EVENT_TIMEWAIT_EXIT: + CDEBUG(D_NET, "Ignore TIMEWAIT_EXIT event\n"); + return 0; +#endif case RDMA_CM_EVENT_DISCONNECTED: conn = (kib_conn_t *)cmid->context; if (conn->ibc_state < IBLND_CONN_ESTABLISHED) { @@ -2862,6 +2869,7 @@ kiblnd_cm_callback(struct rdma_cm_id *cmid, struct rdma_cm_event *event) kiblnd_close_conn(conn, 0); } kiblnd_conn_decref(conn); + cmid->context = NULL; return 0; case RDMA_CM_EVENT_DEVICE_REMOVAL: @@ -2871,6 +2879,12 @@ kiblnd_cm_callback(struct rdma_cm_id *cmid, struct rdma_cm_event *event) /* Can't remove network from underneath LNET for now, so I have * to ignore this */ return 0; + +#ifdef HAVE_OFED_RDMA_CMEV_ADDRCHANGE + case RDMA_CM_EVENT_ADDR_CHANGE: + LCONSOLE_INFO("Physical link changed (eg hca/port)\n"); + return 0; +#endif } } -- 1.8.3.1