aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2013-01-08 05:53:09 -0500
committerDaniel Vetter <daniel.vetter@ffwll.ch>2013-01-17 16:07:59 -0500
commit43e28f092b2fa4ebc46bdc210134a80610815785 (patch)
tree1dceb3f656f7c10519d74419f62b849d1bcbf791
parentdd624afd533bdc87b8c10835515a0c8b2b9868b1 (diff)
drm/i915: Bail if we attempt to allocate pages for a purged object
Move the existing checking inside bind_to_gtt() to the more appropriate layer in order to prevent recreation of the pages after they have been explicitly truncated. Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Reviewed-by: Imre Deak <imre.deak@intel.com> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
-rw-r--r--drivers/gpu/drm/i915/i915_gem.c12
1 files changed, 6 insertions, 6 deletions
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
index 9d33fb3f8d42..a2bb18914329 100644
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@ -1828,6 +1828,11 @@ i915_gem_object_get_pages(struct drm_i915_gem_object *obj)
1828 if (obj->pages) 1828 if (obj->pages)
1829 return 0; 1829 return 0;
1830 1830
1831 if (obj->madv != I915_MADV_WILLNEED) {
1832 DRM_ERROR("Attempting to obtain a purgeable object\n");
1833 return -EINVAL;
1834 }
1835
1831 BUG_ON(obj->pages_pin_count); 1836 BUG_ON(obj->pages_pin_count);
1832 1837
1833 ret = ops->get_pages(obj); 1838 ret = ops->get_pages(obj);
@@ -2440,7 +2445,7 @@ int
2440i915_gem_object_unbind(struct drm_i915_gem_object *obj) 2445i915_gem_object_unbind(struct drm_i915_gem_object *obj)
2441{ 2446{
2442 drm_i915_private_t *dev_priv = obj->base.dev->dev_private; 2447 drm_i915_private_t *dev_priv = obj->base.dev->dev_private;
2443 int ret = 0; 2448 int ret;
2444 2449
2445 if (obj->gtt_space == NULL) 2450 if (obj->gtt_space == NULL)
2446 return 0; 2451 return 0;
@@ -2880,11 +2885,6 @@ i915_gem_object_bind_to_gtt(struct drm_i915_gem_object *obj,
2880 bool mappable, fenceable; 2885 bool mappable, fenceable;
2881 int ret; 2886 int ret;
2882 2887
2883 if (obj->madv != I915_MADV_WILLNEED) {
2884 DRM_ERROR("Attempting to bind a purgeable object\n");
2885 return -EINVAL;
2886 }
2887
2888 fence_size = i915_gem_get_gtt_size(dev, 2888 fence_size = i915_gem_get_gtt_size(dev,
2889 obj->base.size, 2889 obj->base.size,
2890 obj->tiling_mode); 2890 obj->tiling_mode);