]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
4.9-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 16 Jun 2020 12:04:52 +0000 (14:04 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 16 Jun 2020 12:04:52 +0000 (14:04 +0200)
added patches:
agp-intel-reinforce-the-barrier-after-gtt-updates.patch

queue-4.9/agp-intel-reinforce-the-barrier-after-gtt-updates.patch [new file with mode: 0644]
queue-4.9/series

diff --git a/queue-4.9/agp-intel-reinforce-the-barrier-after-gtt-updates.patch b/queue-4.9/agp-intel-reinforce-the-barrier-after-gtt-updates.patch
new file mode 100644 (file)
index 0000000..6623609
--- /dev/null
@@ -0,0 +1,55 @@
+From f30d3ced9fafa03e4855508929b5b6334907f45e Mon Sep 17 00:00:00 2001
+From: Chris Wilson <chris@chris-wilson.co.uk>
+Date: Fri, 10 Apr 2020 09:35:35 +0100
+Subject: agp/intel: Reinforce the barrier after GTT updates
+
+From: Chris Wilson <chris@chris-wilson.co.uk>
+
+commit f30d3ced9fafa03e4855508929b5b6334907f45e upstream.
+
+After changing the timing between GTT updates and execution on the GPU,
+we started seeing sporadic failures on Ironlake. These were narrowed
+down to being an insufficiently strong enough barrier/delay after
+updating the GTT and scheduling execution on the GPU. By forcing the
+uncached read, and adding the missing barrier for the singular
+insert_page (relocation paths), the sporadic failures go away.
+
+Fixes: 983d308cb8f6 ("agp/intel: Serialise after GTT updates")
+Fixes: 3497971a71d8 ("agp/intel: Flush chipset writes after updating a single PTE")
+Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
+Acked-by: Andi Shyti <andi.shyti@intel.com>
+Cc: stable@vger.kernel.org # v4.0+
+Link: https://patchwork.freedesktop.org/patch/msgid/20200410083535.25464-1-chris@chris-wilson.co.uk
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/char/agp/intel-gtt.c |    4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+--- a/drivers/char/agp/intel-gtt.c
++++ b/drivers/char/agp/intel-gtt.c
+@@ -845,6 +845,7 @@ void intel_gtt_insert_page(dma_addr_t ad
+                          unsigned int flags)
+ {
+       intel_private.driver->write_entry(addr, pg, flags);
++      readl(intel_private.gtt + pg);
+       if (intel_private.driver->chipset_flush)
+               intel_private.driver->chipset_flush();
+ }
+@@ -870,7 +871,7 @@ void intel_gtt_insert_sg_entries(struct
+                       j++;
+               }
+       }
+-      wmb();
++      readl(intel_private.gtt + j - 1);
+       if (intel_private.driver->chipset_flush)
+               intel_private.driver->chipset_flush();
+ }
+@@ -1104,6 +1105,7 @@ static void i9xx_cleanup(void)
+ static void i9xx_chipset_flush(void)
+ {
++      wmb();
+       if (intel_private.i9xx_flush_page)
+               writel(1, intel_private.i9xx_flush_page);
+ }
index 32737ddf085077dd197f21ba44d6de7d01e5b8aa..c889403973c7add8cf105964f9389ba3cfd395c2 100644 (file)
@@ -48,3 +48,4 @@ smack-slab-out-of-bounds-in-vsscanf.patch
 mm-slub-fix-a-memory-leak-in-sysfs_slab_add.patch
 fat-don-t-allow-to-mount-if-the-fat-length-0.patch
 perf-add-cond_resched-to-task_function_call.patch
+agp-intel-reinforce-the-barrier-after-gtt-updates.patch