| From foo@baz Fri Mar 16 15:43:17 CET 2018 |
| From: Chris Wilson <chris@chris-wilson.co.uk> |
| Date: Fri, 8 Dec 2017 21:46:16 +0000 |
| Subject: agp/intel: Flush all chipset writes after updating the GGTT |
| |
| From: Chris Wilson <chris@chris-wilson.co.uk> |
| |
| |
| [ Upstream commit 8516673a996870ea0ceb337ee4f83c33c5ec3111 ] |
| |
| Before accessing the GGTT we must flush the PTE writes and make them |
| visible to the chipset, or else the indirect access may end up in the |
| wrong page. In commit 3497971a71d8 ("agp/intel: Flush chipset writes |
| after updating a single PTE"), we noticed corruption of the uploads for |
| pwrite and for capturing GPU error states, but it was presumed that the |
| explicit calls to intel_gtt_chipset_flush() were sufficient for the |
| execbuffer path. However, we have not been flushing the chipset between |
| the PTE writes and access via the GTT itself. |
| |
| For simplicity, do the flush after any PTE update rather than try and |
| batch the flushes on a just-in-time basis. |
| |
| References: 3497971a71d8 ("agp/intel: Flush chipset writes after updating a single PTE") |
| Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> |
| Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com> |
| Cc: Mika Kuoppala <mika.kuoppala@intel.com> |
| Cc: drm-intel-fixes@lists.freedesktop.org |
| Reviewed-by: Joonas Lahtinen <joonas.lahtinen@linux.intel.com> |
| Link: https://patchwork.freedesktop.org/patch/msgid/20171208214616.30147-1-chris@chris-wilson.co.uk |
| Signed-off-by: Sasha Levin <alexander.levin@microsoft.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| drivers/char/agp/intel-gtt.c | 2 ++ |
| 1 file changed, 2 insertions(+) |
| |
| --- a/drivers/char/agp/intel-gtt.c |
| +++ b/drivers/char/agp/intel-gtt.c |
| @@ -872,6 +872,8 @@ void intel_gtt_insert_sg_entries(struct |
| } |
| } |
| wmb(); |
| + if (intel_private.driver->chipset_flush) |
| + intel_private.driver->chipset_flush(); |
| } |
| EXPORT_SYMBOL(intel_gtt_insert_sg_entries); |
| |