This patch doesn't apply to the .36 stable tree If someone wants it applied there, please email the backport to [email protected]
thanks, greg k-h > commit: 08deebf98783d3de553eed2c9b6b8dcc7e168567 > From: Chris Wilson <[email protected]> > Date: Fri, 5 Nov 2010 08:56:38 +0000 > Subject: [PATCH] drm/i915/ringbuffer: Use the HEAD auto-reporting mechanism > > My Sandybridge only reports 0 for the ring buffer registers, causing it > to hang as soon as we exhaust the available ring. As a workaround, take > advantage of our huge ring buffers and use the auto-reporting mechanism > to update the status page with the HEAD location every 64 KiB. > > Cherry-picked from 6aa56062eaba67adfb247cded244fd877329588d. > > Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=31404 > Tested-by: Zhao Jian <[email protected]> > Cc: [email protected] > Signed-off-by: Chris Wilson <[email protected]> > --- > drivers/gpu/drm/i915/intel_ringbuffer.c | 13 ++++++++++++- > 1 files changed, 12 insertions(+), 1 deletions(-) > > diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.c > b/drivers/gpu/drm/i915/intel_ringbuffer.c > index 7c1f3ff..b83306f 100644 > --- a/drivers/gpu/drm/i915/intel_ringbuffer.c > +++ b/drivers/gpu/drm/i915/intel_ringbuffer.c > @@ -177,7 +177,7 @@ static int init_ring_common(struct drm_device *dev, > > I915_WRITE_CTL(ring, > ((ring->gem_object->size - PAGE_SIZE) & RING_NR_PAGES) > - | RING_NO_REPORT | RING_VALID); > + | RING_REPORT_64K | RING_VALID); > > head = I915_READ_HEAD(ring) & HEAD_ADDR; > /* If the head is still not zero, the ring is dead */ > @@ -692,6 +692,17 @@ int intel_wait_ring_buffer(struct drm_device *dev, > { > unsigned long end; > drm_i915_private_t *dev_priv = dev->dev_private; > + u32 head; > + > + head = intel_read_status_page(ring, 4); > + if (head) { > + ring->head = head & HEAD_ADDR; > + ring->space = ring->head - (ring->tail + 8); > + if (ring->space < 0) > + ring->space += ring->size; > + if (ring->space >= n) > + return 0; > + } > > trace_i915_ring_wait_begin (dev); > end = jiffies + 3 * HZ; > > _______________________________________________ > stable mailing list > [email protected] > http://linux.kernel.org/mailman/listinfo/stable _______________________________________________ stable mailing list [email protected] http://linux.kernel.org/mailman/listinfo/stable
