Whamcloud - gitweb
LU-6215 o2iblnd: rdma_create_id() takes extra parameter
[fs/lustre-release.git] / lnet / autoconf / lustre-lnet.m4
index 649e484..253d590 100644 (file)
@@ -42,21 +42,6 @@ fi
 ]) # LN_CHECK_GCC_VERSION
 
 #
-# LN_FUNC_DEV_GET_BY_NAME_2ARG
-#
-AC_DEFUN([LN_FUNC_DEV_GET_BY_NAME_2ARG], [
-LB_CHECK_COMPILE([if 'dev_get_by_name' has two args],
-dev_get_by_name_2args, [
-       #include <linux/netdevice.h>
-],[
-       dev_get_by_name(NULL, NULL);
-],[
-       AC_DEFINE(HAVE_DEV_GET_BY_NAME_2ARG, 1,
-               [dev_get_by_name has 2 args])
-])
-]) # LN_FUNC_DEV_GET_BY_NAME_2ARG
-
-#
 # LN_CONFIG_AFFINITY
 #
 # check if cpu affinity is available/wanted
@@ -203,18 +188,6 @@ AS_IF([test $ENABLEO2IB = "no"], [
                           -f ${O2IBPATH}/include/rdma/ib_cm.h -a \
                           -f ${O2IBPATH}/include/rdma/ib_verbs.h -a \
                           -f ${O2IBPATH}/include/rdma/ib_fmr_pool.h \)], [
-                       AS_IF([test \( \( \( -d ${O2IBPATH}/patches -a \
-                                  \( "x$OFED" = "xyes" \) \) -o \
-                                  -d ${O2IBPATH}/kernel_patches \) -a \
-                                  -f ${O2IBPATH}/Makefile \)], [
-                               AC_MSG_RESULT([no])
-                               AC_MSG_ERROR([
-
-trying to use the, explicit or detected, OFED distribution's source
-directory (${O2IBPATH}) rather than the "development/headers"
-directory which is likely in ${O2IBPATH%-*}
-])
-                       ])
                        o2ib_found=true
                        break
                ])
@@ -227,11 +200,16 @@ directory which is likely in ${O2IBPATH%-*}
                        *) AC_MSG_ERROR([internal error]) ;;
                esac
        else
+               COMPAT_AUTOCONF=""
                compatrdma_found=false
                if test -f ${O2IBPATH}/include/linux/compat-2.6.h; then
                        AC_MSG_RESULT([yes])
                        compatrdma_found=true
                        AC_DEFINE(HAVE_COMPAT_RDMA, 1, [compat rdma found])
+                       EXTRA_OFED_CONFIG="$EXTRA_OFED_CONFIG -include ${O2IBPATH}/include/linux/compat-2.6.h"
+                       if test -f "$O2IBPATH/include/linux/compat_autoconf.h"; then
+                               COMPAT_AUTOCONF="$O2IBPATH/include/linux/compat_autoconf.h"
+                       fi
                else
                        AC_MSG_RESULT([no])
                fi
@@ -241,19 +219,21 @@ directory which is likely in ${O2IBPATH%-*}
                        elif test -f "$O2IBPATH/ofed_patch.mk"; then
                                . "$O2IBPATH/ofed_patch.mk"
                        fi
-               else
+               elif test -z "$COMPAT_AUTOCONF"; then
+                       # Depreciated checks
                        if test "x$RHEL_KERNEL" = xyes; then
-                               case "$RHEL_RELEASE_NO" in
-                                       64)
-                                               EXTRA_OFED_INCLUDE="$EXTRA_OFED_INCLUDE -DCONFIG_COMPAT_RHEL_6_4" ;;
-                                       65)
-                                               EXTRA_OFED_INCLUDE="$EXTRA_OFED_INCLUDE -DCONFIG_COMPAT_RHEL_6_4 -DCONFIG_COMPAT_RHEL_6_5" ;;
-                               esac
+                               RHEL_MAJOR=$(awk '/ RHEL_MAJOR / { print [$]3 }' $LINUX_OBJ/include/$VERSION_HDIR/version.h)
+                               I=$(awk '/ RHEL_MINOR / { print [$]3 }' $LINUX_OBJ/include/$VERSION_HDIR/version.h)
+                               while test "$I" -ge 0; do
+                                       EXTRA_OFED_INCLUDE="$EXTRA_OFED_INCLUDE -DCONFIG_COMPAT_RHEL_${RHEL_MAJOR}_$I"
+                                       I=$(($I-1))
+                               done
                        elif test "x$SUSE_KERNEL" = xyes; then
                                SP=$(grep PATCHLEVEL /etc/SuSE-release | sed -e 's/.*= *//')
                                EXTRA_OFED_INCLUDE="$EXTRA_OFED_INCLUDE -DCONFIG_COMPAT_SLES_11_$SP"
                        fi
                fi
