From 379946bd15e092ca8769bb9467d9bfd7345ea5e3 Mon Sep 17 00:00:00 2001 From: "Justin M. Forbes" Date: Mon, 17 Oct 2016 16:50:00 -0500 Subject: Linux v4.8.2 --- PatchList.txt | 1 + i8042-skip-selftest-asus-laptops.patch | 373 +++++++++++++++++++++++++++++++++ kernel.spec | 8 +- scripts/add-changelog.sh | 12 ++ scripts/fixup-bumpspec.sh | 10 + scripts/kernel-version.sh | 8 + scripts/rawhide-rc.sh | 36 ++++ scripts/rawhide-snapshot.sh | 59 ++++++ scripts/stable-update.sh | 67 ++++++ sources | 2 +- 10 files changed, 574 insertions(+), 2 deletions(-) create mode 100644 i8042-skip-selftest-asus-laptops.patch create mode 100755 scripts/add-changelog.sh create mode 100755 scripts/fixup-bumpspec.sh create mode 100644 scripts/kernel-version.sh create mode 100755 scripts/rawhide-rc.sh create mode 100755 scripts/rawhide-snapshot.sh create mode 100755 scripts/stable-update.sh diff --git a/PatchList.txt b/PatchList.txt index 3a7fd7377..3cce44ad0 100644 --- a/PatchList.txt +++ b/PatchList.txt @@ -76,3 +76,4 @@ firmware-Drop-WARN-from-usermodehelper_read_trylock-.patch drm-i915-turn-off-wc-mmaps.patch +i8042-skip-selftest-asus-laptops.patch diff --git a/i8042-skip-selftest-asus-laptops.patch b/i8042-skip-selftest-asus-laptops.patch new file mode 100644 index 000000000..351556e04 --- /dev/null +++ b/i8042-skip-selftest-asus-laptops.patch @@ -0,0 +1,373 @@ +From 930e19248e9b61da36c967687ca79c4d5f977919 Mon Sep 17 00:00:00 2001 +From: Marcos Paulo de Souza +Date: Sat, 1 Oct 2016 12:07:35 -0700 +Subject: Input: i8042 - skip selftest on ASUS laptops + +On suspend/resume cycle, selftest is executed to reset i8042 controller. +But when this is done in Asus devices, subsequent calls to detect/init +functions to elantech driver fails. Skipping selftest fixes this problem. + +An easier step to reproduce this problem is adding i8042.reset=1 as a +kernel parameter. On Asus laptops, it'll make the system to start with the +touchpad already stuck, since psmouse_probe forcibly calls the selftest +function. + +This patch was inspired by John Hiesey's change[1], but, since this problem +affects a lot of models of Asus, let's avoid running selftests on them. + +All models affected by this problem: +A455LD +K401LB +K501LB +K501LX +R409L +V502LX +X302LA +X450LCP +X450LD +X455LAB +X455LDB +X455LF +Z450LA + +[1]: https://marc.info/?l=linux-input&m=144312209020616&w=2 + +Fixes: "ETPS/2 Elantech Touchpad dies after resume from suspend" +(https://bugzilla.kernel.org/show_bug.cgi?id=107971) + +Signed-off-by: Marcos Paulo de Souza +Cc: stable@vger.kernel.org +Signed-off-by: Dmitry Torokhov +--- + Documentation/kernel-parameters.txt | 9 +++- + drivers/input/serio/i8042-io.h | 2 +- + drivers/input/serio/i8042-ip22io.h | 2 +- + drivers/input/serio/i8042-ppcio.h | 2 +- + drivers/input/serio/i8042-sparcio.h | 2 +- + drivers/input/serio/i8042-unicore32io.h | 2 +- + drivers/input/serio/i8042-x86ia64io.h | 96 +++++++++++++++++++++++++++++++-- + drivers/input/serio/i8042.c | 55 +++++++++++++++---- + 8 files changed, 150 insertions(+), 20 deletions(-) + +diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt +index 0b3de80..3475b32 100644 +--- a/Documentation/kernel-parameters.txt ++++ b/Documentation/kernel-parameters.txt +@@ -1409,7 +1409,14 @@ bytes respectively. Such letter suffixes can also be entirely omitted. + i8042.nopnp [HW] Don't use ACPIPnP / PnPBIOS to discover KBD/AUX + controllers + i8042.notimeout [HW] Ignore timeout condition signalled by controller +- i8042.reset [HW] Reset the controller during init and cleanup ++ i8042.reset [HW] Reset the controller during init, cleanup and ++ suspend-to-ram transitions, only during s2r ++ transitions, or never reset ++ Format: { 1 | Y | y | 0 | N | n } ++ 1, Y, y: always reset controller ++ 0, N, n: don't ever reset controller ++ Default: only on s2r transitions on x86; most other ++ architectures force reset to be always executed + i8042.unlock [HW] Unlock (ignore) the keylock + i8042.kbdreset [HW] Reset device connected to KBD port + +diff --git a/drivers/input/serio/i8042-io.h b/drivers/input/serio/i8042-io.h +index a5eed2a..34da81c 100644 +--- a/drivers/input/serio/i8042-io.h ++++ b/drivers/input/serio/i8042-io.h +@@ -81,7 +81,7 @@ static inline int i8042_platform_init(void) + return -EBUSY; + #endif + +- i8042_reset = 1; ++ i8042_reset = I8042_RESET_ALWAYS; + return 0; + } + +diff --git a/drivers/input/serio/i8042-ip22io.h b/drivers/input/serio/i8042-ip22io.h +index ee1ad27..08a1c10 100644 +--- a/drivers/input/serio/i8042-ip22io.h ++++ b/drivers/input/serio/i8042-ip22io.h +@@ -61,7 +61,7 @@ static inline int i8042_platform_init(void) + return -EBUSY; + #endif + +- i8042_reset = 1; ++ i8042_reset = I8042_RESET_ALWAYS; + + return 0; + } +diff --git a/drivers/input/serio/i8042-ppcio.h b/drivers/input/serio/i8042-ppcio.h +index f708c75..1aabea4 100644 +--- a/drivers/input/serio/i8042-ppcio.h ++++ b/drivers/input/serio/i8042-ppcio.h +@@ -44,7 +44,7 @@ static inline void i8042_write_command(int val) + + static inline int i8042_platform_init(void) + { +- i8042_reset = 1; ++ i8042_reset = I8042_RESET_ALWAYS; + return 0; + } + +diff --git a/drivers/input/serio/i8042-sparcio.h b/drivers/input/serio/i8042-sparcio.h +index afcd1c1..6231d63 100644 +--- a/drivers/input/serio/i8042-sparcio.h ++++ b/drivers/input/serio/i8042-sparcio.h +@@ -130,7 +130,7 @@ static int __init i8042_platform_init(void) + } + } + +- i8042_reset = 1; ++ i8042_reset = I8042_RESET_ALWAYS; + + return 0; + } +diff --git a/drivers/input/serio/i8042-unicore32io.h b/drivers/input/serio/i8042-unicore32io.h +index 73f5cc1..4557475 100644 +--- a/drivers/input/serio/i8042-unicore32io.h ++++ b/drivers/input/serio/i8042-unicore32io.h +@@ -61,7 +61,7 @@ static inline int i8042_platform_init(void) + if (!request_mem_region(I8042_REGION_START, I8042_REGION_SIZE, "i8042")) + return -EBUSY; + +- i8042_reset = 1; ++ i8042_reset = I8042_RESET_ALWAYS; + return 0; + } + +diff --git a/drivers/input/serio/i8042-x86ia64io.h b/drivers/input/serio/i8042-x86ia64io.h +index 68f5f4a..f4bfb4b 100644 +--- a/drivers/input/serio/i8042-x86ia64io.h ++++ b/drivers/input/serio/i8042-x86ia64io.h +@@ -510,6 +510,90 @@ static const struct dmi_system_id __initconst i8042_dmi_nomux_table[] = { + { } + }; + ++/* ++ * On some Asus laptops, just running self tests cause problems. ++ */ ++static const struct dmi_system_id i8042_dmi_noselftest_table[] = { ++ { ++ .matches = { ++ DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."), ++ DMI_MATCH(DMI_PRODUCT_NAME, "A455LD"), ++ }, ++ }, ++ { ++ .matches = { ++ DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."), ++ DMI_MATCH(DMI_PRODUCT_NAME, "K401LB"), ++ }, ++ }, ++ { ++ .matches = { ++ DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."), ++ DMI_MATCH(DMI_PRODUCT_NAME, "K501LB"), ++ }, ++ }, ++ { ++ .matches = { ++ DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."), ++ DMI_MATCH(DMI_PRODUCT_NAME, "K501LX"), ++ }, ++ }, ++ { ++ .matches = { ++ DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."), ++ DMI_MATCH(DMI_PRODUCT_NAME, "R409L"), ++ }, ++ }, ++ { ++ .matches = { ++ DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."), ++ DMI_MATCH(DMI_PRODUCT_NAME, "V502LX"), ++ }, ++ }, ++ { ++ .matches = { ++ DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."), ++ DMI_MATCH(DMI_PRODUCT_NAME, "X302LA"), ++ }, ++ }, ++ { ++ .matches = { ++ DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."), ++ DMI_MATCH(DMI_PRODUCT_NAME, "X450LCP"), ++ }, ++ }, ++ { ++ .matches = { ++ DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."), ++ DMI_MATCH(DMI_PRODUCT_NAME, "X450LD"), ++ }, ++ }, ++ { ++ .matches = { ++ DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."), ++ DMI_MATCH(DMI_PRODUCT_NAME, "X455LAB"), ++ }, ++ }, ++ { ++ .matches = { ++ DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."), ++ DMI_MATCH(DMI_PRODUCT_NAME, "X455LDB"), ++ }, ++ }, ++ { ++ .matches = { ++ DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."), ++ DMI_MATCH(DMI_PRODUCT_NAME, "X455LF"), ++ }, ++ }, ++ { ++ .matches = { ++ DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."), ++ DMI_MATCH(DMI_PRODUCT_NAME, "Z450LA"), ++ }, ++ }, ++ { } ++}; + static const struct dmi_system_id __initconst i8042_dmi_reset_table[] = { + { + /* MSI Wind U-100 */ +@@ -1072,12 +1156,18 @@ static int __init i8042_platform_init(void) + return retval; + + #if defined(__ia64__) +- i8042_reset = true; ++ i8042_reset = I8042_RESET_ALWAYS; + #endif + + #ifdef CONFIG_X86 +- if (dmi_check_system(i8042_dmi_reset_table)) +- i8042_reset = true; ++ /* Honor module parameter when value is not default */ ++ if (i8042_reset == I8042_RESET_DEFAULT) { ++ if (dmi_check_system(i8042_dmi_reset_table)) ++ i8042_reset = I8042_RESET_ALWAYS; ++ ++ if (dmi_check_system(i8042_dmi_noselftest_table)) ++ i8042_reset = I8042_RESET_NEVER; ++ } + + if (dmi_check_system(i8042_dmi_noloop_table)) + i8042_noloop = true; +diff --git a/drivers/input/serio/i8042.c b/drivers/input/serio/i8042.c +index b4d3408..674a760 100644 +--- a/drivers/input/serio/i8042.c ++++ b/drivers/input/serio/i8042.c +@@ -48,9 +48,39 @@ static bool i8042_unlock; + module_param_named(unlock, i8042_unlock, bool, 0); + MODULE_PARM_DESC(unlock, "Ignore keyboard lock."); + +-static bool i8042_reset; +-module_param_named(reset, i8042_reset, bool, 0); +-MODULE_PARM_DESC(reset, "Reset controller during init and cleanup."); ++enum i8042_controller_reset_mode { ++ I8042_RESET_NEVER, ++ I8042_RESET_ALWAYS, ++ I8042_RESET_ON_S2RAM, ++#define I8042_RESET_DEFAULT I8042_RESET_ON_S2RAM ++}; ++static enum i8042_controller_reset_mode i8042_reset = I8042_RESET_DEFAULT; ++static int i8042_set_reset(const char *val, const struct kernel_param *kp) ++{ ++ enum i8042_controller_reset_mode *arg = kp->arg; ++ int error; ++ bool reset; ++ ++ if (val) { ++ error = kstrtobool(val, &reset); ++ if (error) ++ return error; ++ } else { ++ reset = true; ++ } ++ ++ *arg = reset ? I8042_RESET_ALWAYS : I8042_RESET_NEVER; ++ return 0; ++} ++ ++static const struct kernel_param_ops param_ops_reset_param = { ++ .flags = KERNEL_PARAM_OPS_FL_NOARG, ++ .set = i8042_set_reset, ++}; ++#define param_check_reset_param(name, p) \ ++ __param_check(name, p, enum i8042_controller_reset_mode) ++module_param_named(reset, i8042_reset, reset_param, 0); ++MODULE_PARM_DESC(reset, "Reset controller on resume, cleanup or both"); + + static bool i8042_direct; + module_param_named(direct, i8042_direct, bool, 0); +@@ -1019,7 +1049,7 @@ static int i8042_controller_init(void) + * Reset the controller and reset CRT to the original value set by BIOS. + */ + +-static void i8042_controller_reset(bool force_reset) ++static void i8042_controller_reset(bool s2r_wants_reset) + { + i8042_flush(); + +@@ -1044,8 +1074,10 @@ static void i8042_controller_reset(bool force_reset) + * Reset the controller if requested. + */ + +- if (i8042_reset || force_reset) ++ if (i8042_reset == I8042_RESET_ALWAYS || ++ (i8042_reset == I8042_RESET_ON_S2RAM && s2r_wants_reset)) { + i8042_controller_selftest(); ++ } + + /* + * Restore the original control register setting. +@@ -1110,7 +1142,7 @@ static void i8042_dritek_enable(void) + * before suspending. + */ + +-static int i8042_controller_resume(bool force_reset) ++static int i8042_controller_resume(bool s2r_wants_reset) + { + int error; + +@@ -1118,7 +1150,8 @@ static int i8042_controller_resume(bool force_reset) + if (error) + return error; + +- if (i8042_reset || force_reset) { ++ if (i8042_reset == I8042_RESET_ALWAYS || ++ (i8042_reset == I8042_RESET_ON_S2RAM && s2r_wants_reset)) { + error = i8042_controller_selftest(); + if (error) + return error; +@@ -1195,7 +1228,7 @@ static int i8042_pm_resume_noirq(struct device *dev) + + static int i8042_pm_resume(struct device *dev) + { +- bool force_reset; ++ bool want_reset; + int i; + + for (i = 0; i < I8042_NUM_PORTS; i++) { +@@ -1218,9 +1251,9 @@ static int i8042_pm_resume(struct device *dev) + * off control to the platform firmware, otherwise we can simply restore + * the mode. + */ +- force_reset = pm_resume_via_firmware(); ++ want_reset = pm_resume_via_firmware(); + +- return i8042_controller_resume(force_reset); ++ return i8042_controller_resume(want_reset); + } + + static int i8042_pm_thaw(struct device *dev) +@@ -1481,7 +1514,7 @@ static int __init i8042_probe(struct platform_device *dev) + + i8042_platform_device = dev; + +- if (i8042_reset) { ++ if (i8042_reset == I8042_RESET_ALWAYS) { + error = i8042_controller_selftest(); + if (error) + return error; +-- +cgit v0.12 + diff --git a/kernel.spec b/kernel.spec index e39ae10f2..f5f6189d4 100644 --- a/kernel.spec +++ b/kernel.spec @@ -54,7 +54,7 @@ Summary: The Linux kernel %if 0%{?released_kernel} # Do we have a -stable update to apply? -%define stable_update 1 +%define stable_update 2 # Set rpm version accordingly %if 0%{?stable_update} %define stablerev %{stable_update} @@ -598,6 +598,8 @@ Patch502: firmware-Drop-WARN-from-usermodehelper_read_trylock-.patch # Patch503: drm-i915-turn-off-wc-mmaps.patch +Patch504: i8042-skip-selftest-asus-laptops.patch + Patch508: kexec-uefi-copy-secure_boot-flag-in-boot-params.patch #CVE-2016-3134 rhbz 1317383 1317384 @@ -2163,6 +2165,10 @@ fi # # %changelog +* Mon Oct 17 2016 Justin M. Forbes - 4.8.2-300 +- Linux v4.8.2 +- i8042 - skip selftest on ASUS laptops + * Sat Oct 15 2016 Peter Robinson - Build in AXP20X_I2C (should fix rhbz 1352140) diff --git a/scripts/add-changelog.sh b/scripts/add-changelog.sh new file mode 100755 index 000000000..fa0157afb --- /dev/null +++ b/scripts/add-changelog.sh @@ -0,0 +1,12 @@ +#!/bin/sh +# Emulate the changelog part of rpmdev-bumpspec without the bumping of the +# rev. Because Laura keeps typoing her name and the date. + +CURDATE=`date +"%a %b %d %Y"` +PACKAGER=`rpmdev-packager` +CHANGELOG="%changelog\n* $CURDATE $PACKAGER\n- $1\n" + +awk -v CHANGE="$CHANGELOG" '/%changelog/ {print CHANGE} \ + !/%changelog/ { print $0 }' \ + < kernel.spec > kernel.spec.tmp +mv kernel.spec.tmp kernel.spec diff --git a/scripts/fixup-bumpspec.sh b/scripts/fixup-bumpspec.sh new file mode 100755 index 000000000..1a38de222 --- /dev/null +++ b/scripts/fixup-bumpspec.sh @@ -0,0 +1,10 @@ +#!/bin/sh +# rpmdev-bumpspec 'helpfully' bumps the release which we don't always want. +# This script fixes it up. + +RELEASE=`grep "%global baserelease" kernel.spec | cut -d ' ' -f 3` +export RELEASE=$(($RELEASE-1)) +perl -p -i -e 's|%global baserelease.*|%global baserelease $ENV{'RELEASE'}|' kernel.spec +TODAY=`date +"%a %b %d %Y"` +awk -v DATE="$TODAY" 'START { marked = 0; } $0 ~ DATE { if (marked == 1) { print $0 } else {out=$1; for(i = 2; i <= NF - 2; i++) { out=out" "$i } print out; marked = 1; } } $0 !~ DATE { print $0; }' < kernel.spec > kernel.spec.tmp +mv kernel.spec.tmp kernel.spec diff --git a/scripts/kernel-version.sh b/scripts/kernel-version.sh new file mode 100644 index 000000000..36e00194b --- /dev/null +++ b/scripts/kernel-version.sh @@ -0,0 +1,8 @@ +VER=$(grep patch sources | head -n1 | awk '{ print $2 }' | sed s/patch-// | sed s/-git.*// | sed s/.xz//) + +if [ -z "$VER" ] ; +then + VER=$(grep linux sources | head -1 | awk '{ print $2 }' | sed s/linux-// | sed s/.tar.xz//) +fi + + diff --git a/scripts/rawhide-rc.sh b/scripts/rawhide-rc.sh new file mode 100755 index 000000000..2e871ee8e --- /dev/null +++ b/scripts/rawhide-rc.sh @@ -0,0 +1,36 @@ +#!/bin/sh +# Generate a commit for a rawhide RC release + +source scripts/kernel-version.sh + +make release +# fixup the release because rpmdev-bumpspec *sigh* +scripts/fixup-bumpspec.sh +fedpkg commit -c + +# Figure out what is our RC +RC=`grep "%define rcrev" kernel.spec| cut -d ' ' -f 3` +RC=$(($RC+1)) +BASE=`grep "%define base_sublevel" kernel.spec| cut -d ' ' -f 3` + +# Kill all patches +awk '!/patch/ { print $0 }' < sources > sources.tmp +mv sources.tmp sources + +# Grab the tarball +if [ ! -f patch-4.$BASE-rc$RC.xz ]; then + wget https://cdn.kernel.org/pub/linux/kernel/v4.x/testing/patch-4.$BASE-rc$RC.xz + if [ ! $? -eq 0 ]; then + exit 1 + fi + fedpkg upload patch-4.$BASE-rc$RC.xz +fi + +# bump rcrev in the spec and set git snapshot to 0 +RC=$RC perl -p -i -e 's|%define rcrev.*|%global rcrev $ENV{'RC'}|' kernel.spec + +perl -p -i -e 's|%define gitrev.*|%define gitrev 0|' kernel.spec + +perl -p -i -e 's|%global baserelease.*|%global baserelease 0|' kernel.spec + +rpmdev-bumpspec -c "Linux v4.$BASE-rc$RC" kernel.spec diff --git a/scripts/rawhide-snapshot.sh b/scripts/rawhide-snapshot.sh new file mode 100755 index 000000000..b96bd38d9 --- /dev/null +++ b/scripts/rawhide-snapshot.sh @@ -0,0 +1,59 @@ +#!/bin/sh +# A coffeeproof rawhide script. You should be able to run this before the +# coffee has kicked in and generate a good rawhide commit. +# +# - Updates the local Fedora tree to master and verifies that you are working +# off of the correct master +# - Updates the upstream tree to the latest master. +# - Generates a git snapshot via generate-git-snapshot.sh +# - Clears out old git snapshots from the sources +# - Uploads the new snapshot + +source scripts/kernel-version.sh + +git fetch origin +if [ "$(git rev-parse origin/master)" != "$(git rev-parse HEAD)" ]; then + echo "I just did a git fetch and this branch does not match master" + echo "Re-check out this branch to work off of the latest master" + exit 1 +fi + +if [ ! -d "$LINUX_GIT" ]; then + echo "error: set \$LINUX_GIT to point at an upstream git tree" + exit 1 +fi + +git -C $LINUX_GIT pull +if [ ! $? -eq 0 ]; then + echo "Git pull failed. Is your tree clean/correct?" + exit 1 +fi + +git -C $LINUX_GIT describe --tags HEAD | grep -q "\-g" +if [ ! $? -eq 0 ]; then + echo "Trying to snapshot off of a tagged git." + echo "I don't think this is what you want" + exit 1 +fi + +if [ "$(git -C $LINUX_GIT rev-parse origin/master)" == `cat gitrev` ]; then + echo "Last snapshot commit matches current master. Nothing to do" + echo "\o/" + exit 0 +fi + +GIT=`grep "%define gitrev" kernel.spec | cut -d ' ' -f 3` +if [ "$GIT" -eq 0 ]; then + make debug + ./scripts/fixup-bumpspec.sh + fedpkg commit -c +fi + +./scripts/generate-git-snapshot.sh + +#Nuke the old patch from the source +awk '!/git/ { print $0 }' < sources > sources.tmp +mv sources.tmp sources + +GIT=`grep "%define gitrev" kernel.spec | cut -d ' ' -f 3` +fedpkg upload patch-$VER-git$GIT.xz diff --git a/scripts/stable-update.sh b/scripts/stable-update.sh new file mode 100755 index 000000000..eefd9a96d --- /dev/null +++ b/scripts/stable-update.sh @@ -0,0 +1,67 @@ +#!/bin/sh +# +# Author: Laura Abbott +# +# Apply a stable patch update to the Fedora tree. This takes care of +# - Downloading the patch from kernel.org +# - Uploading the source file +# - Removing old patch files +# - Updating the spec file stable version +# - Adding a proper changelog entry +# +# Based on steps from https://fedoraproject.org/wiki/Kernel/DayToDay#Stable_kernel_update +# +# Args: Stable version to update (e.g. 4.7.7, 4.8.1) + +if [ $# -lt 1 ]; then + echo "Need a version" + exit 1 +fi + +VERSION=`echo $1 | cut -d . -f 1` +if [ -z $VERSION ]; then + echo "Malformed version $1" + exit 1 +fi +PATCHLEVEL=`echo $1 | cut -d . -f 2` +if [ -z $VERSION ]; then + echo "Malformed version $1" + exit 1 +fi +SUBLEVEL=`echo $1 | cut -d . -f 3` +if [ -z $VERSION ]; then + echo "Malformed version $1" + exit 1 +fi + +if [ ! -f patch-$1.xz ]; then + wget https://cdn.kernel.org/pub/linux/kernel/v4.x/patch-$1.xz + if [ ! $? -eq 0 ]; then + echo "Download fail" + exit 1 + fi +fi + +grep $1 sources &> /dev/null +if [ ! $? -eq 0 ]; then + fedpkg upload patch-$1.xz + + # Cryptic awk: search for the previous patch level (if one exists) and + # remove it from the source file + awk -v VER=$VERSION.$PATCHLEVEL.$((SUBLEVEL-1)) '$0 !~ VER { print $0; }' < sources > sources.tmp + mv sources.tmp sources +fi + +# Update the stable level +awk -v STABLE=$SUBLEVEL '/%define stable_update/ \ + { print "%define stable_update " STABLE } \ + !/%define stable_update/ { print $0 }' \ + < kernel.spec > kernel.spec.tmp +mv kernel.spec.tmp kernel.spec + +# Reset the base release for use with rpmdev-bumpspec +BASERELEASE=`cat kernel.spec | grep "%global baserelease" | cut -d ' ' -f 3 | head -c 1`00 +BASERELEASE=$(($BASERELEASE-1)) +BASERELEASE=$BASERELEASE perl -p -i -e 's|%global baserelease.*|%global baserelease $ENV{'BASERELEASE'}|' kernel.spec + +rpmdev-bumpspec -c "Linux v$1" kernel.spec diff --git a/sources b/sources index 1d5c768c1..844149f62 100644 --- a/sources +++ b/sources @@ -1,3 +1,3 @@ c1af0afbd3df35c1ccdc7a5118cd2d07 linux-4.8.tar.xz 0dad03f586e835d538d3e0d2cbdb9a28 perf-man-4.8.tar.gz -349734be5387f1605074515ad7207627 patch-4.8.1.xz +7bbd3c729fa79169f7234ae3ed06b46c patch-4.8.2.xz -- cgit