From ebc6c27bde3f87df60cb2e0768d344d5ada3a1eb Mon Sep 17 00:00:00 2001 From: Bart Van Assche Date: Sun, 11 Oct 2009 15:54:04 +0000 Subject: [PATCH] Reworked qla2x00t patch generation process: - Moved qla2x00t patch generation code from qla2x00t/Makefile to qla2x00t/extract-qla2xxx-orig and qla2x00t/generate-in-tree-patches. Restored qla2x00t/Makefile to r1104. - scripts/run-regression-tests now passes the full kernel version (including patch level) to scripts/generate-kernel-patch. - scripts/generate-kernel-patch can now generate patches for the files in drivers/scsi/qla2xxx for any kernel version instead of only 2.6.26.8. git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@1198 d57e44dd-8a1f-0410-8b47-8ef2f437770f --- qla2x00t/Makefile | 80 +------------------------ qla2x00t/extract-qla2xxx-orig | 97 +++++++++++++++++++++++++++++++ qla2x00t/generate-in-tree-patches | 21 +++++++ scripts/generate-kernel-patch | 24 ++++---- scripts/run-regression-tests | 4 +- 5 files changed, 135 insertions(+), 91 deletions(-) create mode 100755 qla2x00t/extract-qla2xxx-orig create mode 100755 qla2x00t/generate-in-tree-patches diff --git a/qla2x00t/Makefile b/qla2x00t/Makefile index a4a5878fd..2d9fefea5 100644 --- a/qla2x00t/Makefile +++ b/qla2x00t/Makefile @@ -3,89 +3,11 @@ qla2xxx-y := qla_os.o qla_init.o qla_mbx.o qla_iocb.o qla_isr.o qla_gs.o \ obj-$(CONFIG_SCSI_QLA_FC) += qla2xxx.o -# The qla2xxx-orig/% targets are not built correctly when parallel building -# (make -j...) is enabled, so disable parallel builds. -.NOTPARALLEL: - clean: rm -f *.o *.ko .*.cmd *.mod.c .*.d .depend *~ Modules.symvers \ Module.symvers Module.markers modules.order - rm -f in-tree-patches/*.patch - rm -rf qla2xxx-orig rm -rf .tmp_versions extraclean: clean -DOWNLOAD_DIR=$(HOME)/software/downloads - -QLA2XXX_ORIG = \ - Kconfig \ - Makefile \ - qla_attr.c \ - qla_dbg.c \ - qla_dbg.h \ - qla_def.h \ - qla_devtbl.h \ - qla_dfs.c \ - qla_fw.h \ - qla_gbl.h \ - qla_gs.c \ - qla_init.c \ - qla_inline.h \ - qla_iocb.c \ - qla_isr.c \ - qla_mbx.c \ - qla_mid.c \ - qla_os.c \ - qla_settings.h \ - qla_sup.c \ - qla_version.h - -GENERATED_PATCHES = \ - in-tree-patches/qla2xxx-Kconfig-2.6.26.patch \ - in-tree-patches/qla2xxx-qla_def.h-2.6.26.patch \ - in-tree-patches/qla2xxx-qla_gs.c-2.6.26.patch \ - in-tree-patches/qla2xxx-qla_mbx.c-2.6.26.patch \ - in-tree-patches/qla2xxx-qla_version.h-2.6.26.patch \ - in-tree-patches/qla2xxx-Makefile-2.6.26.patch \ - in-tree-patches/qla2xxx-qla_devtbl.h-2.6.26.patch \ - in-tree-patches/qla2xxx-qla_init.c-2.6.26.patch \ - in-tree-patches/qla2xxx-qla_mid.c-2.6.26.patch \ - in-tree-patches/qla2xxx-qla_attr.c-2.6.26.patch \ - in-tree-patches/qla2xxx-qla_dfs.c-2.6.26.patch \ - in-tree-patches/qla2xxx-qla_inline.h-2.6.26.patch \ - in-tree-patches/qla2xxx-qla_os.c-2.6.26.patch \ - in-tree-patches/qla2xxx-qla_dbg.c-2.6.26.patch \ - in-tree-patches/qla2xxx-qla_fw.h-2.6.26.patch \ - in-tree-patches/qla2xxx-qla_iocb.c-2.6.26.patch \ - in-tree-patches/qla2xxx-qla_settings.h-2.6.26.patch \ - in-tree-patches/qla2xxx-qla_dbg.h-2.6.26.patch \ - in-tree-patches/qla2xxx-qla_gbl.h-2.6.26.patch \ - in-tree-patches/qla2xxx-qla_isr.c-2.6.26.patch \ - in-tree-patches/qla2xxx-qla_sup.c-2.6.26.patch - -$(DOWNLOAD_DIR)/linux-%: - cd $(DOWNLOAD_DIR) \ - && wget -q -nc ftp://ftp.eu.kernel.org/pub/linux/kernel/v2.6/$(@F) - -$(DOWNLOAD_DIR)/patch-%: - cd $(DOWNLOAD_DIR) \ - && wget -q -nc ftp://ftp.eu.kernel.org/pub/linux/kernel/v2.6/$(@F) - -qla2xxx-orig/%: $(DOWNLOAD_DIR)/linux-2.6.26.tar.bz2 \ - $(DOWNLOAD_DIR)/patch-2.6.26.8.bz2 - rm -rf linux-2.6.26 - tar -xjf $(DOWNLOAD_DIR)/linux-2.6.26.tar.bz2 - cd linux-2.6.26 \ - && bzip2 -cd < $(DOWNLOAD_DIR)/patch-2.6.26.8.bz2 | patch -p1 -f -s - touch linux-2.6.26/drivers/scsi/qla2xxx/* - mkdir -p qla2xxx-orig - mv linux-2.6.26/drivers/scsi/qla2xxx/* qla2xxx-orig - rm -rf linux-2.6.26 - -in-tree-patches/qla2xxx-%-2.6.26.patch: % qla2xxx-orig/% - f="$$(echo "$@" | sed -e 's:^in-tree-patches/qla2xxx-::' -e 's:-2.6.26.patch$$::')"; diff -up "qla2xxx-orig/$$f" "$$f" >"$@"; true - -patches: $(GENERATED_PATCHES) - -.PHONY: clean extraclean patches +.PHONY: clean extraclean diff --git a/qla2x00t/extract-qla2xxx-orig b/qla2x00t/extract-qla2xxx-orig new file mode 100755 index 000000000..6819ef8ee --- /dev/null +++ b/qla2x00t/extract-qla2xxx-orig @@ -0,0 +1,97 @@ +#!/bin/bash + +######################## +# Function definitions # +######################## + +# First three components of the kernel version number. +function kernel_version { + echo "$1" | sed -n 's/^\([0-9]*\.[0-9]*\.[0-9]*\).*$/\1/p' +} + +# Last component of the kernel version, or the empty string if $1 has only +# three components. +function patchlevel { + echo "$1" | sed -n 's/^\([0-9]*\.[0-9]*\.[0-9]*\)[.-]\(.*\)$/\2/p' +} + +# Create a linux-$1 tree in the current directory, where $1 is a kernel +# version number with either three or four components. +function extract_kernel_tree { + local kver="$(kernel_version $1)" + local plevel="$(patchlevel $1)" + local tmpdir=kernel-tree-tmp-$$ + + rm -rf "linux-$1" "${tmpdir}" + mkdir "${tmpdir}" || return $? + ( + cd "${tmpdir}" || return $? + tar xjf "${kernel_sources}/linux-${kver}.tar.bz2" || return $? + cd "linux-${kver}" || return $? + if [ "${plevel}" != "" ]; then + bzip2 -cd "${kernel_sources}/patch-$1.bz2" \ + | patch -p1 -f -s || return $? + fi + cd .. + mv "linux-${kver}" "../linux-$1" || return $? + ) + rmdir "${tmpdir}" +} + +# Download the file from URL $1 and save it in the current directory. +function download_file { + if [ ! -e "$(basename "$1")" ]; then + if [ "${quiet_download}" = "false" ]; then + echo "Downloading $1 ..." + fi + if ! wget -q -nc "$1"; then + echo "Downloading $1 failed." + return 1 + fi + fi +} + +# Make sure the kernel tarball and patch file are present in directory +# ${kernel_sources}. Download any missing files from ${kernel_mirror}. +function download_kernel { + local kver="$(kernel_version $1)" + local plevel="$(patchlevel $1)" + + mkdir -p "${kernel_sources}" || return $? + test -w "${kernel_sources}" || return $? + ( + cd "${kernel_sources}" || return $? + download_file "${kernel_mirror}/linux-$(kernel_version $1).tar.bz2" \ + || return $? + if [ "${plevel}" != "" ]; then + download_file "${kernel_mirror}/patch-$1.bz2" || return $? + fi + ) +} + + +######################### +# Argument verification # +######################### + +# Where to store persistenly downloaded kernel tarballs and kernel patches. +kernel_sources="$HOME/software/downloads" +# URL for downloading kernel tarballs and kernel patches. +kernel_mirror="ftp://ftp.eu.kernel.org/pub/linux/kernel/v2.6" + +kernel_version="$1" + +if [ "$1" = "" ]; then + echo "Error: missing kernel version argument." + exit 1 +fi + +mkdir -p qla2xxx-orig +cd qla2xxx-orig || exit $? +extract_kernel_tree "${kernel_version}" +touch linux-*/drivers/scsi/qla2xxx/* +rm -rf "${kernel_version}" +mkdir -p "${kernel_version}" +mv linux-*/drivers/scsi/qla2xxx/* "${kernel_version}" +rm -rf linux-* +cd .. diff --git a/qla2x00t/generate-in-tree-patches b/qla2x00t/generate-in-tree-patches new file mode 100755 index 000000000..8b68424ab --- /dev/null +++ b/qla2x00t/generate-in-tree-patches @@ -0,0 +1,21 @@ +#!/bin/bash + +kernel_version="$1" + +if [ "$1" = "" ]; then + echo "Error: missing kernel version argument." + exit 1 +fi + +mkdir -p in-tree-patches/"${kernel_version}" + +for f in qla2xxx-orig/"${kernel_version}"/* +do + g="${f#qla2xxx-orig/${kernel_version}/}" + f1="$f" + f2="$g" + f3="in-tree-patches/${kernel_version}/$g.patch" + if [ "$f1" -nt "$f3" -o "$f2" -nt "$f3" ]; then + diff -up "$f1" "$f2" > "$f3" + fi +done diff --git a/scripts/generate-kernel-patch b/scripts/generate-kernel-patch index 6adc3fb78..9eb9cd5c0 100755 --- a/scripts/generate-kernel-patch +++ b/scripts/generate-kernel-patch @@ -191,6 +191,7 @@ fi # Strip patch level from the kernel version number. if [ "${1#[0-9]*.[0-9]*.[0-9]*.[0-9]*}" != "$1" ]; then kernel_version="${1%.[0-9]*}" + patch_level="${1%${kernel_version}}" else kernel_version="$1" fi @@ -339,27 +340,30 @@ add_file "iscsi-scst/README_in-tree" "Documentation/scst/README.iscsi" \ if [ "${qla2x00t}" = "true" ]; then - make -C qla2x00t -s patches + if [ ! -e qla2x00t/qla2xxx-orig/$1 ]; then + ( cd qla2x00t && ./extract-qla2xxx-orig 2.6.26.8 ) + fi + ( cd qla2x00t && ./generate-in-tree-patches "$1" ) - for f in $(ls qla2x00t/in-tree-patches/qla2xxx-*-${kernel_version}.patch 2>/dev/null) + for f in $(ls qla2x00t/in-tree-patches/"$1"/*.patch 2>/dev/null) do - g="${f#qla2x00t/in-tree-patches/qla2xxx-}" - g="${g%-${kernel_version}.patch}" + g="${f#qla2x00t/in-tree-patches/$1/}" + g="${g%.patch}" add_patch "${f}" "drivers/scsi/qla2xxx/${g}" done - add_file "qla2x00t/qla2x00-target/Makefile_in-tree" \ - "drivers/scst/qla2xxx-target/Makefile" - - add_file "qla2x00t/qla2x00-target/Kconfig" \ - "drivers/scst/qla2xxx-target/Kconfig" - add_file "qla2x00t/qla2x_tgt.h" \ "drivers/scsi/qla2xxx/qla2x_tgt.h" add_file "qla2x00t/qla2x_tgt_def.h" \ "drivers/scsi/qla2xxx/qla2x_tgt_def.h" + add_file "qla2x00t/qla2x00-target/Makefile_in-tree" \ + "drivers/scst/qla2xxx-target/Makefile" + + add_file "qla2x00t/qla2x00-target/Kconfig" \ + "drivers/scst/qla2xxx-target/Kconfig" + for f in $(ls qla2x00t/qla2x00-target/*.[ch] 2>/dev/null) do add_file "${f}" "drivers/scst/qla2xxx-target/${f#qla2x00t/qla2x00-target/}" diff --git a/scripts/run-regression-tests b/scripts/run-regression-tests index aec5f0dbb..e5516d10a 100755 --- a/scripts/run-regression-tests +++ b/scripts/run-regression-tests @@ -292,7 +292,7 @@ function generate_kernel_patch { $([ "${scst_local}" = "true" ] && echo -- "-l") \ $([ "${mpt_scst}" = "true" ] && echo -- "-m") \ $([ "${qla2x00t}" = "true" ] && echo -- "-q") \ - ${kver} > "${patchfile}" + ${1} > "${patchfile}" SIGNED_OFF_BY="..." \ scripts/generate-kernel-patch \ @@ -300,7 +300,7 @@ function generate_kernel_patch { $([ "${scst_local}" = "true" ] && echo -- "-l") \ $([ "${mpt_scst}" = "true" ] && echo -- "-m") \ $([ "${qla2x00t}" = "true" ] && echo -- "-q") \ - ${kver} > "${patchfile_m}" + ${1} > "${patchfile_m}" } # Generate a kernel patch through scripts/generate-kernel-patch and test