drm/i915: Don't read 'HEAD' MMIO register in LRC mode
authorDave Gordon <david.s.gordon@intel.com>
Tue, 18 Nov 2014 20:07:21 +0000 (20:07 +0000)
committerDaniel Vetter <daniel.vetter@ffwll.ch>
Wed, 3 Dec 2014 08:35:11 +0000 (09:35 +0100)
The logical ring code was updating the software ring 'head' value
by reading the hardware 'HEAD' register. In LRC mode, this is not
valid as the hardware is not necessarily executing the same context
that is being processed by the software. Thus reading the h/w HEAD
could put an unrelated (undefined, effectively random) value into
the s/w 'head' -- A Bad Thing for the free space calculations.

Signed-off-by: Dave Gordon <david.s.gordon@intel.com>
Reviewed-by: Deepak S <deepak.s@linux.intel.com>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
drivers/gpu/drm/i915/intel_lrc.c

index 047d8f065b993894dbec9d0d94f269b44f1624d7..03b5c04b6ee15296768256f57e5ac63a72b2e390 100644 (file)
@@ -986,7 +986,6 @@ static int logical_ring_wait_for_space(struct intel_ringbuffer *ringbuf,
        end = jiffies + 60 * HZ;
 
        do {
-               ringbuf->head = I915_READ_HEAD(ring);
                ringbuf->space = intel_ring_space(ringbuf);
                if (ringbuf->space >= bytes) {
                        ret = 0;