+
                AC_MSG_CHECKING([whether to use any OFED backport headers])
                if test -n "$BACKPORT_INCLUDES"; then
                        AC_MSG_RESULT([yes])
@@ -269,6 +249,12 @@ directory which is likely in ${O2IBPATH%-*}
                LB_CHECK_COMPILE([whether to enable OpenIB gen2 support],
                openib_gen2_support, [
                        #ifdef HAVE_COMPAT_RDMA
+                       #undef PACKAGE_NAME
+                       #undef PACKAGE_TARNAME
+                       #undef PACKAGE_VERSION
+                       #undef PACKAGE_STRING
+                       #undef PACKAGE_BUGREPORT
+                       #undef PACKAGE_URL
                        #include <linux/compat-2.6.h>
                        #endif
                        #include <linux/version.h>
@@ -306,26 +292,41 @@ directory which is likely in ${O2IBPATH%-*}
                                fi
                        done
                        if test -n "$O2IB_SYMVER"; then
-                               AC_MSG_NOTICE([adding $O2IBPATH/$O2IB_SYMVER to $PWD/$SYMVERFILE])
-                               # strip out the existing symbols versions first
-                               if test -f $PWD/$SYMVERFILE; then
-                               egrep -v $(echo $(awk '{ print $2 }' $O2IBPATH/$O2IB_SYMVER) | tr ' ' '|') $PWD/$SYMVERFILE > $PWD/$SYMVERFILE.old
-                               else
-                                       touch $PWD/$SYMVERFILE.old
-                               fi
-                               cat $PWD/$SYMVERFILE.old $O2IBPATH/$O2IB_SYMVER > $PWD/$SYMVERFILE
-                               rm $PWD/$SYMVERFILE.old
+                               AC_MSG_NOTICE([adding $O2IBPATH/$O2IB_SYMVER to Symbol Path])
+                               EXTRA_SYMBOLS="$EXTRA_SYMBOLS $O2IBPATH/$O2IB_SYMVER"
+                               AC_SUBST(EXTRA_SYMBOLS)
                        else
                                AC_MSG_ERROR([an external source tree was, either specified or detected, for o2iblnd however I could not find a $O2IBPATH/Module.symvers there])
                        fi
                fi
 
-               LN_CONFIG_OFED_SPEC
+               LB_CHECK_COMPILE([if Linux kernel has kthread_worker],
+               linux_kthread_worker, [
+                       #ifdef HAVE_COMPAT_RDMA
+                       #undef PACKAGE_NAME
+                       #undef PACKAGE_TARNAME
+                       #undef PACKAGE_VERSION
+                       #undef PACKAGE_STRING
+                       #undef PACKAGE_BUGREPORT
+                       #undef PACKAGE_URL
+                       #include <linux/compat-2.6.h>
+                       #endif
+                       #include <linux/kthread.h>
+               ],[
+                       struct kthread_work     *kth_wrk __attribute__ ((unused));
+                       flush_kthread_work(kth_wrk);
+               ],[
+                       AC_DEFINE(HAVE_KTHREAD_WORK, 1, [kthread_worker found])
+                       if test -z "$COMPAT_AUTOCONF"; then
+                               EXTRA_OFED_INCLUDE="$EXTRA_OFED_INCLUDE -DCONFIG_COMPAT_IS_KTHREAD"
+                       fi
+               ])
        fi
 ])
+AC_SUBST(EXTRA_OFED_CONFIG)
 AC_SUBST(EXTRA_OFED_INCLUDE)
 AC_SUBST(O2IBLND)
