Some kernels are broken, handle build failure as success
authorMichael Jeanson <mjeanson@efficios.com>
Fri, 11 Sep 2015 18:30:25 +0000 (14:30 -0400)
committerMichael Jeanson <mjeanson@efficios.com>
Fri, 11 Sep 2015 18:30:25 +0000 (14:30 -0400)
scripts/lttng-modules/build.sh

index 4f356b9b71d245239b47de17a12e8a202dea4d91..de493f92a43f53613578d913e4ef3f4ad1c8f2b0 100755 (executable)
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
+# Kernel version compare functions
+verlte() {
+    [  "$1" = "`printf '%s\n%s' $1 $2 | sort -V | head -n1`" ]
+}
+
+verlt() {
+    [ "$1" = "$2" ] && return 1 || verlte $1 $2
+}
+
+vergte() {
+    [  "$1" = "`printf '%s\n%s' $1 $2 | sort -V | tail -n1`" ]
+}
+
+vergt() {
+    [ "$1" = "$2" ] && return 1 || vergte $1 $2
+}
+
+
 # Use all CPU cores
 NPROC=$(nproc)
 
@@ -31,13 +49,41 @@ mkdir -p "${BUILDDIR}"
 # Enter source dir
 cd "${SRCDIR}"
 
-# Fix linux Makefile
+# Fix path to linux src in builddir Makefile
 sed -i "s#MAKEARGS := -C .*#MAKEARGS := -C ${LNXSRCDIR}#" "${LNXBINDIR}"/Makefile
 
-# Build modules
-make -j${NPROC} -C "${LNXBINDIR}" M="$(pwd)"
+# Get kernel version from source tree
+cd "${LNXBINDIR}"
+KVERSION=$(make kernelversion)
+cd -
+
+# kernels 3.10 to 3.10.13 and 3.11 to 3.11.2 introduce a deadlock in the
+# timekeeping subsystem. We want those build to fail.
+if { vergte "$KVERSION" "3.10" && verlte "$KVERSION" "3.10.13"; } || \
+   { vergte "$KVERSION" "3.11" && verlte "$KVERSION" "3.11.2"; }; then
+
+    set +e
+
+    # Build modules
+    make -j${NPROC} -C "${LNXBINDIR}" M="$(pwd)"
+
+    # We expect this build to fail, if it doesn't, fail the job.
+    if [ "$?" -eq 0 ]; then
+        exit 1
+    fi
+
+    # We have to publish at least one file or the build will fail
+    echo "This kernel is broken, there is a deadlock in the timekeeping subsystem." > "${BUILDDIR}/BROKEN.txt"
+
+    set -e
+
+else # Regular build
+
+    # Build modules
+    make -j${NPROC} -C "${LNXBINDIR}" M="$(pwd)"
 
-# Install modules to build dir
-make INSTALL_MOD_PATH="${BUILDDIR}" -C "${LNXBINDIR}" M="$(pwd)" modules_install
+    # Install modules to build dir
+    make INSTALL_MOD_PATH="${BUILDDIR}" -C "${LNXBINDIR}" M="$(pwd)" modules_install
+fi
 
 # EOF
This page took 0.057139 seconds and 4 git commands to generate.