diff options
author | sirlucjan | 2016-04-02 20:06:24 +0200 |
---|---|---|
committer | sirlucjan | 2016-04-02 20:06:24 +0200 |
commit | d43990080a046ad4d9de4e5d11bbc963da28d28b (patch) | |
tree | 7d7ffb197f63cfa99855c820a47594d08c050971 | |
parent | dd3d1308452165254e8ad16316a0f0e3a8931cf9 (diff) | |
download | aur-d43990080a046ad4d9de4e5d11bbc963da28d28b.tar.gz |
Bump to 4.4.6-rt13
-rw-r--r-- | .SRCINFO | 12 | ||||
-rw-r--r-- | PKGBUILD | 15 | ||||
-rw-r--r-- | fix-race-in-PRT-wait-for-completion-simple-wait-code_Nvidia-RT-160319.patch | 75 |
3 files changed, 93 insertions, 9 deletions
@@ -1,7 +1,7 @@ # Generated by mksrcinfo v8 -# Tue Mar 29 14:02:05 UTC 2016 +# Sat Apr 2 18:05:54 UTC 2016 pkgbase = linux-rt-bfq - pkgver = 4.4.6_rt12 + pkgver = 4.4.6_rt13 pkgrel = 1 url = http://algo.ing.unimo.it arch = i686 @@ -15,8 +15,8 @@ pkgbase = linux-rt-bfq source = https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.4.tar.sign source = http://www.kernel.org/pub/linux/kernel/v4.x/patch-4.4.6.xz source = https://www.kernel.org/pub/linux/kernel/v4.x/patch-4.4.6.sign - source = http://www.kernel.org/pub/linux/kernel/projects/rt/4.4/patch-4.4.6-rt12.patch.xz - source = http://www.kernel.org/pub/linux/kernel/projects/rt/4.4/patch-4.4.6-rt12.patch.sign + source = http://www.kernel.org/pub/linux/kernel/projects/rt/4.4/patch-4.4.6-rt13.patch.xz + source = http://www.kernel.org/pub/linux/kernel/projects/rt/4.4/patch-4.4.6-rt13.patch.sign source = http://algo.ing.unimo.it/people/paolo/disk_sched/patches/4.4.0-v7r11/0001-block-cgroups-kconfig-build-bits-for-BFQ-v7r11-4.4.0.patch source = http://algo.ing.unimo.it/people/paolo/disk_sched/patches/4.4.0-v7r11/0002-block-introduce-the-BFQ-v7r11-I-O-sched-for-4.4.0.patch source = http://algo.ing.unimo.it/people/paolo/disk_sched/patches/4.4.0-v7r11/0003-block-bfq-add-Early-Queue-Merge-EQM-to-BFQ-v7r11-for.patch @@ -26,11 +26,12 @@ pkgbase = linux-rt-bfq source = config source = config.x86_64 source = 0004-sdhci-revert.patch + source = fix-race-in-PRT-wait-for-completion-simple-wait-code_Nvidia-RT-160319.patch sha512sums = 13c8459933a8b80608e226a1398e3d1848352ace84bcfb7e6a4a33cb230bbe1ab719d4b58e067283df91ce5311be6d2d595fc8c19e2ae6ecc652499415614b3e sha512sums = SKIP sha512sums = 73da057476eb31d818eed4b66c883f5ceec65f18ec8ea60d64e48334c7681af4ed4cf7eb8684481f705446a59fd124de9449d22e28805bc9617b6608ecec491d sha512sums = SKIP - sha512sums = 701db0b22988318163ca392f8dcfc198a98ce29c68704b0584e43c109380a4e8d5e16828bd08ba7b5833bf2c3b0bc42723e0375045e5f06958703bf0c028b781 + sha512sums = 44be94594a31de16efab3481a8c005d7c0924dcf1cb02eeea9a519791249b15d4d76d1f347b21f70f52329c536ae634f1e442bf6dbdf2e7afc9ce591c41854ca sha512sums = SKIP sha512sums = bfd5d1a2d8f203e4d13914d311e8cc79b81695a41dc24179074cb05a5a9b5b0cc89a77062c6b8f79c850281aaa0d02dce40e23750aea7d1015f675c1cc024027 sha512sums = 275b7573adf648325ab950f8a8be7753f2efac0c4cd5030d31b0482fca0b9b9886c85dec989acde15eadf128366c250ecbd19d5527bfb41f472425fef43e93fd @@ -41,6 +42,7 @@ pkgbase = linux-rt-bfq sha512sums = 756a5c5ec2db9153d0f749c4f358501d78743ab6f7538c7c127aad0a6a0bd21364f15315689f4ccd8c7b559e4cebefdfb8bb55ee90aabe3d0bd5a3d5f00703c7 sha512sums = 56ce250e1b14b03b28dfdf03923ffd173d05edc5fe9dcf5daecd121370e618d62eb8448b930503d69989c9c7ee3e3d8b64768962e78f5a1d08ba1267405192df sha512sums = be80d7ee558595d4b17b07a5a2b729d9a9503c963ec1b19bac6a87601eaefd28075aea7fb6d9c77e2e15e063fc6a8a2e8744bc1efe63e2a58b8c3ede0d89c821 + sha512sums = 86f717f596c613db3bc40624fd956ed379b8a2a20d1d99e076ae9061251fe9afba39cf536623eccd970258e124b8c2c05643e3d539f37bd910e02dc5dd498749 pkgname = linux-rt-bfq pkgdesc = Linux Kernel and modules with the RT patch and the BFQ scheduler. @@ -53,7 +53,7 @@ pkgname=('linux-rt-bfq' 'linux-rt-bfq-headers' 'linux-rt-bfq-docs') _kernelname=-rt-bfq _srcname=linux-4.4 _pkgver=4.4.6 -_rtpatchver=rt12 +_rtpatchver=rt13 pkgver=${_pkgver}_${_rtpatchver} pkgrel=1 arch=('i686' 'x86_64') @@ -79,7 +79,8 @@ source=("http://www.kernel.org/pub/linux/kernel/v4.x/${_srcname}.tar.xz" 'linux-rt-bfq.preset' 'change-default-console-loglevel.patch' 'config' 'config.x86_64' - '0004-sdhci-revert.patch') + '0004-sdhci-revert.patch' + 'fix-race-in-PRT-wait-for-completion-simple-wait-code_Nvidia-RT-160319.patch') prepare() { cd ${_srcname} @@ -92,6 +93,11 @@ prepare() { msg "Add rt patch" patch -Np1 -i "${srcdir}/patch-${_pkgver}-${_rtpatchver}.patch" + ### A patch to fix a problem that ought to be fixed in the NVIDIA source code. + # Stops X from hanging on certain NVIDIA cards + msg "Fix-race-in-PRT-wait-for-completion-simple-wait-code_Nvidia-RT.patch" + patch -p1 -i "${srcdir}/fix-race-in-PRT-wait-for-completion-simple-wait-code_Nvidia-RT-160319.patch" + ### Revert http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=9faac7b95ea4f9e83b7a914084cc81ef1632fd91 # fixes #47778 sdhci broken on some boards # https://bugzilla.kernel.org/show_bug.cgi?id=106541 @@ -454,7 +460,7 @@ sha512sums=('13c8459933a8b80608e226a1398e3d1848352ace84bcfb7e6a4a33cb230bbe1ab71 'SKIP' '73da057476eb31d818eed4b66c883f5ceec65f18ec8ea60d64e48334c7681af4ed4cf7eb8684481f705446a59fd124de9449d22e28805bc9617b6608ecec491d' 'SKIP' - '701db0b22988318163ca392f8dcfc198a98ce29c68704b0584e43c109380a4e8d5e16828bd08ba7b5833bf2c3b0bc42723e0375045e5f06958703bf0c028b781' + '44be94594a31de16efab3481a8c005d7c0924dcf1cb02eeea9a519791249b15d4d76d1f347b21f70f52329c536ae634f1e442bf6dbdf2e7afc9ce591c41854ca' 'SKIP' 'bfd5d1a2d8f203e4d13914d311e8cc79b81695a41dc24179074cb05a5a9b5b0cc89a77062c6b8f79c850281aaa0d02dce40e23750aea7d1015f675c1cc024027' '275b7573adf648325ab950f8a8be7753f2efac0c4cd5030d31b0482fca0b9b9886c85dec989acde15eadf128366c250ecbd19d5527bfb41f472425fef43e93fd' @@ -464,7 +470,8 @@ sha512sums=('13c8459933a8b80608e226a1398e3d1848352ace84bcfb7e6a4a33cb230bbe1ab71 'd9d28e02e964704ea96645a5107f8b65cae5f4fb4f537e224e5e3d087fd296cb770c29ac76e0ce95d173bc420ea87fb8f187d616672a60a0cae618b0ef15b8c8' '756a5c5ec2db9153d0f749c4f358501d78743ab6f7538c7c127aad0a6a0bd21364f15315689f4ccd8c7b559e4cebefdfb8bb55ee90aabe3d0bd5a3d5f00703c7' '56ce250e1b14b03b28dfdf03923ffd173d05edc5fe9dcf5daecd121370e618d62eb8448b930503d69989c9c7ee3e3d8b64768962e78f5a1d08ba1267405192df' - 'be80d7ee558595d4b17b07a5a2b729d9a9503c963ec1b19bac6a87601eaefd28075aea7fb6d9c77e2e15e063fc6a8a2e8744bc1efe63e2a58b8c3ede0d89c821') + 'be80d7ee558595d4b17b07a5a2b729d9a9503c963ec1b19bac6a87601eaefd28075aea7fb6d9c77e2e15e063fc6a8a2e8744bc1efe63e2a58b8c3ede0d89c821' + '86f717f596c613db3bc40624fd956ed379b8a2a20d1d99e076ae9061251fe9afba39cf536623eccd970258e124b8c2c05643e3d539f37bd910e02dc5dd498749') validpgpkeys=( 'ABAF11C65A2970B130ABE3C479BE3E4300411886' # Linus Torvalds diff --git a/fix-race-in-PRT-wait-for-completion-simple-wait-code_Nvidia-RT-160319.patch b/fix-race-in-PRT-wait-for-completion-simple-wait-code_Nvidia-RT-160319.patch new file mode 100644 index 000000000000..7e9e9c825def --- /dev/null +++ b/fix-race-in-PRT-wait-for-completion-simple-wait-code_Nvidia-RT-160319.patch @@ -0,0 +1,75 @@ +From: Joakim Hernberg <jhernberg@alchemy.lu> +Date: Sat, 19 Mar 2016 13:03:55 +0100 +Subject: [PATCH] Fix a race in the PRT wait for completion simple wait code + for NVIDIA on the rt patch + +-Note refactored again 160319. + +-NOTE: this patch is a rebase of John Blackwood's patch. On his kernel, he must be using +-an older simple wait patch - as his applies to kernel/sched/core.c, while the simple wait +-completion code lives in kernel/sched/completion.c ... I have ported this to test with +-nvidia, as i would like to see if it fixes the semaphore issues i have seen. + +-I've kept the original patch comment in tact; + +I'm not 100% sure that the patch below will fix your problem, but we +saw something that sounds pretty familiar to your issue involving the +nvidia driver and the preempt-rt patch. The nvidia driver uses the +completion support to create their own driver's notion of an internally +used semaphore. + +Fix a race in the PRT wait for completion simple wait code. + +A wait_for_completion() waiter task can be awoken by a task calling +complete(), but fail to consume the 'done' completion resource if it +looses a race with another task calling wait_for_completion() just as +it is waking up. + +In this case, the awoken task will call schedule_timeout() again +without being in the simple wait queue. + +So if the awoken task is unable to claim the 'done' completion resource, +check to see if it needs to be re-inserted into the wait list before +waiting again in schedule_timeout(). + +Fix-by: John Blackwood <john.blackwood@ccur.com> + +--- + kernel/sched/completion.c | 9 +++++++++ + 1 file changed, 9 insertions(+) + +diff --git a/kernel/sched/completion.c b/kernel/sched/completion.c +index b62cf64..c01bbd8 100644 +--- a/kernel/sched/completion.c ++++ b/kernel/sched/completion.c +@@ -61,11 +61,19 @@ static inline long __sched + do_wait_for_common(struct completion *x, + long (*action)(long), long timeout, int state) + { ++ int again = 0; ++ + if (!x->done) { + DECLARE_SWAITQUEUE(wait); + + __prepare_to_swait(&x->wait, &wait); + do { ++ /* Check to see if we lost race for 'done' and are ++ * no longer in the wait list. ++ */ ++ if (unlikely(again) && list_empty(&wait.task_list)) ++ __prepare_to_swait(&x->wait, &wait); ++ + if (signal_pending_state(state, current)) { + timeout = -ERESTARTSYS; + break; +@@ -74,6 +82,7 @@ do_wait_for_common(struct completion *x, + raw_spin_unlock_irq(&x->wait.lock); + timeout = action(timeout); + raw_spin_lock_irq(&x->wait.lock); ++ again = 1; + } while (!x->done && timeout); + __finish_swait(&x->wait, &wait); + if (!x->done) +-- +2.7.2 + |