mirror of
https://github.com/SCST-project/scst.git
synced 2026-05-14 09:11:27 +00:00
vanilla Linux kernel version. When I submitted this script for inclusion in the SCST Subversion repository the SRPT target driver was excluded by default because of checkpatch errors triggered by the SRPT source code. These errors have been fixed considerable time ago. Hence the patch below makes inclusion of the SRPT driver the default. This patch has been tested by verifying that the generated patch still applies cleanly to the 2.6.25.17 kernel, and that the patched kernel still compiles cleanly. Signed-off-by: Bart Van Assche <bart.vanassche@gmail.com> git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@511 d57e44dd-8a1f-0410-8b47-8ef2f437770f
267 lines
6.6 KiB
Bash
Executable File
267 lines
6.6 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
############################################################################
|
|
#
|
|
# Script for converting the SCST source tree as it exists in the Subversion
|
|
# repository to a Linux kernel patch.
|
|
#
|
|
# Copyright (C) 2008 Bart Van Assche <bart.vanassche@gmail.com>
|
|
#
|
|
# This program is free software; you can redistribute it and/or
|
|
# modify it under the terms of the GNU General Public License
|
|
# as published by the Free Software Foundation, version 2
|
|
# of the License.
|
|
#
|
|
# This program is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
#
|
|
############################################################################
|
|
|
|
########################
|
|
# Function definitions #
|
|
########################
|
|
|
|
function usage {
|
|
echo "Usage: $0 [-q] [-s] [-m] <kernel version>, where: "
|
|
echo " -q - add qla2x00t driver"
|
|
echo " -s - exclude srpt driver"
|
|
echo " -m - add mpt target driver"
|
|
}
|
|
|
|
# Convert an existing patch.
|
|
# $1: path of patch to be added.
|
|
# $2: path in kernel tree of file to be patched.
|
|
function add_patch {
|
|
if [ ! -e "$1" ]; then
|
|
echo "Error: could not find $1." >&2
|
|
exit 1
|
|
fi
|
|
|
|
sed -e "s:^--- [^ ]*:--- orig/linux-${kernel_version}/$2:" \
|
|
-e "s:^+++ [^ ]*:+++ linux-${kernel_version}/$2:" \
|
|
< "$1"
|
|
}
|
|
|
|
# Generate a patch for a file to be added to the kernel source tree, and strip
|
|
# trailing whitespace from C source files while converting the file to patch
|
|
# format.
|
|
# $1: path of file to be added.
|
|
# $2: path in kernel tree where file should be added.
|
|
function add_file {
|
|
local a b
|
|
|
|
if [ ! -e "$1" ]; then
|
|
echo "Error: could not find $1." >&2
|
|
exit 1
|
|
fi
|
|
|
|
# Only include files that were not generated by the build process
|
|
# -- skip *.mod.c.
|
|
if [ "$1" = "${1%.mod.c}" -a "$1" ]; then
|
|
cat <<EOF
|
|
diff -uprN orig/linux-${kernel_version}/$2 linux-${kernel_version}/$2
|
|
--- orig/linux-${kernel_version}/$2
|
|
+++ linux-${kernel_version}/$2
|
|
@@ -0,0 +1,$(wc -l "$1" | { read a b; echo $a; }) @@
|
|
EOF
|
|
if [ "${2%.[ch]}" != "$2" ]; then
|
|
sed -e 's/sBUG(/BUG(/g' -e 's/sBUG_ON(/BUG_ON(/g' -e 's/^/+/' \
|
|
-e 's/^ \([^ ]*:\)$/\1/' < "$1"
|
|
else
|
|
sed -e 's/sBUG(/BUG(/g' -e 's/sBUG_ON(/BUG_ON(/g' -e 's/^/+/' < "$1"
|
|
fi
|
|
fi
|
|
}
|
|
|
|
|
|
#########################
|
|
# Argument verification #
|
|
#########################
|
|
|
|
qla2x00t="false"
|
|
srpt="true"
|
|
mpt_scst="false"
|
|
|
|
if [ ! -e scst -o ! -e iscsi-scst -o ! -e srpt ]; then
|
|
echo "Please run this script from inside the SCST subversion source tree."
|
|
exit 1
|
|
fi
|
|
|
|
set -- $(/usr/bin/getopt hmqs "$@")
|
|
while [ "$1" != "${1#-}" ]
|
|
do
|
|
case "$1" in
|
|
'-h') usage; exit 1;;
|
|
'-m') mpt_scst="true"; shift;;
|
|
'-q') qla2x00t="true"; shift;;
|
|
'-s') srpt="false"; shift;;
|
|
'--') shift;;
|
|
*) usage; exit 1;;
|
|
esac
|
|
done
|
|
|
|
if [ $# != 1 ]; then
|
|
usage
|
|
exit 1
|
|
fi
|
|
|
|
|
|
####################
|
|
# Patch Generation #
|
|
####################
|
|
|
|
kernel_version="$1"
|
|
kpatch=( \
|
|
"scst/kernel/scst_exec_req_fifo-${kernel_version}.patch" \
|
|
"iscsi-scst/kernel/patches/put_page_callback-${kernel_version}.patch" \
|
|
)
|
|
|
|
for p in "${kpatch[@]}"
|
|
do
|
|
if [ ! -e "$p" ]; then
|
|
echo "Error: kernel version ${kernel_version} is not supported by SCST."
|
|
echo "(could not find file $p)."
|
|
exit 1
|
|
fi >&2
|
|
done
|
|
|
|
|
|
# Redirect the output of all subsequent commands to the specialize-patch script
|
|
|
|
trap "rm -f ${fifo}" EXIT
|
|
fifo=/tmp/generate-kernel-patch-fifo.$$
|
|
rm -f "${fifo}"
|
|
mkfifo "${fifo}"
|
|
"$(dirname $0)/specialize-patch" -v kernel_version="${kernel_version}" \
|
|
< "${fifo}" &
|
|
exec >"${fifo}"
|
|
|
|
# General kernel patches.
|
|
|
|
cat "${kpatch[@]}"
|
|
|
|
|
|
# Directory include/scst/
|
|
|
|
for f in scst/include/*h
|
|
do
|
|
add_file "${f}" "include/scst/${f#scst/include/}"
|
|
done
|
|
|
|
|
|
# Directory drivers/
|
|
|
|
add_patch "scst/kernel/in-tree/Kconfig.drivers.Linux-${kernel_version}.patch" \
|
|
"drivers/Kconfig"
|
|
|
|
add_patch "scst/kernel/in-tree/Makefile.drivers.Linux-${kernel_version}.patch"\
|
|
"drivers/Makefile"
|
|
|
|
|
|
# Directory drivers/scst/
|
|
|
|
add_file "scst/kernel/in-tree/Kconfig.scst" "drivers/scst/Kconfig"
|
|
|
|
add_file "scst/kernel/in-tree/Makefile.scst" "drivers/scst/Makefile"
|
|
|
|
add_file "scst/README_in-tree" "Documentation/scst/README.scst"
|
|
|
|
for f in scst/src/*.[ch]
|
|
do
|
|
add_file "${f}" "drivers/scst/${f#scst/src/}"
|
|
done
|
|
|
|
|
|
# Directory drivers/scst/dev_handlers/
|
|
|
|
add_file "scst/kernel/in-tree/Makefile.dev_handlers" \
|
|
"drivers/scst/dev_handlers/Makefile"
|
|
|
|
for f in scst/src/dev_handlers/*.[ch]
|
|
do
|
|
add_file "${f}" "drivers/scst/dev_handlers/${f#scst/src/dev_handlers/}"
|
|
done
|
|
|
|
|
|
# Directory drivers/scst/iscsi-scst/
|
|
|
|
# Make sure the file iscsi-scst/iscsi_scst_itf_ver.h is up to date.
|
|
make -s -C iscsi-scst include/iscsi_scst_itf_ver.h
|
|
|
|
for f in iscsi-scst/include/*h
|
|
do
|
|
add_file "${f}" "include/scst/${f#iscsi-scst/include/}"
|
|
done
|
|
|
|
add_file "iscsi-scst/kernel/Makefile.in-kernel" \
|
|
"drivers/scst/iscsi-scst/Makefile"
|
|
|
|
add_file "iscsi-scst/kernel/Kconfig" "drivers/scst/iscsi-scst/Kconfig"
|
|
|
|
for f in iscsi-scst/kernel/*.[ch]
|
|
do
|
|
add_file "${f}" "drivers/scst/iscsi-scst/${f#iscsi-scst/kernel/}"
|
|
done
|
|
|
|
|
|
# Directory drivers/scst/qla2x00-target/
|
|
|
|
if [ "${qla2x00t}" = "true" ]; then
|
|
|
|
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_def.h" \
|
|
# "drivers/scst/qla2x00-target/qla2x_tgt_def.h"
|
|
|
|
# add_file "qla2x00t/qla2x00-target/README" \
|
|
# "Documentation/scst/README.qla2x00t"
|
|
|
|
for f in qla2x00t/qla2x00-target/*.[ch]
|
|
do
|
|
add_file "${f}" "drivers/scst/qla2xxx-target/${f#qla2x00t/qla2x00-target/}"
|
|
done
|
|
|
|
fi
|
|
|
|
# Directory drivers/infiniband/ulp/srpt/
|
|
|
|
if [ "$srpt" = "true" ]; then
|
|
|
|
add_file "srpt/src/Kconfig" "drivers/scst/srpt/Kconfig"
|
|
|
|
add_file "srpt/src/Makefile.in_kernel" "drivers/scst/srpt/Makefile"
|
|
|
|
add_file "srpt/README" "Documentation/scst/README.srpt"
|
|
|
|
for f in srpt/src/*.[ch]
|
|
do
|
|
add_file "${f}" "drivers/scst/srpt/${f#srpt/src/}"
|
|
done
|
|
|
|
fi
|
|
|
|
# Directory drivers/message/fusion/mpt_scst
|
|
|
|
if [ "$mpt_scst" = "true" ]; then
|
|
|
|
add_patch "mpt/in-tree/Kconfig-2.6.24.diff" "drivers/message/fusion/Kconfig"
|
|
|
|
add_patch "mpt/in-tree/Makefile.diff" "drivers/message/fusion/Makefile"
|
|
|
|
add_file "mpt/Makefile" "drivers/message/fusion/mpt_scst/Makefile"
|
|
|
|
add_file "mpt/Kconfig" "drivers/message/fusion/mpt_scst/Kconfig"
|
|
|
|
for f in mpt/*.[ch]
|
|
do
|
|
add_file "${f}" "drivers/message/fusion/mpt_scst/${f#mpt/}"
|
|
done
|
|
|
|
fi
|