From f46e0603ad4c8f0ab32c3035d5c27ce9097405ea Mon Sep 17 00:00:00 2001 From: Tobias Powalowski Date: Thu, 20 Dec 2012 19:11:14 +0000 Subject: [PATCH] fix watchdog regression --- PKGBUILD | 12 +++++++++--- fix-watchdog-3.7.patch | 38 ++++++++++++++++++++++++++++++++++++++ linux.install | 2 +- 3 files changed, 48 insertions(+), 4 deletions(-) create mode 100644 fix-watchdog-3.7.patch diff --git a/PKGBUILD b/PKGBUILD index ee9ec0b..fa189dd 100644 --- a/PKGBUILD +++ b/PKGBUILD @@ -6,7 +6,7 @@ pkgbase=linux # Build stock -ARCH kernel #pkgbase=linux-custom # Build kernel with a different name _srcname=linux-3.7 pkgver=3.7.1 -pkgrel=1 +pkgrel=2 arch=('i686' 'x86_64') url="http://www.kernel.org/" license=('GPL2') @@ -19,14 +19,16 @@ source=("http://www.kernel.org/pub/linux/kernel/v3.x/${_srcname}.tar.xz" # standard config files for mkinitcpio ramdisk 'linux.preset' 'change-default-console-loglevel.patch' - 'fat-3.6.x.patch') + 'fat-3.6.x.patch' + 'fix-watchdog-3.7.patch') md5sums=('21223369d682bcf44bcdfe1521095983' '48f5f530b048e387e978e3e49de7742a' '2cf43e0448a8074eb2ff93035168250b' '58a9ba178fedb244a0a86b760fb4bd81' 'eb14dcfd80c00852ef81ded6e826826a' '9d3c56a4b999c8bfbd4018089a62f662' - '88d501404f172dac6fcb248978251560') + '88d501404f172dac6fcb248978251560' + '3485d6c7ae3af35d16e09d6d9a7ed32a') _kernelname=${pkgbase#linux} @@ -48,6 +50,10 @@ build() { # https://bugs.archlinux.org/task/32916 patch -Np1 -i "${srcdir}/fat-3.6.x.patch" + # fix watchdog enable/disable regression + # https://bugs.archlinux.org/task/33095 + patch -Np1 -i "${srcdir}/fix-watchdog-3.7.patch" + if [ "${CARCH}" = "x86_64" ]; then cat "${srcdir}/config.x86_64" > ./.config else diff --git a/fix-watchdog-3.7.patch b/fix-watchdog-3.7.patch new file mode 100644 index 0000000..fe44316 --- /dev/null +++ b/fix-watchdog-3.7.patch @@ -0,0 +1,38 @@ +X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Ftorvalds%2Flinux.git;a=blobdiff_plain;f=kernel%2Fwatchdog.c;h=75a2ab3d0b0208dfa51e40339ffd00206622732e;hp=997c6a16ec2278969a10f251f63f237e7559d42e;hb=3935e89505a1c3ab3f3b0c7ef0eae54124f48905;hpb=74779e22261172ea728b989310f6ecc991b57d62 + +diff --git a/kernel/watchdog.c b/kernel/watchdog.c +index 997c6a1..75a2ab3 100644 +--- a/kernel/watchdog.c ++++ b/kernel/watchdog.c +@@ -344,6 +344,10 @@ static void watchdog_enable(unsigned int cpu) + { + struct hrtimer *hrtimer = &__raw_get_cpu_var(watchdog_hrtimer); + ++ /* kick off the timer for the hardlockup detector */ ++ hrtimer_init(hrtimer, CLOCK_MONOTONIC, HRTIMER_MODE_REL); ++ hrtimer->function = watchdog_timer_fn; ++ + if (!watchdog_enabled) { + kthread_park(current); + return; +@@ -352,10 +356,6 @@ static void watchdog_enable(unsigned int cpu) + /* Enable the perf event */ + watchdog_nmi_enable(cpu); + +- /* kick off the timer for the hardlockup detector */ +- hrtimer_init(hrtimer, CLOCK_MONOTONIC, HRTIMER_MODE_REL); +- hrtimer->function = watchdog_timer_fn; +- + /* done here because hrtimer_start can only pin to smp_processor_id() */ + hrtimer_start(hrtimer, ns_to_ktime(sample_period), + HRTIMER_MODE_REL_PINNED); +@@ -369,9 +369,6 @@ static void watchdog_disable(unsigned int cpu) + { + struct hrtimer *hrtimer = &__raw_get_cpu_var(watchdog_hrtimer); + +- if (!watchdog_enabled) +- return; +- + watchdog_set_prio(SCHED_NORMAL, 0); + hrtimer_cancel(hrtimer); + /* disable the perf event */ diff --git a/linux.install b/linux.install index 6e0892b..c98ecf2 100644 --- a/linux.install +++ b/linux.install @@ -2,7 +2,7 @@ # arg 2: the old package version KERNEL_NAME= -KERNEL_VERSION=3.7.1-1-ARCH +KERNEL_VERSION=3.7.1-2-ARCH # set a sane PATH to ensure that critical utils like depmod will be found export PATH='/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin'