diff --git a/scripts/generate-kernel-patch b/scripts/generate-kernel-patch index d96afa0e5..8800e589e 100755 --- a/scripts/generate-kernel-patch +++ b/scripts/generate-kernel-patch @@ -5,7 +5,7 @@ # Script for converting the SCST source tree as it exists in the Subversion # repository to a Linux kernel patch. # -# Copyright (C) 2008-2020 Bart Van Assche +# Copyright (C) 2008-2009 Bart Van Assche # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License @@ -105,21 +105,6 @@ EOF # Run the script specialize_patch with appropriate options on the patch # passed via stdin and send the specialized patch to stdout. function specialize_patch { - local arr ao - readarray -d ^ -t arr <<<"$1^^^^" - local kver=${arr[0]} - local distro=${arr[1]} - local release=${arr[2]} - readarray -d . -t arr <<<"$release..." - local releasevermajor="${arr[0]}" - local releaseverminor="${arr[1]}" - if [ -n "$releasevermajor" ]; then - ao=( - -v RHEL_MAJOR=$releasevermajor - -v RHEL_MINOR=$releaseverminor - -v RHEL_RELEASE_CODE=$((releasevermajor * 256 + releaseverminor)) - ) - fi if [ "${enable_specialize}" = "true" ]; then if [ "${generating_upstream_patch}" = "true" ]; then scripts/filter-trace-entry-exit @@ -128,14 +113,14 @@ function specialize_patch { fi | "$(dirname "$0")/specialize-patch" \ "${specialize_patch_options[@]}" \ - -v kernel_version="${kver/-*}" \ - -v SCST_IO_CONTEXT="${scst_io_context}" "${ao[@]}" + -v kernel_version="${kver3}" \ + -v SCST_IO_CONTEXT="${scst_io_context}" else cat fi } -# Read a patch from stdin, specialize it for kernel version ${full_kver} +# Read a patch from stdin, specialize it for kernel version ${kver} # and write the output either to stdout or to the file $1 (if not empty), # depending on the value of the variable ${multiple_patches}. function process_patch { @@ -147,7 +132,7 @@ function process_patch { fi tmppatch="$(/bin/mktemp)" ( - specialize_patch "${full_kver}" + specialize_patch ) >"${tmppatch}" touch "${tmppatch}" { @@ -166,7 +151,7 @@ function process_patch { true fi else - specialize_patch "${full_kver}" + specialize_patch fi } @@ -223,7 +208,6 @@ if [ $# != 1 ]; then fi # Strip patch level from the kernel version number. -full_kver="$1" kver="$(kernel_version "$1")" # kver3: first three components of the version number. if [ "${1#2.}" != "$1" ]; then @@ -341,8 +325,7 @@ else "drivers/Kconfig" fi -if [ "${full_kver#2.6.32-}" = "${full_kver}" ] && - [ -e "scst/kernel/in-tree/Makefile.drivers.Linux-${kver}.patch" ]; then +if [ -e "scst/kernel/in-tree/Makefile.drivers.Linux-${kver}.patch" ]; then add_patch "scst/kernel/in-tree/Makefile.drivers.Linux-${kver}.patch"\ "drivers/Makefile" else @@ -523,7 +506,7 @@ add_file "iscsi-scst/README_in-tree" "Documentation/scst/README.iscsi" \ if [ "${qla2x00t}" = "true" ]; then - ( cd qla2x00t && "$PWD/generate-in-tree-patches" "$1" ) || exit $? + ( cd qla2x00t && ./generate-in-tree-patches "$1" ) for f in qla2x00t/in-tree-patches/"$1"/*.patch; do [ -e "$f" ] || continue @@ -549,17 +532,13 @@ if [ "${qla2x00t}" = "true" ]; then elif [ "${qla2x00t_32gbit}" = "true" ]; then - ( cd qla2x00t-32gbit && "$PWD/generate-in-tree-patches" "$1" ) || exit $? + ( cd qla2x00t-32gbit && ./generate-in-tree-patches "$1" ) for f in qla2x00t-32gbit/in-tree-patches/"$1"/*.patch; do [ -e "$f" ] || continue g="${f#qla2x00t-32gbit/in-tree-patches/$1/}" g="${g%.patch}" - if [ "$g" = "qla.h" ]; then - add_patch "${f}" "include/trace/events/${g}" - else - add_patch "${f}" "drivers/scsi/qla2xxx/${g}" - fi + add_patch "${f}" "drivers/scsi/qla2xxx/${g}" done for f in qla2x00t-32gbit/qla2x00-target/*.[ch]; do diff --git a/scripts/kernel-functions b/scripts/kernel-functions index 8c78ea7d3..87f75119e 100644 --- a/scripts/kernel-functions +++ b/scripts/kernel-functions @@ -2,9 +2,6 @@ # Shell functions for parsing the Linux kernel version and for downloading # from kernel.org. -# shellcheck source=./rhel-rpm-functions -source "$(dirname "$0")/../scripts/rhel-rpm-functions" || return $? - kernel_mirror="http://cdn.kernel.org/pub/linux/kernel" kernel_downloads="$HOME/software/downloads" kernel_tree="$HOME/software/linux-kernel" @@ -127,8 +124,8 @@ function extract_kernel_tree { # Patch a kernel tree where $1 is the kernel version. function patch_kernel { - if [ "$1" = "2.6.29" ] || [ "$1" = "2.6.29.1" ] || [ "$1" = "2.6.29.2" ] || - [ "$1" = "2.6.29.3" ]; then + if [ "$1" = "2.6.29" ] || [ "$1" = "2.6.29.1" ] || [ "$1" = "2.6.29.2" ] || [ "$1" = "2.6.29.3" ] + then patch -f -s -p1 <<'EOF' Make sure that branch profiling does not trigger sparse warnings. See also http://bugzilla.kernel.org/show_bug.cgi?id=12925 @@ -148,8 +145,8 @@ See also http://lkml.org/lkml/2009/4/5/120 #define likely_notrace(x) __builtin_expect(!!(x), 1) EOF fi - - if [ "${1#2.6.31}" != "$1" ]; then + if [ "${1#2.6.31}" != "$1" ] + then patch -f -s -p1 <<'EOF' Checking a 2.6.31.1 kernel configured with allyesconfig/allmodconfig with sparse (make C=2) triggers a sparse warning on code that uses the @@ -203,7 +200,6 @@ Get rid of sparse errors on sk_buff.protocol. #if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE) EOF fi - if [ "${1#3.13}" != "$1" ]; then if [ "$1" = "3.13" ] || [ "${1#3.13.}" -lt 6 ]; then patch -f -s -p1 <<'EOF' @@ -245,7 +241,6 @@ index 3f2793d..96e45ea 100644 EOF fi fi - if [ "${1#4.15}" != "$1" ]; then patch -f -s -p1 <<'EOF' From ad343a98e74e85aa91d844310e797f96fee6983b Mon Sep 17 00:00:00 2001 @@ -336,7 +331,6 @@ index d6d65537b0d9..6aad8308a0ac 100644 } EOF fi - case "$1" in 2.6.3[6-9]*|3.[0-9]|3.[0-9].*|3.1[01345]|3.1[01345].*|3.1[789]|3.1[789].*|4.[023567]|4.[023567].*) patch -p1 <<'EOF' @@ -402,9 +396,6 @@ index 0ed6ce300543..c324b43712f0 100644 KBUILD_LDFLAGS_MODULE := -T $(srctree)/scripts/module-common.lds EOF ;; - # The patch below does not apply on the CentOS 6 kernel. - 2.6.32-*) - ;; 2.6.3[1-5]*) patch -p1 <<'EOF' diff --git a/Makefile b/Makefile @@ -431,113 +422,6 @@ EOF ;; esac - case "$1" in - 4.18.0-*) # CentOS 8.x - patch -p1 <<'EOF' -From a6e60d84989fa0e91db7f236eda40453b0e44afa Mon Sep 17 00:00:00 2001 -From: Miguel Ojeda -Date: Sat, 19 Jan 2019 20:59:34 +0100 -Subject: [PATCH] include/linux/module.h: copy __init/__exit attrs to - init/cleanup_module - -The upcoming GCC 9 release extends the -Wmissing-attributes warnings -(enabled by -Wall) to C and aliases: it warns when particular function -attributes are missing in the aliases but not in their target. - -In particular, it triggers for all the init/cleanup_module -aliases in the kernel (defined by the module_init/exit macros), -ending up being very noisy. - -These aliases point to the __init/__exit functions of a module, -which are defined as __cold (among other attributes). However, -the aliases themselves do not have the __cold attribute. - -Since the compiler behaves differently when compiling a __cold -function as well as when compiling paths leading to calls -to __cold functions, the warning is trying to point out -the possibly-forgotten attribute in the alias. - -In order to keep the warning enabled, we decided to silence -this case. Ideally, we would mark the aliases directly -as __init/__exit. However, there are currently around 132 modules -in the kernel which are missing __init/__exit in their init/cleanup -functions (either because they are missing, or for other reasons, -e.g. the functions being called from somewhere else); and -a section mismatch is a hard error. - -A conservative alternative was to mark the aliases as __cold only. -However, since we would like to eventually enforce __init/__exit -to be always marked, we chose to use the new __copy function -attribute (introduced by GCC 9 as well to deal with this). -With it, we copy the attributes used by the target functions -into the aliases. This way, functions that were not marked -as __init/__exit won't have their aliases marked either, -and therefore there won't be a section mismatch. - -Note that the warning would go away marking either the extern -declaration, the definition, or both. However, we only mark -the definition of the alias, since we do not want callers -(which only see the declaration) to be compiled as if the function -was __cold (and therefore the paths leading to those calls -would be assumed to be unlikely). - -Link: https://lore.kernel.org/lkml/20190123173707.GA16603@gmail.com/ -Link: https://lore.kernel.org/lkml/20190206175627.GA20399@gmail.com/ -Suggested-by: Martin Sebor -Acked-by: Jessica Yu -Signed-off-by: Miguel Ojeda ---- - include/linux/module.h | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/include/linux/module.h b/include/linux/module.h -index 8fa38d3e7538..f5bc4c046461 100644 ---- a/include/linux/module.h -+++ b/include/linux/module.h -@@ -129,13 +129,13 @@ extern void cleanup_module(void); - #define module_init(initfn) \ - static inline initcall_t __maybe_unused __inittest(void) \ - { return initfn; } \ -- int init_module(void) __attribute__((alias(#initfn))); -+ int init_module(void) __attribute__((__copy__(initfn))) __attribute__((alias(#initfn))); - - /* This is only required if you want to be unloadable. */ - #define module_exit(exitfn) \ - static inline exitcall_t __maybe_unused __exittest(void) \ - { return exitfn; } \ -- void cleanup_module(void) __attribute__((alias(#exitfn))); -+ void cleanup_module(void) __attribute__((__copy__(exitfn))) __attribute__((alias(#exitfn))); - - #endif - -EOF - ;; - *) # CentOS 6.x and 7.x - patch -p1 <<'EOF' ---- linux-3.10.0-1127.el7/include/linux/init.h.orig 2020-05-09 20:55:48.638956513 -0700 -+++ linux-3.10.0-1127.el7/include/linux/init.h 2020-05-09 20:56:46.947612445 -0700 -@@ -309,13 +309,15 @@ - #define module_init(initfn) \ - static inline initcall_t __inittest(void) \ - { return initfn; } \ -- int init_module(void) __attribute__((alias(#initfn))); -+ int init_module(void) __attribute__((__copy__(initfn))) \ -+ __attribute__((alias(#initfn))); - - /* This is only required if you want to be unloadable. */ - #define module_exit(exitfn) \ - static inline exitcall_t __exittest(void) \ - { return exitfn; } \ -- void cleanup_module(void) __attribute__((alias(#exitfn))); -+ void cleanup_module(void) __attribute__((__copy__(exitfn)))\ -+ __attribute__((alias(#exitfn))); - - #define __setup_param(str, unique_id, fn) /* nothing */ - #define __setup(str, func) /* nothing */ -EOF - ;; - esac - # Use sed to patch the ____ilog2_NaN() prototype. sed -i 's/__attribute__((const, noreturn))/__attribute__((noreturn))/' \ include/linux/log2.h tools/include/linux/log2.h 2>/dev/null @@ -551,37 +435,10 @@ EOF done } -function download_and_extract_distro_rpm { - [ -n "$1" ] || return $? - local arr - readarray -d ^ -t arr <<<"$1^^^^" - local kver=${arr[0]} - local distro=${arr[1]} - local release=${arr[2]} - ( - cd "${kernel_downloads}" || exit $? - urls=($(get_srpm_urls "$distro" "$release" x86_64)) - for url in "${urls[@]}"; do - wget -q -nc "${url}/kernel-${kver}.src.rpm" && break - done - ) - local tmpdir=kernel-tree-tmp-$$ - rm -rf "linux-$1" "${tmpdir}" - mkdir "${tmpdir}" || return $? - ( - cd "${tmpdir}" && - rpm2cpio "${kernel_downloads}/kernel-${kver}.src.rpm" | - cpio -i --make-directories --quiet && - tar xaf linux-${kver}.tar.* && - mv "linux-${kver}" ".." && - cd "../linux-${kver}" - ) || return $? - rm -rf "${tmpdir}" -} - function download_and_extract_kernel_tree { if [ -e "${kernel_tree}" ]; then - { [ "${1/^}" = "$1" ] && + rm -rf "linux-$1" + mkdir "linux-$1" ( cd "${kernel_tree}" && { @@ -593,17 +450,12 @@ function download_and_extract_kernel_tree { git fetch stable } } && - { git tag -l "v$1" | grep -q '^v'; } && git archive "v$1" - ) | { - rm -rf "linux-$1" && - mkdir "linux-$1" && - tar -C "linux-$1" -xf- 2>/dev/null - }; } || download_and_extract_distro_rpm "$1" + ) | tar -C "linux-$1" -xf- else download_kernel "$1" && extract_kernel_tree "$1" fi && - (cd "linux-${1/^*}" && patch_kernel "${1/^*}") + (cd "linux-$1" && patch_kernel "$1") } # For shellcheck diff --git a/scripts/rhel-rpm-functions b/scripts/rhel-rpm-functions deleted file mode 100644 index ffccee089..000000000 --- a/scripts/rhel-rpm-functions +++ /dev/null @@ -1,112 +0,0 @@ -# -*- mode: shell-script -*- -# Shell functions for downloading and extracting a RHEL or RHEL clone RPM - -# Arguments: -# $1: Linux distribution name -# $2: Linux distribution version (major.minor) -# $3: architecture -function get_srpm_urls() { - local arch distro releasever releasevermajor releaseverminor - - distro="$1" - releasever="$2" - arch="$3" - IFS=. - set -- "$2" - unset IFS - releasevermajor="$1" - releaseverminor="$2" - - case "$distro" in - "CentOS"*) - case $releasever in - 5.*|6.[01]) - echo "http://vault.centos.org/${releasever}/os/SRPMS" - echo "http://vault.centos.org/${releasever}/updates/SRPMS";; - [67]*) - echo "http://vault.centos.org/${releasever}/os/Source/SPackages" - echo "http://vault.centos.org/${releasever}/updates/Source/SPackages";; - 8*) - echo "http://vault.centos.org/${releasever}/BaseOS/Source/SPackages/";; - esac - ;; - "Red Hat Enterprise Linux"*) - case $releasever in - [56].*) - echo "http://ftp.redhat.com/pub/redhat/linux/enterprise/${releasevermajor}Server/en/os/SRPMS" - echo "http://ftp.redhat.com/redhat/rhel/rc/7/Server/source/tree/Packages";; - esac - ;; - "Oracle Linux Server") - echo "http://public-yum.oracle.com/repo/OracleLinux/OL${releasevermajor}/${releaseverminor}/base/${arch}/getPackageSource" - echo "http://public-yum.oracle.com/repo/OracleLinux/OL${releasevermajor}/latest/${arch}/getPackageSource" - echo "http://public-yum.oracle.com/repo/OracleLinux/OL${releasevermajor}/UEK/latest/${arch}/getPackageSource" - ;; - "Scientific Linux") - case $releasever in - 5.*) - echo "http://ftp.scientificlinux.org/linux/scientific/$releasevermajor$releaseverminor/SRPMS/vendor";; - 6.*) - echo "http://ftp.scientificlinux.org/linux/scientific/$releasever/SRPMS/vendor";; - esac - ;; - *) - echo "Unknown type of distribution: $distro" >&2 - return 1 - ;; - esac -} - -# Arguments: -# $1: Linux distribution name -# $2: Linux distribution version (major.minor) -# $3: architecture -function get_rpm_urls() { - local arch distro releasever releasevermajor releaseverminor - - distro="$1" - releasever="$2" - arch="$3" - IFS=. - set -- "$2" - unset IFS - releasevermajor="$1" - releaseverminor="$2" - - case "$distro" in - "CentOS"*) - case $releasever in - 5.*) - echo "http://vault.centos.org/${releasever}/os/${arch}/CentOS http://vault.centos.org/${releasever}/updates/${arch}/RPMS";; - 6.[01]) - echo "http://vault.centos.org/${releasever}/os/${arch}/Packages" - echo "http://vault.centos.org/${releasever}/updates/${arch}/Packages";; - [67]*) - echo "https://mirrors.edge.kernel.org/centos/${releasever}/updates/${arch}/Packages" - echo "http://vault.centos.org/${releasever}/updates/${arch}/Packages" - echo "http://vault.centos.org/${releasever}/os/${arch}/Packages http://vault.centos.org/${releasever}/updates/${arch}/Packages";; - 8*) - echo "https://mirrors.edge.kernel.org/centos/8-stream/BaseOS/${arch}/os/Packages";; - esac - ;; - "Red Hat Enterprise Linux"*) - echo "";; - "Oracle Linux Server") - echo "http://public-yum.oracle.com/repo/OracleLinux/OL${releasevermajor}/${releaseverminor}/base/${arch}/getPackageSource" - echo "http://public-yum.oracle.com/repo/OracleLinux/OL${releasevermajor}/latest/${arch}/getPackageSource" - echo "http://public-yum.oracle.com/repo/OracleLinux/OL${releasevermajor}/UEK/latest/${arch}/getPackageSource" - ;; - "Scientific Linux") - case $releasever in - 5.*) - echo "http://ftp.scientificlinux.org/linux/scientific/$releasevermajor$releaseverminor/SRPMS/vendor";; - 6.*) - echo "http://ftp.scientificlinux.org/linux/scientific/$releasever/SRPMS/vendor";; - esac - ;; - *) - echo "Unknown distribution type: $distro" >&2 - return 1 - ;; - esac -} diff --git a/scripts/run-regression-tests b/scripts/run-regression-tests index 921b750fc..fa669dc4c 100755 --- a/scripts/run-regression-tests +++ b/scripts/run-regression-tests @@ -4,7 +4,7 @@ # # Script for running those SCST regression tests that can be run automatically. # -# Copyright (C) 2008-2020 Bart Van Assche +# Copyright (C) 2008-2009 Bart Van Assche # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License @@ -199,23 +199,22 @@ function compile_scst_patched { } # Generate a kernel patch from the SCST source tree for kernel version $1 -# and with generate-kernel-patch options $2. $1 may be a -# ${kver}^${distro}^${release} triplet. +# and with generate-kernel-patch options $2. function generate_kernel_patch { local kver - local patchfile="${outputdir}/scst-${1/^*}-kernel.patch" - local patchfile_m="${outputdir}/scst-${1/^*}-kernel-matching-line-numbers.patch" + local patchfile="${outputdir}/scst-$1-kernel.patch" + local patchfile_m="${outputdir}/scst-$1-kernel-matching-line-numbers.patch" local driver_options="" - kver="$(kernel_version "${1/^*}")" + kver="$(kernel_version "$1")" driver_options=(-l) [ "${mpt_scst}" = "true" ] && driver_options+=("-m") - "${scriptsdir}"/generate-kernel-patch "${driver_options[@]}" $2 "$1" > "${patchfile}" + "${scriptsdir}"/generate-kernel-patch "${driver_options[@]}" "$2" "$1" > "${patchfile}" - "${scriptsdir}"/generate-kernel-patch "${driver_options[@]}" -n $2 "$1" > "${patchfile_m}" + "${scriptsdir}"/generate-kernel-patch "${driver_options[@]}" -n "$2" "$1" > "${patchfile_m}" - "${scriptsdir}"/generate-kernel-patch "${driver_options[@]}" -p "${outputdir}/${patchdir}" $2 "$1" + "${scriptsdir}"/generate-kernel-patch "${driver_options[@]}" -p "${outputdir}/${patchdir}" "$2" "$1" } # Run checkpatch on the generated kernel patch. Assumes that there is a @@ -263,16 +262,15 @@ function patch_and_configure_kernel { kver="$(kernel_version "$1")" local patchfile="${outputdir}/scst-$1-kernel-matching-line-numbers.patch" local patchoutput="${outputdir}/patch-command-output-$1.txt" - local configureoutput="${outputdir}/configure-output.txt" local disable=" \ CONFIG_BINARY_PRINTF \ CONFIG_BLK_DEV_IO_TRACE \ CONFIG_BRANCH_PROFILE_NONE \ CONFIG_CONTEXT_SWITCH_TRACER \ -CONFIG_DEBUG_SECTION_MISMATCH \ CONFIG_DEBUG_STRICT_USER_COPY_CHECKS \ CONFIG_DYNAMIC_FTRACE \ CONFIG_EVENT_TRACE_TEST_SYSCALLS \ +CONFIG_EVENT_TRACING \ CONFIG_FTRACE \ CONFIG_FTRACE_MCOUNT_RECORD \ CONFIG_FTRACE_NMI_ENTER \ @@ -294,7 +292,6 @@ CONFIG_MMIOTRACE \ CONFIG_NET_DROP_MONITOR \ CONFIG_NOP_TRACER \ CONFIG_RETPOLINE \ -CONFIG_RH_KABI_SIZE_ALIGN_CHECKS \ CONFIG_SCHED_TRACER \ CONFIG_SECURITY_SELINUX \ CONFIG_STACK_TRACER \ @@ -308,18 +305,6 @@ CONFIG_X86_X32 \ " local enable="CONFIG_UNWINDER_FRAME_POINTER" - case "$1" in - 2.6.32-*) - echo "Enabling CONFIG_EVENT_TRACING for CentOS 6.x" - enable="$enable \ - CONFIG_DEBUG_KERNEL \ - CONFIG_FTRACE \ - CONFIG_EVENT_TRACING \ - CONFIG_DYNAMIC_DEBUG";; - *) - disable="$disable CONFIG_EVENT_TRACING";; - esac - echo "Patching and configuring kernel ..." if [ "$ipv6" = "false" ]; then disable="$disable CONFIG_IPV6" @@ -327,10 +312,7 @@ CONFIG_X86_X32 \ ( cd "${outputdir}/linux-$1" && if [ "${multiple_patches}" = "false" ]; then - if ! patch -p1 -f -s <"${patchfile}" >"${patchoutput}"; then - echo "Error: applying ${patchfile} failed." - exit 1 - fi + patch -p1 -f -s <"${patchfile}" >"${patchoutput}" else rm -f "${patchoutput}" for p in "${outputdir}/${patchdir}"/*; do @@ -341,11 +323,7 @@ CONFIG_X86_X32 \ make -s allmodconfig &>"${outputdir}/make-config-output.txt" && for c in $disable; do sed -i.tmp "s/^$c=[ym]\$/$c=n/" .config; done && for c in $enable; do sed -i.tmp "s/^\(# \)*$c\(=.*\| is not set\)\$/$c=y/" .config; done && - make -s oldconfig "${configureoutput}" && - for c in $enable; do - grep -q "^$c=[ym]" .config || - echo "Enabling $c failed." - done + make -s oldconfig /dev/null ) } @@ -443,7 +421,7 @@ function run_smatch { kver="$(kernel_version "$1")" plevel="$(patchlevel "$1")" local outputfile="${outputdir}/smatch-$1-output.txt" - local disable="" # "CONFIG_DYNAMIC_DEBUG" + local disable="CONFIG_DYNAMIC_DEBUG" shift echo "Running smatch on the patched kernel in $* ..." @@ -652,7 +630,7 @@ do run_smatch="true" ipv6="true" global_multiple_patches="${multiple_patches}" - while true; do + while [ "${kv%-?}" != "${kv}" ] || [ "${kv%-??}" != "${kv}" ]; do kv_without_opt="${kv%-?}" if [ "${kv_without_opt}" = "${kv}" ]; then kv_without_opt="${kv%-??}" @@ -667,7 +645,7 @@ do '-nm') run_smatch="false";; '-u') generate_kernel_patch_options="-u";; '-p') multiple_patches="true";; - *) break;; + *) echo "Error: unknown option ${kopt}."; exit 1;; esac kv="${kv_without_opt}" done @@ -678,7 +656,6 @@ do ( cd "${outputdir}" && download_and_extract_kernel_tree "$k" && - k="${k/^*}" && cd "linux-$k/include/linux" && if [ ! -e compiler-gcc6.h ]; then for f in compiler-gcc5.h compiler-gcc4.h; do @@ -690,25 +667,15 @@ do fi ) || continue - k="${k/^*}" if [ "${run_checkpatch}" = "true" ]; then run_checkpatch "$k" fi - patch_and_configure_kernel "$k" || continue + patch_and_configure_kernel "$k" case "$k" in - *^*) - # CentOS. - ;; 2.*|3.*) - # Tell the kernel that we are using gcc 4.6 since older kernel - # versions do not suppor recent gcc versions. + # Tell the kernel that we are using gcc 4.6. KCFLAGS="-U__GNUC__ -U__GNUC_MINOR__ -D__GNUC__=4 -D__GNUC_MINOR__=6" esac - case "$k" in - 3.10.0-*) - # Make the CentOS 7.x build less noisy. - KCFLAGS+=" -Wno-deprecated-declarations"; - esac # See also commit bd664f6b3e37 ("disable new gcc-7.1.1 warnings for now"; # v4.13) and commit 6f303d60534c ("gcc-9: silence 'address-of-packed-member' # warning"; v5.1). diff --git a/scripts/specialize-patch b/scripts/specialize-patch index 8de2d3f93..40563a6fa 100755 --- a/scripts/specialize-patch +++ b/scripts/specialize-patch @@ -72,82 +72,78 @@ function evaluate(stmnt, pattern, arg, op, result) { "(LINUX_VERSION_CODE < KERNEL_VERSION(4, 7, 0))", stmnt) gsub("defined\\(USE_PRE_440_WR_STRUCTURE\\)", - "(LINUX_VERSION_CODE < KERNEL_VERSION(4, 4, 0) \\&\\& " \ - "RHEL_RELEASE_CODE -0 < 7 * 256 + 5)", stmnt) + "(LINUX_VERSION_CODE < KERNEL_VERSION(4, 4, 0))", stmnt) gsub("defined\\(IB_CREATE_CQ_HAS_INIT_ATTR\\)", "(LINUX_VERSION_CODE >= KERNEL_VERSION(4, 2, 0) || " \ - "RHEL_RELEASE_CODE -0 >= 7 * 256 + 5)", stmnt) - - gsub("defined\\(CREATE_SEND_MAD_HAS_AH_ARG\\)", - "(LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 16))", stmnt) + "RHEL_RELEASE_CODE -0 >= 7 * 256 + 6)", stmnt) gsub("defined\\(CREATE_SEND_MAD_HAS_BASE_ARG\\)", "(LINUX_VERSION_CODE >= KERNEL_VERSION(4, 2, 0) || " \ - "RHEL_RELEASE_CODE -0 >= 7 * 256 + 5)", stmnt) + "RHEL_RELEASE_CODE -0 >= 7 * 256 + 6)", stmnt) gsub("defined\\(IB_CM_LISTEN_TAKES_FOURTH_ARG\\)", - "(LINUX_VERSION_CODE < KERNEL_VERSION(4, 3, 0) \\&\\& " \ - "RHEL_RELEASE_CODE -0 < 7 * 256 + 5)", stmnt) + "(LINUX_VERSION_CODE < KERNEL_VERSION(4, 3, 0))", stmnt) gsub("defined\\(IB_CLIENT_REMOVE_TAKES_TWO_ARGS\\)", "(LINUX_VERSION_CODE >= KERNEL_VERSION(4, 3, 0) || " \ - "RHEL_RELEASE_CODE -0 >= 7 * 256 + 5)", stmnt) + "RHEL_RELEASE_CODE -0 >= 7 * 256 + 6)", stmnt) gsub("defined\\(IB_QUERY_GID_HAS_ATTR_ARG\\)", "(LINUX_VERSION_CODE >= KERNEL_VERSION(4, 4, 0) || " \ - "RHEL_RELEASE_CODE -0 >= 7 * 256 + 5)", stmnt) + "RHEL_RELEASE_CODE -0 >= 7 * 256 + 6)", stmnt) gsub("RDMA_CREATE_ID_TAKES_NET_ARG", "(LINUX_VERSION_CODE >= KERNEL_VERSION(4, 4, 0) || " \ - "RHEL_RELEASE_CODE -0 >= 7 * 256 + 5)", stmnt) + "RHEL_RELEASE_CODE -0 >= 7 * 256 + 6)", stmnt) gsub("defined\\(HAVE_DEV_ATTR_MAX_RECV_SGE\\)", - "(LINUX_VERSION_CODE >= KERNEL_VERSION(4, 19, 0) || " \ - "RHEL_RELEASE_CODE -0 >= 7 * 256 + 7)", stmnt) + "(LINUX_VERSION_CODE >= KERNEL_VERSION(4, 19, 0))", stmnt) gsub("HAVE_DEV_ATTR_MAX_SEND_SGE", "(LINUX_VERSION_CODE >= KERNEL_VERSION(4, 19, 0) || " \ - "RHEL_RELEASE_CODE -0 >= 7 * 256 + 7)", stmnt) + "RHEL_RELEASE_CODE -0 >= 8 * 256 + 0)", stmnt) + + gsub("defined\\(HAVE_DEV_ATTR_MAX_RECV_SGE\\)", + "(LINUX_VERSION_CODE >= KERNEL_VERSION(4, 19, 0) || " \ + "RHEL_RELEASE_CODE -0 >= 8 * 256 + 0)", stmnt) gsub("HAVE_RDMA_DESTROY_AH_WITH_FLAGS", - "(LINUX_VERSION_CODE >= KERNEL_VERSION(4, 21, 0) || " \ - "RHEL_RELEASE_CODE -0 >= 8 * 256 + 1)", stmnt) + "(LINUX_VERSION_CODE >= KERNEL_VERSION(4, 21, 0))", stmnt) gsub("HAVE_RDMA_DESTROY_AH", - "(LINUX_VERSION_CODE >= KERNEL_VERSION(4, 12, 0) || " \ - "RHEL_RELEASE_CODE -0 >= 7 * 256 + 5)", stmnt) + "(LINUX_VERSION_CODE >= KERNEL_VERSION(4, 12, 0))", stmnt) gsub("HAVE_RDMA_QUERY_GID", - "(LINUX_VERSION_CODE >= KERNEL_VERSION(4, 19, 0) || " \ - "RHEL_RELEASE_CODE -0 >= 8 * 256 + 1)", stmnt) + "(LINUX_VERSION_CODE >= KERNEL_VERSION(4, 19, 0))", stmnt) gsub("HAVE_SRP_DATA_DESC_IMM", - "(LINUX_VERSION_CODE >= KERNEL_VERSION(4, 21, 0) || " \ - "RHEL_RELEASE_CODE -0 >= 8 * 256 + 1)", stmnt) + "(LINUX_VERSION_CODE >= KERNEL_VERSION(4, 21, 0))", stmnt) gsub("HAVE_STRUCT_SRP_LOGIN_REQ_RDMA", "(LINUX_VERSION_CODE >= KERNEL_VERSION(4, 16, 0))", stmnt) + gsub("defined\\(USE_PRE_440_WR_STRUCTURE\\)", + "(LINUX_VERSION_CODE < KERNEL_VERSION(4, 4, 0))", stmnt) + gsub("defined\\(HAVE_IB_EVENT_GID_CHANGE\\)", "(LINUX_VERSION_CODE >= KERNEL_VERSION(3, 1, 0) || " \ "RHEL_RELEASE_CODE -0 >= 6 * 256 + 10)", stmnt) gsub("defined\\(HAVE_IB_QUERY_DEVICE\\)", - "(LINUX_VERSION_CODE < KERNEL_VERSION(4, 5, 0) \\&\\& " \ - "RHEL_RELEASE_CODE -0 < 7 * 256 + 5)", stmnt) + "(LINUX_VERSION_CODE < KERNEL_VERSION(4, 5, 0))", stmnt) gsub("defined\\(MAD_HANDLER_TAKES_SEND_BUF\\)", "(LINUX_VERSION_CODE >= KERNEL_VERSION(4, 5, 0) || " \ - "RHEL_RELEASE_CODE -0 >= 7 * 256 + 5)", stmnt) + "RHEL_RELEASE_CODE -0 >= 7 * 256 + 6)", stmnt) gsub("defined\\(HAVE_IB_SET_CPI_RESP_TIME\\)", "(LINUX_VERSION_CODE >= KERNEL_VERSION(4, 7, 0) || " \ - "RHEL_RELEASE_CODE -0 >= 7 * 256 + 5)", stmnt) + "RHEL_RELEASE_CODE -0 >= 7 * 256 + 6)", stmnt) gsub("defined\\(IB_PD_HAS_LOCAL_DMA_LKEY\\)", "(LINUX_VERSION_CODE >= KERNEL_VERSION(4, 9, 0) || " \ - "RHEL_RELEASE_CODE -0 >= 7 * 256 + 5)", stmnt) + "RHEL_RELEASE_CODE -0 >= 7 * 256 + 6)", stmnt) gsub("defined\\(HAVE_IB_DMA_MAP_OPS\\)", "(LINUX_VERSION_CODE >= KERNEL_VERSION(0, 0, 0))", stmnt) @@ -279,12 +275,6 @@ function evaluate(stmnt, pattern, arg, op, result) { sub(pattern, op[1] == 0, stmnt) } - pattern = "\\([[:blank:]]*(-*[0-9]+)[[:blank:]]*\\)" - while (match(stmnt, pattern, op) != 0) - { - sub(pattern, op[1], stmnt) - } - pattern="(-*[0-9]+)[[:blank:]]*(\\*|/)[[:blank:]]*(-*[0-9]+)" while (match(stmnt, pattern, op) != 0) { @@ -403,7 +393,6 @@ function handle_if(evaluated) if ($0 ~ "LINUX_VERSION_CODE" \ || $0 ~ "CONFIG_SCST_PROC" \ || $0 ~ "CONFIG_SCST_STRICT_SERIALIZING" \ - || $0 ~ "CREATE_SEND_MAD_HAS_AH_ARG" \ || $0 ~ "CREATE_SEND_MAD_HAS_BASE_ARG" \ || $0 ~ "ENABLE_NPIV" \ || $0 ~ "FC_VPORT_CREATE_DEFINED" \ @@ -625,13 +614,10 @@ function dump_lines() { if (h[0] != "") printf "@@ -%d,%d +%d,%d @@%s\n",h[1],h[2]-lines_less_deleted,h[3],h[4]-lines_less_added,h[5] for (i = 0; i < lines; i++) { - modifier = (LINUX_VERSION_CODE < version_code("4.19.0") && - (RHEL_MAJOR == "" || - RHEL_MAJOR * 256 + RHEL_MINOR < 7 * 256 + 7 || - RHEL_MAJOR * 256 + RHEL_MINOR == 8 * 256 + 0) ? - "" : "const"); - gsub("BAD_WR_MODIFIER", modifier, line[i]) - gsub("CM_HANDLER_EVENT_MODIFIER", modifier, line[i]) + gsub("BAD_WR_MODIFIER", + LINUX_VERSION_CODE < version_code("4.19.0") ? "" : "const", line[i]) + gsub("CM_HANDLER_EVENT_MODIFIER", + LINUX_VERSION_CODE < version_code("4.19.0") ? "" : "const", line[i]) print line[i] } }