summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/i915/i915_gem.c
diff options
context:
space:
mode:
authorChris Wilson2012-09-04 22:02:58 +0200
committerDaniel Vetter2012-09-20 14:23:10 +0200
commit2f745ad3d3ce96cb72d3981570d9e9988442bce8 (patch)
treec885743dde9b8c1862490e97ff8f086ad4055a30 /drivers/gpu/drm/i915/i915_gem.c
parentdrm/i915: update dpms property in set_mode (diff)
downloadkernel-qcow2-linux-2f745ad3d3ce96cb72d3981570d9e9988442bce8.tar.gz
kernel-qcow2-linux-2f745ad3d3ce96cb72d3981570d9e9988442bce8.tar.xz
kernel-qcow2-linux-2f745ad3d3ce96cb72d3981570d9e9988442bce8.zip
drm/i915: Convert the dmabuf object to use the new i915_gem_object_ops
By providing a callback for when we need to bind the pages, and then release them again later, we can shorten the amount of time we hold the foreign pages mapped and pinned, and importantly the dmabuf objects then behave as any other normal object with respect to the shrinker and memory management. Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Reviewed-by: Ben Widawsky <ben@bwidawsk.net> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Diffstat (limited to 'drivers/gpu/drm/i915/i915_gem.c')
-rw-r--r--drivers/gpu/drm/i915/i915_gem.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
index 8f001fa155a1..61c3640188bb 100644
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@ -1692,7 +1692,7 @@ i915_gem_object_put_pages(struct drm_i915_gem_object *obj)
{
const struct drm_i915_gem_object_ops *ops = obj->ops;
- if (obj->sg_table || obj->pages == NULL)
+ if (obj->pages == NULL)
return 0;
BUG_ON(obj->gtt_space);
@@ -1845,7 +1845,7 @@ i915_gem_object_get_pages(struct drm_i915_gem_object *obj)
const struct drm_i915_gem_object_ops *ops = obj->ops;
int ret;
- if (obj->sg_table || obj->pages)
+ if (obj->pages)
return 0;
BUG_ON(obj->pages_pin_count);
@@ -3738,9 +3738,6 @@ void i915_gem_free_object(struct drm_gem_object *gem_obj)
trace_i915_gem_object_destroy(obj);
- if (gem_obj->import_attach)
- drm_prime_gem_destroy(gem_obj, obj->sg_table);
-
if (obj->phys_obj)
i915_gem_detach_phys_object(dev, obj);
@@ -3762,6 +3759,9 @@ void i915_gem_free_object(struct drm_gem_object *gem_obj)
BUG_ON(obj->pages);
+ if (obj->base.import_attach)
+ drm_prime_gem_destroy(&obj->base, NULL);
+
drm_gem_object_release(&obj->base);
i915_gem_info_remove_obj(dev_priv, obj->base.size);