-AC_SUBST(O2IBPATHS)
+AC_SUBST(O2IBPATH)
 AC_SUBST(ENABLEO2IB)
 
 # In RHEL 6.2, rdma_create_id() takes the queue-pair type as a fourth argument
@@ -333,6 +334,12 @@ AS_IF([test $ENABLEO2IB != "no"], [
        LB_CHECK_COMPILE([if 'rdma_create_id' wants four args],
        rdma_create_id_4args, [
                #ifdef HAVE_COMPAT_RDMA
+               #undef PACKAGE_NAME
+               #undef PACKAGE_TARNAME
+               #undef PACKAGE_VERSION
+               #undef PACKAGE_STRING
+               #undef PACKAGE_BUGREPORT
+               #undef PACKAGE_URL
                #include <linux/compat-2.6.h>
                #endif
                #include <rdma/rdma_cm.h>
@@ -343,6 +350,79 @@ AS_IF([test $ENABLEO2IB != "no"], [
                        [rdma_create_id wants 4 args])
        ])
 ])
+#
+# 4.2 introduced struct ib_cq_init_attr which is used
+# by ib_create_cq(). Note some OFED stacks only keep
+# their headers in sync with latest kernels but not
+# the functionality which means for infiniband testing
+# we need to always test functionality testings.
+#
+AS_IF([test $ENABLEO2IB != "no"], [
+       LB_CHECK_COMPILE([if 'struct ib_cq_init_attr' is used],
+       ib_cq_init_attr, [
+               #ifdef HAVE_COMPAT_RDMA
+               #undef PACKAGE_NAME
+               #undef PACKAGE_TARNAME
+               #undef PACKAGE_VERSION
+               #undef PACKAGE_STRING
+               #undef PACKAGE_BUGREPORT
+               #undef PACKAGE_URL
+               #include <linux/compat-2.6.h>
+               #endif
+               #include <rdma/ib_verbs.h>
+       ],[
+               struct ib_cq_init_attr cq_attr;
+
+               ib_create_cq(NULL, NULL, NULL, NULL, &cq_attr);
+       ],[
+               AC_DEFINE(HAVE_IB_CQ_INIT_ATTR, 1,
+                       [struct ib_cq_init_attr is used by ib_create_cq])
+       ])
+])
+
+# 4.3 removed ib_alloc_fast_reg_mr()
+AS_IF([test $ENABLEO2IB != "no"], [
+       LB_CHECK_COMPILE([if 'ib_alloc_fast_reg_mr' exists],
+       ib_alloc_fast_reg_mr, [
+               #ifdef HAVE_COMPAT_RDMA
+               #undef PACKAGE_NAME
+               #undef PACKAGE_TARNAME
+               #undef PACKAGE_VERSION
+               #undef PACKAGE_STRING
+               #undef PACKAGE_BUGREPORT
+               #undef PACKAGE_URL
+               #include <linux/compat-2.6.h>
+               #endif
+               #include <rdma/ib_verbs.h>
+       ],[
+               ib_alloc_fast_reg_mr(NULL, 0);
+       ],[
+               AC_DEFINE(HAVE_IB_ALLOC_FAST_REG_MR, 1,
+                       [ib_alloc_fast_reg_mr is defined])
+       ])
+])
+
+# 4.4 added network namespace parameter for rdma_create_id()
+AS_IF([test $ENABLEO2IB != "no"], [
+       LB_CHECK_COMPILE([if 'rdma_create_id' wants five args],
+       rdma_create_id_5args, [
+               #ifdef HAVE_COMPAT_RDMA
+               #undef PACKAGE_NAME
+               #undef PACKAGE_TARNAME
+               #undef PACKAGE_VERSION
+               #undef PACKAGE_STRING
+               #undef PACKAGE_BUGREPORT
+               #undef PACKAGE_URL
+               #include <linux/compat-2.6.h>
+               #endif
+               #include <rdma/rdma_cm.h>
+       ],[
+               rdma_create_id(NULL, NULL, NULL, 0, 0);
+       ],[
+               AC_DEFINE(HAVE_RDMA_CREATE_ID_5ARG, 1,
+                       [rdma_create_id wants 5 args])
+       ])
+])
 ]) # LN_CONFIG_O2IB
 
 #
