Rewriting the PTE entries using an WC mapping is roughly an order of
magnitude faster than through the uncached mapping. This makes an
observable difference on workloads that cycle through large numbers of
buffers, for example Chromium using ShmPixmaps where virtually all the
CPU time is currently spent rebinding the userptr.

v2: Limit the WC mapping to older generations as we should the TLB
invalidation on SandyBridge+ unreliable.

Signed-off-by: Chris Wilson <ch...@chris-wilson.co.uk>
---
 drivers/char/agp/intel-gtt.c |   11 ++++++++---
 1 file changed, 8 insertions(+), 3 deletions(-)

diff --git a/drivers/char/agp/intel-gtt.c b/drivers/char/agp/intel-gtt.c
index 258873a..8b0f6d19 100644
--- a/drivers/char/agp/intel-gtt.c
+++ b/drivers/char/agp/intel-gtt.c
@@ -666,9 +666,14 @@ static int intel_gtt_init(void)
 
        gtt_map_size = intel_private.base.gtt_total_entries * 4;
 
-       intel_private.gtt = ioremap(intel_private.gtt_bus_addr,
-                                   gtt_map_size);
-       if (!intel_private.gtt) {
+       intel_private.gtt = NULL;
+       if (INTEL_GTT_GEN < 6)
+               intel_private.gtt = ioremap_wc(intel_private.gtt_bus_addr,
+                                              gtt_map_size);
+       if (intel_private.gtt == NULL)
+               intel_private.gtt = ioremap(intel_private.gtt_bus_addr,
+                                           gtt_map_size);
+       if (intel_private.gtt == NULL) {
                intel_private.driver->cleanup();
                iounmap(intel_private.registers);
                return -ENOMEM;
-- 
1.7.10.4

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to