| From ac0c6b5ad3b3b513e1057806d4b7627fcc0ecc27 Mon Sep 17 00:00:00 2001 |
| From: Chris Wilson <chris@chris-wilson.co.uk> |
| Date: Thu, 27 May 2010 13:18:18 +0100 |
| Subject: drm/i915: Rebind bo if currently bound with incorrect alignment. |
| |
| From: Chris Wilson <chris@chris-wilson.co.uk> |
| |
| commit ac0c6b5ad3b3b513e1057806d4b7627fcc0ecc27 upstream. |
| |
| Whilst pinning the buffer, check that that its current alignment |
| matches the requested alignment. If it does not, rebind. |
| |
| This should clear up any final render errors whilst resuming, |
| for reference: |
| |
| Bug 27070 - [i915] Page table errors with empty ringbuffer |
| https://bugs.freedesktop.org/show_bug.cgi?id=27070 |
| |
| Bug 15502 - render error detected, EIR: 0x00000010 |
| https://bugzilla.kernel.org/show_bug.cgi?id=15502 |
| |
| Bug 13844 - i915 error: "render error detected" |
| https://bugzilla.kernel.org/show_bug.cgi?id=13844 |
| |
| Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> |
| Signed-off-by: Eric Anholt <eric@anholt.net> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> |
| |
| --- |
| drivers/gpu/drm/i915/i915_gem.c | 11 +++++++++++ |
| 1 file changed, 11 insertions(+) |
| |
| --- a/drivers/gpu/drm/i915/i915_gem.c |
| +++ b/drivers/gpu/drm/i915/i915_gem.c |
| @@ -3947,6 +3947,17 @@ i915_gem_object_pin(struct drm_gem_objec |
| int ret; |
| |
| i915_verify_inactive(dev, __FILE__, __LINE__); |
| + |
| + if (obj_priv->gtt_space != NULL) { |
| + if (alignment == 0) |
| + alignment = i915_gem_get_gtt_alignment(obj); |
| + if (obj_priv->gtt_offset & (alignment - 1)) { |
| + ret = i915_gem_object_unbind(obj); |
| + if (ret) |
| + return ret; |
| + } |
| + } |
| + |
| if (obj_priv->gtt_space == NULL) { |
| ret = i915_gem_object_bind_to_gtt(obj, alignment); |
| if (ret) |