@@ -414,6 +494,12 @@ AC_DEFUN([LN_CONFIG_SK_SLEEP], [
 LB_CHECK_COMPILE([if Linux kernel has 'sk_sleep'],
 sk_sleep, [
        #ifdef HAVE_COMPAT_RDMA
+       #undef PACKAGE_NAME
+       #undef PACKAGE_TARNAME
+       #undef PACKAGE_VERSION
+       #undef PACKAGE_STRING
+       #undef PACKAGE_BUGREPORT
+       #undef PACKAGE_URL
        #include <linux/compat-2.6.h>
        #endif
        #include <net/sock.h>
@@ -435,6 +521,15 @@ tmp_flags="$EXTRA_KCFLAGS"
 EXTRA_KCFLAGS="-Werror"
 LB_CHECK_COMPILE([if 'tcp_sendpage' first parameter is socket],
 tcp_sendpage_socket, [
+       #ifdef HAVE_COMPAT_RDMA
+       #undef PACKAGE_NAME
+       #undef PACKAGE_TARNAME
+       #undef PACKAGE_VERSION
+       #undef PACKAGE_STRING
+       #undef PACKAGE_BUGREPORT
+       #undef PACKAGE_URL
+       #include <linux/compat-2.6.h>
+       #endif
        #include <linux/net.h>
        #include <net/tcp.h>
 ],[
@@ -456,6 +551,15 @@ tmp_flags="$EXTRA_KCFLAGS"
 EXTRA_KCFLAGS="-Werror"
 LB_CHECK_COMPILE([if 'sk_data_ready' takes only one argument],
 sk_data_ready, [
+       #ifdef HAVE_COMPAT_RDMA
+       #undef PACKAGE_NAME
+       #undef PACKAGE_TARNAME
+       #undef PACKAGE_VERSION
+       #undef PACKAGE_STRING
+       #undef PACKAGE_BUGREPORT
+       #undef PACKAGE_URL
+       #include <linux/compat-2.6.h>
+       #endif
        #include <linux/net.h>
        #include <net/sock.h>
 ],[
@@ -468,6 +572,33 @@ EXTRA_KCFLAGS="$tmp_flags"
 ]) # LN_CONFIG_SK_DATA_READY
 
 #
+# LN_CONFIG_IB_INC_RKEY
+#
+AC_DEFUN([LN_CONFIG_IB_INC_RKEY], [
+tmp_flags="$EXTRA_KCFLAGS"
+EXTRA_KCFLAGS="-Werror"
+LB_CHECK_COMPILE([if function 'ib_inc_rkey' is defined],
+ib_inc_rkey, [
+       #ifdef HAVE_COMPAT_RDMA
+       #undef PACKAGE_NAME
+       #undef PACKAGE_TARNAME
+       #undef PACKAGE_VERSION
+       #undef PACKAGE_STRING
+       #undef PACKAGE_BUGREPORT
+       #undef PACKAGE_URL
+       #include <linux/compat-2.6.h>
+       #endif
+       #include <rdma/ib_verbs.h>
+],[
+       (void)ib_inc_rkey(0);
+],[
+       AC_DEFINE(HAVE_IB_INC_RKEY, 1,
+                 [function ib_inc_rkey exist])
+])
+EXTRA_KCFLAGS="$tmp_flags"
+]) # LN_CONFIG_IB_INC_RKEY
+
+#
 # LN_PROG_LINUX
 #
 # LNet linux kernel checks
@@ -476,11 +607,11 @@ AC_DEFUN([LN_PROG_LINUX], [
 AC_MSG_NOTICE([LNet kernel checks
 ==============================================================================])
 
-LN_FUNC_DEV_GET_BY_NAME_2ARG
 LN_CONFIG_AFFINITY
 LN_CONFIG_BACKOFF
 LN_CONFIG_O2IB
 LN_CONFIG_GNILND
+LN_CONFIG_IB_INC_RKEY
 # 2.6.35
 LN_CONFIG_SK_SLEEP
 # 2.6.36