Whamcloud - gitweb
b=6336
[fs/lustre-release.git] / lnet / autoconf / lustre-lnet.m4
index e9c5889..ba0fffc 100644 (file)
@@ -6,7 +6,7 @@
 AC_DEFUN([LP_CHECK_GCC_VERSION],
 [AC_MSG_CHECKING([compiler version])
 PTL_CC_VERSION=`$CC --version | awk '/^gcc/{print $ 3}'`
-PTL_MIN_CC_VERSION="3.2.3"
+PTL_MIN_CC_VERSION="3.2.2"
 v2n() {
        awk -F. '{printf "%d\n", (($ 1)*100+($ 2))*100+($ 3)}'
 }
@@ -83,22 +83,38 @@ fi
 # check if quadrics support is in this kernel
 #
 AC_DEFUN([LP_CONFIG_QUADRICS],
-[AC_MSG_CHECKING([if quadrics kernel headers are present])
-if test -d $LINUX/drivers/net/qsnet ; then
+[AC_MSG_CHECKING([for QsNet sources])
+AC_ARG_WITH([qsnet],
+       AC_HELP_STRING([--with-qsnet=path],
+                      [set path to qsnet source (default=$LINUX)]),
+       [QSNET=$with_qsnet],
+       [QSNET=$LINUX])
+AC_MSG_RESULT([$QSNET])
+
+AC_MSG_CHECKING([if quadrics kernel headers are present])
+if test -d $QSNET/drivers/net/qsnet ; then
        AC_MSG_RESULT([yes])
        QSWNAL="qswnal"
        AC_MSG_CHECKING([for multirail EKC])
-       if test -f $LINUX/include/elan/epcomms.h; then
+       if test -f $QSNET/include/elan/epcomms.h; then
                AC_MSG_RESULT([supported])
-               QSWCPPFLAGS="-DMULTIRAIL_EKC=1"
+               QSWCPPFLAGS="-I$QSNET/include -DMULTIRAIL_EKC=1"
        else
                AC_MSG_RESULT([not supported])
-               if test -d $LINUX/drivers/net/qsnet/include; then
-                       QSWCPPFLAGS="-I$LINUX/drivers/net/qsnet/include"
+               if test -d $QSNET/drivers/net/qsnet/include; then
+                       QSWCPPFLAGS="-I$QSNET/drivers/net/qsnet/include"
                else
-                       QSWCPPFLAGS="-I$LINUX/include/linux"
+                       QSWCPPFLAGS="-I$QSNET/include/linux"
                fi
        fi
+
+       LB_LINUX_CONFIG([QSNET],[],[
+               LB_LINUX_CONFIG([QSNET_MODULE],[],[
+                       AC_MSG_WARN([QSNET is not enabled in this kernel; not building qswnal.])
+                       QSWNAL=""
+                       QSWCPPFLAGS=""
+               ])
+       ])
 else
        AC_MSG_RESULT([no])
        QSWNAL=""
@@ -114,35 +130,27 @@ AC_SUBST(QSWNAL)
 # check if GM support is available
 #
 AC_DEFUN([LP_CONFIG_GM],
-[AC_MSG_CHECKING([if gm support was requested])
-AC_ARG_WITH([gm],
-       AC_HELP_STRING([--with-gm=path],
-                      [build gmnal against path]),
-       [
-               case $with_gm in 
-                       yes)
-                               AC_MSG_RESULT([yes])
-                               GMCPPFLAGS="-I/usr/local/gm/include"
-                               GMNAL="gmnal"
-                               ;;
-                       no)
-                               AC_MSG_RESULT([no])
-                               GMCPPFLAGS=""
-                               GMNAL=""
-                               ;;
-                       *)
-                               AC_MSG_RESULT([yes])
-                               GMCPPFLAGS="-I$with_gm/include -I$with_gm/drivers -I$with_gm/drivers/linux/gm"
-                               GMNAL="gmnal"
-                               ;;
-               esac
-       ],[
-               AC_MSG_RESULT([no])
-               GMCPPFLAGS=""
-               GMNAL=""
-       ])
+[LB_ARG_LIBS_INCLUDES([Myrinet],[gm])
+if test x$gm_includes != x ; then
+       GMCPPFLAGS="-I$gm_includes"
+       if test -d "$gm/drivers" ; then
+               GMCPPFLAGS="$GMCPPFLAGS -I$gm/drivers -I$gm/drivers/linux/gm"
+       fi
+fi
 AC_SUBST(GMCPPFLAGS)
+
+if test x$gm_libs != x ; then
+       GMLIBS="-L$gm_libs"
+fi
+AC_SUBST(GMLIBS)
+
+ENABLE_GM=0
+if test x$gm != x ; then
+       GMNAL="gmnal"
+       ENABLE_GM=1
+fi
 AC_SUBST(GMNAL)
+AC_SUBST(ENABLE_GM)
 ])
 
 #
@@ -228,31 +236,75 @@ AC_SUBST(OPENIBNAL)
 #
 # check for infinicon infiniband support
 #
-AC_DEFUN([LP_CONFIG_IIB],
-[AC_MSG_CHECKING([if Infinicon IB kernel headers are present])
-# for how the only infinicon ib build has headers in /usr/include/iba
-IIBCPPFLAGS="-I/usr/include -DIN_TREE_BUILD"
-EXTRA_KCFLAGS_save="$EXTRA_KCFLAGS"
-EXTRA_KCFLAGS="$EXTRA_KCFLAGS $IIBCPPFLAGS"
-LB_LINUX_TRY_COMPILE([
-       #include <linux/iba/ibt.h>
-],[
-        IBT_INTERFACE_UNION interfaces;
-        FSTATUS             rc;
+#
+# LP_CONFIG_IIB
+#
+# check for infinicon infiniband support
+#
+AC_DEFUN([LP_CONFIG_IIB],[
+AC_MSG_CHECKING([whether to enable Infinicon support])
+# set default
+IIBPATH="/usr/include"
+AC_ARG_WITH([iib],
+       AC_HELP_STRING([--with-iib=path],
+                      [build iibnal against path]),
+       [
+               case $with_iib in
+               yes)    ENABLEIIB=2
+                       ;;
+               no)     ENABLEIIB=0
+                       ;;
+               *)      IIBPATH="${with_iib}/include"
+                       ENABLEIIB=3
+                       ;;
+               esac
+       ],[
+               ENABLEIIB=1
+       ])
+if test $ENABLEIIB -eq 0; then
+       AC_MSG_RESULT([disabled])
+elif test ! \( -f ${IIBPATH}/linux/iba/ibt.h \); then
+       AC_MSG_RESULT([no])
+       case $ENABLEIIB in
+       1) ;;
+       2) AC_MSG_ERROR([default Infinicon headers not present]);;
+       3) AC_MSG_ERROR([bad --with-iib path]);;
+       *) AC_MSG_ERROR([internal error]);;
+       esac
+else
+       IIBCPPFLAGS="-I$IIBPATH"
+       if test $IIBPATH != "/usr/include"; then
+               # we need /usr/include come what may
+               IIBCPPFLAGS="$IIBCPPFLAGS -I/usr/include"
+        fi
+       EXTRA_KCFLAGS_save="$EXTRA_KCFLAGS"
+       EXTRA_KCFLAGS="$EXTRA_KCFLAGS $IIBCPPFLAGS"
+       LB_LINUX_TRY_COMPILE([
+               #include <linux/iba/ibt.h>
+       ],[
+               IBT_INTERFACE_UNION interfaces;
+               FSTATUS             rc;
 
-         rc = IbtGetInterfaceByVersion(IBT_INTERFACE_VERSION_2,
-                                      &interfaces);
+                rc = IbtGetInterfaceByVersion(IBT_INTERFACE_VERSION_2,
+                                              &interfaces);
 
-       return rc == FSUCCESS ? 0 : 1;
-],[
-       AC_MSG_RESULT([yes])
-       IIBNAL="iibnal"
-],[
-       AC_MSG_RESULT([no])
-       IIBNAL=""
-       IIBCPPFLAGS=""
-])
-EXTRA_KCFLAGS="$EXTRA_KCFLAGS_save"
+               return rc == FSUCCESS ? 0 : 1;
+       ],[
+               AC_MSG_RESULT([yes])
+               IIBNAL="iibnal"
+       ],[
+               AC_MSG_RESULT([no])
+               case $ENABLEIIB in
+               1) ;;
+               2) AC_MSG_ERROR([can't compile with default Infinicon headers]);;
+               3) AC_MSG_ERROR([can't compile with Infinicon headers under $IIBPATH]);;
+               *) AC_MSG_ERROR([internal error]);;
+               esac
+               IIBNAL=""
+               IIBCPPFLAGS=""
+       ])
+       EXTRA_KCFLAGS="$EXTRA_KCFLAGS_save"
+fi
 AC_SUBST(IIBCPPFLAGS)
 AC_SUBST(IIBNAL)
 ])
