diff options
author | Chris Wilson <chris@chris-wilson.co.uk> | 2013-01-08 05:53:09 -0500 |
---|---|---|
committer | Daniel Vetter <daniel.vetter@ffwll.ch> | 2013-01-17 16:07:59 -0500 |
commit | 43e28f092b2fa4ebc46bdc210134a80610815785 (patch) | |
tree | 1dceb3f656f7c10519d74419f62b849d1bcbf791 | |
parent | dd624afd533bdc87b8c10835515a0c8b2b9868b1 (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.c | 12 |
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 | |||
2440 | i915_gem_object_unbind(struct drm_i915_gem_object *obj) | 2445 | i915_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); |