drm/i915: Mark the ringbuffers as being in the GTT domain
authorChris Wilson <chris@chris-wilson.co.uk>
Mon, 4 Jun 2012 16:05:40 +0000 (17:05 +0100)
committerDaniel Vetter <daniel.vetter@ffwll.ch>
Mon, 4 Jun 2012 18:16:40 +0000 (20:16 +0200)
By correctly describing the rinbuffers as being in the GTT domain, it
appears that we are more careful with the management of the CPU cache
upon resume and so prevent some coherency issue when submitting commands
to the GPU later. A secondary effect is that the debug logs are then
consistent with the actual usage (i.e. they no longer describe the
ringbuffers as being in the CPU write domain when we are accessing them
through an wc iomapping.)

Reported-and-tested-by: Daniel Gnoutcheff <daniel@gnoutcheff.name>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=41092
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: stable@vger.kernel.org
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
drivers/gpu/drm/i915/intel_ringbuffer.c

index 490df551e312eb32cffcf3a23b9ee4f943694353..9fbad086cb4b15bd16eee9a0b3727d3438b77f71 100644 (file)
@@ -988,6 +988,10 @@ static int intel_init_ring_buffer(struct drm_device *dev,
        if (ret)
                goto err_unref;
 
+       ret = i915_gem_object_set_to_gtt_domain(obj, true);
+       if (ret)
+               goto err_unpin;
+
        ring->virtual_start = ioremap_wc(dev->agp->base + obj->gtt_offset,
                                         ring->size);
        if (ring->virtual_start == NULL) {