Comment 57 for bug 1339939

Revision history for this message
In , Chris Wilson (ickle) wrote :

No, it is just me getting confused between HEAD and START. Ok, I wonder if this is the missing piece of magic (on top of the current bug branch):

diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.c b/drivers/gpu/drm/i915/intel_ringbuffer.c
index b46b3e928a7f..12c59e945f8e 100644
--- a/drivers/gpu/drm/i915/intel_ringbuffer.c
+++ b/drivers/gpu/drm/i915/intel_ringbuffer.c
@@ -530,15 +530,14 @@ static int init_ring_common(struct intel_ring_buffer *ring)
                        ((ring->size - PAGE_SIZE) & RING_NR_PAGES)
                        | RING_VALID);

- if (I915_READ_START(ring) != i915_gem_obj_ggtt_offset(obj)) {
+ if (I915_READ_HEAD(ring)) {
                printk(KERN_ERR
                       "%s initialization failed"
- " [%08x != %08x], fudging\n",
+ " [head now %08x], fudging\n",
                       ring->name,
- I915_READ_START(ring),
- i915_gem_obj_ggtt_offset(obj));
- I915_WRITE_START(ring, i915_gem_obj_ggtt_offset(obj));
- POSTING_READ(ring);
+ I915_READ_HEAD(ring));
+ I915_WRITE_HEAD(ring, 0);
+ (void)I915_READ_HEAD(ring);
        }

        iowrite32(MI_NOOP, ring->virtual_start + 0);