@@ -323,6 +375,57 @@ else
        ])
        EXTRA_KCFLAGS="$EXTRA_KCFLAGS_save"
 fi
+if test -n "$VIBNAL"; then
+       EXTRA_KCFLAGS_save="$EXTRA_KCFLAGS"
+       EXTRA_KCFLAGS="$EXTRA_KCFLAGS $VIBCPPFLAGS"
+       AC_MSG_CHECKING([if Voltaire still uses void * sg addresses])
+       LB_LINUX_TRY_COMPILE([
+               #include <linux/list.h>
+               #include <asm/byteorder.h>
+               #ifdef __BIG_ENDIAN
+               # define CPU_BE 1
+                # define CPU_LE 0
+               #endif
+               #ifdef __LITTLE_ENDIAN
+               # define CPU_BE 0
+               # define CPU_LE 1
+               #endif
+               #include <vverbs.h>
+               #include <ib-cm.h>
+               #include <ibat.h>
+       ],[
+               vv_scatgat_t  sg;
+
+               return &sg.v_address[3] == NULL;
+       ],[
+               AC_MSG_RESULT([yes])
+               VIBCPPFLAGS="$VIBCPPFLAGS -DIBNAL_VOIDSTAR_SGADDR=1"
+       ],[
+               AC_MSG_RESULT([no])
+       ])
+       AC_MSG_CHECKING([if page_to_phys() must avoid sign extension])
+       LB_LINUX_TRY_COMPILE([
+               #include <linux/kernel.h>
+               #include <linux/mm.h>
+               #include <linux/unistd.h>
+               #include <asm/system.h>
+               #include <asm/io.h>
+       ],[
+               struct page p;
+
+               switch (42) {
+               case 0:
+               case (sizeof(typeof(page_to_phys(&p))) < 8):
+                       break;
+               }
+       ],[
+               AC_MSG_RESULT([yes])
+               VIBCPPFLAGS="$VIBCPPFLAGS -DIBNAL_32BIT_PAGE2PHYS=1"
+       ],[
+               AC_MSG_RESULT([no])
+       ])
+       EXTRA_KCFLAGS="$EXTRA_KCFLAGS_save"
+fi
 AC_SUBST(VIBCPPFLAGS)
 AC_SUBST(VIBNAL)
 ])
@@ -469,9 +572,7 @@ fi
 # Portals linux kernel checks
 #
 AC_DEFUN([LP_PROG_LINUX],
-[LP_CHECK_GCC_VERSION
-
-LP_CONFIG_ZEROCOPY
+[LP_CONFIG_ZEROCOPY
 LP_CONFIG_AFFINITY
 LP_CONFIG_QUADRICS
 LP_CONFIG_GM
@@ -512,7 +613,7 @@ AC_DEFUN([LP_PATH_DEFAULTS],
 #
 AC_DEFUN([LP_CONFIGURE],
 [# portals/utils/portals.c
-AC_CHECK_HEADERS([netdb.h netinet/tcp.h asm/types.h endian.h])
+AC_CHECK_HEADERS([netdb.h netinet/tcp.h asm/types.h endian.h sys/ioctl.h])
 AC_CHECK_FUNCS([gethostbyname socket connect])
 
 # portals/utils/debug.c