aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/i915/i915_gem.c
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2014-06-16 03:57:44 -0400
committerDaniel Vetter <daniel.vetter@ffwll.ch>2014-06-16 13:52:20 -0400
commit6254b2042c794a8c2e14dc49b575a0708c823f88 (patch)
tree6c6f5517f445cb153f6622fd62170e9142d574f3 /drivers/gpu/drm/i915/i915_gem.c
parent868d665b43473e230d560d5186535270a3d57a19 (diff)
drm/i915: Simplify i915_gem_release_all_mmaps()
An object can only have an active gtt mapping if it is currently bound into the global gtt. Therefore we can simply walk the list of all bound objects and check the flag upon those for an active gtt mapping. From commit 48018a57a8f5900e7e53ffaa0adeb784095accfb Author: Paulo Zanoni <paulo.r.zanoni@intel.com> Date: Fri Dec 13 15:22:31 2013 -0200 drm/i915: release the GTT mmaps when going into D3 Also note that the WARN is inappropriate for this function as GPU activity is orthogonal to GTT mmap status. Rather it is the caller that relies upon this condition and so it should assert that the GPU is idle itself. References: https://bugs.freedesktop.org/show_bug.cgi?id=80081 Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Cc: Paulo Zanoni <paulo.r.zanoni@intel.com> Cc: Rodrigo Vivi <rodrigo.vivi@gmail.com> Cc: Daniel Vetter <daniel.vetter@ffwll.ch> Reviewed-by: Paulo Zanoni <paulo.r.zanoni@intel.com> Tested-by: Paulo Zanoni <paulo.r.zanoni@intel.com> 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.c25
1 files changed, 9 insertions, 16 deletions
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
index 1794a041c13c..234aa1ca2eb8 100644
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@ -1632,22 +1632,6 @@ out:
1632 return ret; 1632 return ret;
1633} 1633}
1634 1634
1635void i915_gem_release_all_mmaps(struct drm_i915_private *dev_priv)
1636{
1637 struct i915_vma *vma;
1638
1639 /*
1640 * Only the global gtt is relevant for gtt memory mappings, so restrict
1641 * list traversal to objects bound into the global address space. Note
1642 * that the active list should be empty, but better safe than sorry.
1643 */
1644 WARN_ON(!list_empty(&dev_priv->gtt.base.active_list));
1645 list_for_each_entry(vma, &dev_priv->gtt.base.active_list, mm_list)
1646 i915_gem_release_mmap(vma->obj);
1647 list_for_each_entry(vma, &dev_priv->gtt.base.inactive_list, mm_list)
1648 i915_gem_release_mmap(vma->obj);
1649}
1650
1651/** 1635/**
1652 * i915_gem_release_mmap - remove physical page mappings 1636 * i915_gem_release_mmap - remove physical page mappings
1653 * @obj: obj in question 1637 * @obj: obj in question
@@ -1673,6 +1657,15 @@ i915_gem_release_mmap(struct drm_i915_gem_object *obj)
1673 obj->fault_mappable = false; 1657 obj->fault_mappable = false;
1674} 1658}
1675 1659
1660void
1661i915_gem_release_all_mmaps(struct drm_i915_private *dev_priv)
1662{
1663 struct drm_i915_gem_object *obj;
1664
1665 list_for_each_entry(obj, &dev_priv->mm.bound_list, global_list)
1666 i915_gem_release_mmap(obj);
1667}
1668
1676uint32_t 1669uint32_t
1677i915_gem_get_gtt_size(struct drm_device *dev, uint32_t size, int tiling_mode) 1670i915_gem_get_gtt_size(struct drm_device *dev, uint32_t size, int tiling_mode)
1678{ 1671{