summarylogtreecommitdiffstats
diff options
context:
space:
mode:
authorsirlucjan2016-04-02 20:06:24 +0200
committersirlucjan2016-04-02 20:06:24 +0200
commitd43990080a046ad4d9de4e5d11bbc963da28d28b (patch)
tree7d7ffb197f63cfa99855c820a47594d08c050971
parentdd3d1308452165254e8ad16316a0f0e3a8931cf9 (diff)
downloadaur-d43990080a046ad4d9de4e5d11bbc963da28d28b.tar.gz
Bump to 4.4.6-rt13
-rw-r--r--.SRCINFO12
-rw-r--r--PKGBUILD15
-rw-r--r--fix-race-in-PRT-wait-for-completion-simple-wait-code_Nvidia-RT-160319.patch75
3 files changed, 93 insertions, 9 deletions
diff --git a/.SRCINFO b/.SRCINFO
index 01a7cf8045cf..2639e1bf3ec0 100644
--- a/.SRCINFO
+++ b/.SRCINFO
@@ -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.
diff --git a/PKGBUILD b/PKGBUILD
index 9d95b73eaa48..e56bf79902ef 100644
--- a/PKGBUILD
+++ b/PKGBUILD
@@ -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
+