From f8ae3b549da3bd41b36d8c7719d4411fe7b900aa Mon Sep 17 00:00:00 2001
From: brian <brian>
Date: Wed, 7 May 2008 20:35:16 +0000
Subject: [PATCH] b=15316 i=cliffw i=wangyb

Build OFED 1.3 kernel-ib* RPMs for the vendor kernels we support patchless
clients on (RHEL5 and SLES10).
Build Lustre with the above OFED 1.3 support (i.e. for patchless clients).
---
 build/lbuild                   | 60 +++++++++++++++++++++++++++++++++-
 lnet/autoconf/lustre-lnet.m4   | 10 +++++-
 lnet/klnds/o2iblnd/Makefile.in |  4 ++-
 3 files changed, 71 insertions(+), 3 deletions(-)

diff --git a/build/lbuild b/build/lbuild
index 5c35f107a3..4c7294faa7 100755
--- a/build/lbuild
+++ b/build/lbuild
@@ -1047,7 +1047,20 @@ unpack_linux_rpm()
                 LINUXOBJ="$(pwd)/$src/$objects"
             fi
         done
-        [ -z "$LINUX" ] && RC=255
+        if [ -z "$LINUX" ]; then
+            RC=255
+        else
+            # dig out the release version
+            local LINUXRELEASEHEADER=version.h
+            if test -s ${LINUXOBJ:-$LINUX}/include/linux/utsrelease.h ; then
+                LINUXRELEASEHEADER=utsrelease.h
+            fi
+            LINUXRELEASE=$(sed -ne 's/#define UTS_RELEASE "\(.*\)"$/\1/p' ${LINUXOBJ:-$LINUX}/include/linux/$LINUXRELEASEHEADER)
+            if [ -z "$LINUXRELEASE" ]; then
+                echo "Failed to find linux release in ${LINUXOBJ:-$LINUX}/include/linux/$LINUXRELEASEHEADER"
+                RC=255
+            fi
+        fi
     else
         RC=255
     fi
@@ -1213,6 +1226,41 @@ build_linux()
     return
 }
 
+build_kernel_ib()
+{
+    # build kernel-ib{,-devel}
+    # some I/B drivers are architecture dependent and kernel-ib's configure
+    # does not figure it out for us ~sigh~
+    local configure_options=""
+    case "$TARGET_ARCH" in
+	x86_64 | ia64)
+	    configure_options="--with-ipath_inf-mod"
+	    ;;
+	ppc64)
+	    configure_options="--with-ipath_inf-mod --with-ehca-mod"
+	    ;;
+    esac
+    $RPMBUILD --rebuild --define 'build_kernel_ib 1' --define 'build_kernel_ib_devel 1' \
+	      --define "_topdir ${TOPDIR}" --target ${TARGET_ARCH} \
+	      --define "KVERSION ${LINUXRELEASE}" \
+	      --define "KSRC ${LINUXOBJ:-${LINUX}}" \
+	      --define "LIB_MOD_DIR /lib/modules/${LINUXRELEASE}/updates" \
+	      --define "configure_options --without-quilt --with-core-mod --with-user_mad-mod --with-user_access-mod --with-addr_trans-mod --with-srp-target-mod --with-core-mod --with-mthca-mod --with-mlx4-mod --with-cxgb3-mod --with-nes-mod --with-ipoib-mod --with-sdp-mod --with-srp-mod --without-srp-target-mod --with-rds-mod --with-iser-mod --with-qlgc_vnic-mod --with-madeye-mod $configure_options" ${TOPDIR}/OFED/SRPMS/ofa_kernel-${OFED_VERSION}-ofed${OFED_VERSION}.src.rpm
+
+    if [ ${PIPESTATUS[0]} != 0 ]; then
+        fatal 1 "Error building kernel-ib"
+    fi
+
+    pushd "$TOPDIR" >/dev/null
+    rm -rf kernel-ib-devel
+    mkdir kernel-ib-devel
+    cd kernel-ib-devel
+    local rpm=$(ls $TOPDIR/RPMS/*/kernel-ib-devel-${OFED_VERSION}-${LINUXRELEASE//-/_}.*.rpm)
+    rpm2cpio -itv < $rpm | cpio -id
+    CONFIGURE_FLAGS="--with-o2ib=$(pwd)/usr/src/ofa_kernel ${CONFIGURE_FLAGS}"
+    popd >/dev/null
+}
+
 #build patchless lustre
 patchless_build_sequence()
 {
@@ -1237,6 +1285,16 @@ patchless_build_sequence()
     esac
 
     unpack_linux_rpm $type $delimiter && rpmfound=true
+
+    [ -d SRPMS ] || mkdir SRPMS
+    [ -d RPMS ] || mkdir RPMS
+    [ -d BUILD ] || mkdir BUILD
+    [ -d SOURCES ] || mkdir SOURCES
+
+    # first build kernel-ib
+    if [ -n "$OFED_VERSION" ]; then
+        $rpmfound && build_kernel_ib
+    fi
     ( $rpmfound ) && build_lustre && buildsuccess=true && find_linux_source_rpm
 
     if $buildsuccess; then
diff --git a/lnet/autoconf/lustre-lnet.m4 b/lnet/autoconf/lustre-lnet.m4
index 4a4792748c..5b027cde33 100644
--- a/lnet/autoconf/lustre-lnet.m4
+++ b/lnet/autoconf/lustre-lnet.m4
@@ -577,6 +577,14 @@ else
 		        O2IBCPPFLAGS=""
 		])
 
+		# we know at this point that the found OFED source is good
+		if test \( $ENABLEO2IB = 3 -a -f $O2IBPATH/Module.symvers \); then
+			AC_MSG_NOTICE([adding $O2IBPATH/Module.symvers to $PWD/Module.symvers])
+			cat $O2IBPATH/Module.symvers >> $PWD/Module.symvers
+		else
+			AC_MSG_ERROR([an external source tree was specified for o2iblnd however I  could not find a $O2IBPATH/Module.symvers there])
+		fi
+
 		# version checking is a hack and isn't reliable,
 		# we need verify it with each new ofed release
 
@@ -631,7 +639,7 @@ AC_ARG_WITH([openib],
 if test $ENABLEOPENIB -eq 0; then
 	AC_MSG_RESULT([disabled])
 elif test ! \( -f ${OPENIBPATH}/include/ts_ib_core.h -a \
-               -f ${OPENIBPATH}/include/ts_ib_cm.h -a\
+               -f ${OPENIBPATH}/include/ts_ib_cm.h -a \
 	       -f ${OPENIBPATH}/include/ts_ib_sa_client.h \); then
 	AC_MSG_RESULT([no])
 	case $ENABLEOPENIB in
diff --git a/lnet/klnds/o2iblnd/Makefile.in b/lnet/klnds/o2iblnd/Makefile.in
index 52a194d19d..569c266a2d 100644
--- a/lnet/klnds/o2iblnd/Makefile.in
+++ b/lnet/klnds/o2iblnd/Makefile.in
@@ -1,6 +1,8 @@
 MODULES := ko2iblnd
 ko2iblnd-objs := o2iblnd.o o2iblnd_cb.o o2iblnd_modparams.o
 
-EXTRA_POST_CFLAGS := @O2IBCPPFLAGS@
+# Need to make sure we use PRE, not POST here so that an external OFED
+# source pool overrides any in-kernel OFED sources
+EXTRA_PRE_CFLAGS := @O2IBCPPFLAGS@
 
 @INCLUDE_RULES@
-- 
GitLab