aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2010-07-23 18:18:49 -0400
committerEric Anholt <eric@anholt.net>2010-08-01 22:52:57 -0400
commitb09a1feca65764311f8a3e14befb52b98d705f0a (patch)
tree304b9bcb257b21bec30244e207e47d95035148bd /drivers
parentb9421ae8f30958deea98d71477b4a77a066856b4 (diff)
drm/i915: Refactor i915_gem_retire_requests()
Combine the iteration over active render rings into a common function. This is in preparation for reusing the idle function to also retire deferred free requests. Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Signed-off-by: Eric Anholt <eric@anholt.net>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/gpu/drm/i915/i915_drv.c2
-rw-r--r--drivers/gpu/drm/i915/i915_drv.h3
-rw-r--r--drivers/gpu/drm/i915/i915_gem.c39
3 files changed, 20 insertions, 24 deletions
diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c
index 119692f3ce9d..5044f653e8ea 100644
--- a/drivers/gpu/drm/i915/i915_drv.c
+++ b/drivers/gpu/drm/i915/i915_drv.c
@@ -340,7 +340,7 @@ int i965_reset(struct drm_device *dev, u8 flags)
340 /* 340 /*
341 * Clear request list 341 * Clear request list
342 */ 342 */
343 i915_gem_retire_requests(dev, &dev_priv->render_ring); 343 i915_gem_retire_requests(dev);
344 344
345 if (need_display) 345 if (need_display)
346 i915_save_display(dev); 346 i915_save_display(dev);
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index 46a544abbd6d..a27780b7aef2 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -960,8 +960,7 @@ uint32_t i915_get_gem_seqno(struct drm_device *dev,
960bool i915_seqno_passed(uint32_t seq1, uint32_t seq2); 960bool i915_seqno_passed(uint32_t seq1, uint32_t seq2);
961int i915_gem_object_get_fence_reg(struct drm_gem_object *obj); 961int i915_gem_object_get_fence_reg(struct drm_gem_object *obj);
962int i915_gem_object_put_fence_reg(struct drm_gem_object *obj); 962int i915_gem_object_put_fence_reg(struct drm_gem_object *obj);
963void i915_gem_retire_requests(struct drm_device *dev, 963void i915_gem_retire_requests(struct drm_device *dev);
964 struct intel_ring_buffer *ring);
965void i915_gem_retire_work_handler(struct work_struct *work); 964void i915_gem_retire_work_handler(struct work_struct *work);
966void i915_gem_clflush_object(struct drm_gem_object *obj); 965void i915_gem_clflush_object(struct drm_gem_object *obj);
967int i915_gem_object_set_domain(struct drm_gem_object *obj, 966int i915_gem_object_set_domain(struct drm_gem_object *obj,
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
index b1069dc09611..138ca6ea5ef7 100644
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@ -1709,9 +1709,9 @@ i915_get_gem_seqno(struct drm_device *dev,
1709/** 1709/**
1710 * This function clears the request list as sequence numbers are passed. 1710 * This function clears the request list as sequence numbers are passed.
1711 */ 1711 */
1712void 1712static void
1713i915_gem_retire_requests(struct drm_device *dev, 1713i915_gem_retire_requests_ring(struct drm_device *dev,
1714 struct intel_ring_buffer *ring) 1714 struct intel_ring_buffer *ring)
1715{ 1715{
1716 drm_i915_private_t *dev_priv = dev->dev_private; 1716 drm_i915_private_t *dev_priv = dev->dev_private;
1717 uint32_t seqno; 1717 uint32_t seqno;
@@ -1751,6 +1751,16 @@ i915_gem_retire_requests(struct drm_device *dev,
1751} 1751}
1752 1752
1753void 1753void
1754i915_gem_retire_requests(struct drm_device *dev)
1755{
1756 drm_i915_private_t *dev_priv = dev->dev_private;
1757
1758 i915_gem_retire_requests_ring(dev, &dev_priv->render_ring);
1759 if (HAS_BSD(dev))
1760 i915_gem_retire_requests_ring(dev, &dev_priv->bsd_ring);
1761}
1762
1763void
1754i915_gem_retire_work_handler(struct work_struct *work) 1764i915_gem_retire_work_handler(struct work_struct *work)
1755{ 1765{
1756 drm_i915_private_t *dev_priv; 1766 drm_i915_private_t *dev_priv;
@@ -1761,10 +1771,7 @@ i915_gem_retire_work_handler(struct work_struct *work)
1761 dev = dev_priv->dev; 1771 dev = dev_priv->dev;
1762 1772
1763 mutex_lock(&dev->struct_mutex); 1773 mutex_lock(&dev->struct_mutex);
1764 i915_gem_retire_requests(dev, &dev_priv->render_ring); 1774 i915_gem_retire_requests(dev);
1765
1766 if (HAS_BSD(dev))
1767 i915_gem_retire_requests(dev, &dev_priv->bsd_ring);
1768 1775
1769 if (!dev_priv->mm.suspended && 1776 if (!dev_priv->mm.suspended &&
1770 (!list_empty(&dev_priv->render_ring.request_list) || 1777 (!list_empty(&dev_priv->render_ring.request_list) ||
@@ -1832,7 +1839,7 @@ i915_do_wait_request(struct drm_device *dev, uint32_t seqno,
1832 * a separate wait queue to handle that. 1839 * a separate wait queue to handle that.
1833 */ 1840 */
1834 if (ret == 0) 1841 if (ret == 0)
1835 i915_gem_retire_requests(dev, ring); 1842 i915_gem_retire_requests_ring(dev, ring);
1836 1843
1837 return ret; 1844 return ret;
1838} 1845}
@@ -2107,10 +2114,7 @@ i915_gem_evict_something(struct drm_device *dev, int min_size)
2107 struct intel_ring_buffer *render_ring = &dev_priv->render_ring; 2114 struct intel_ring_buffer *render_ring = &dev_priv->render_ring;
2108 struct intel_ring_buffer *bsd_ring = &dev_priv->bsd_ring; 2115 struct intel_ring_buffer *bsd_ring = &dev_priv->bsd_ring;
2109 for (;;) { 2116 for (;;) {
2110 i915_gem_retire_requests(dev, render_ring); 2117 i915_gem_retire_requests(dev);
2111
2112 if (HAS_BSD(dev))
2113 i915_gem_retire_requests(dev, bsd_ring);
2114 2118
2115 /* If there's an inactive buffer available now, grab it 2119 /* If there's an inactive buffer available now, grab it
2116 * and be done. 2120 * and be done.
@@ -4330,7 +4334,6 @@ i915_gem_busy_ioctl(struct drm_device *dev, void *data,
4330 struct drm_i915_gem_busy *args = data; 4334 struct drm_i915_gem_busy *args = data;
4331 struct drm_gem_object *obj; 4335 struct drm_gem_object *obj;
4332 struct drm_i915_gem_object *obj_priv; 4336 struct drm_i915_gem_object *obj_priv;
4333 drm_i915_private_t *dev_priv = dev->dev_private;
4334 4337
4335 obj = drm_gem_object_lookup(dev, file_priv, args->handle); 4338 obj = drm_gem_object_lookup(dev, file_priv, args->handle);
4336 if (obj == NULL) { 4339 if (obj == NULL) {
@@ -4345,10 +4348,7 @@ i915_gem_busy_ioctl(struct drm_device *dev, void *data,
4345 * actually unmasked, and our working set ends up being larger than 4348 * actually unmasked, and our working set ends up being larger than
4346 * required. 4349 * required.
4347 */ 4350 */
4348 i915_gem_retire_requests(dev, &dev_priv->render_ring); 4351 i915_gem_retire_requests(dev);
4349
4350 if (HAS_BSD(dev))
4351 i915_gem_retire_requests(dev, &dev_priv->bsd_ring);
4352 4352
4353 obj_priv = to_intel_bo(obj); 4353 obj_priv = to_intel_bo(obj);
4354 /* Don't count being on the flushing list against the object being 4354 /* Don't count being on the flushing list against the object being
@@ -5054,10 +5054,7 @@ rescan:
5054 continue; 5054 continue;
5055 5055
5056 spin_unlock(&shrink_list_lock); 5056 spin_unlock(&shrink_list_lock);
5057 i915_gem_retire_requests(dev, &dev_priv->render_ring); 5057 i915_gem_retire_requests(dev);
5058
5059 if (HAS_BSD(dev))
5060 i915_gem_retire_requests(dev, &dev_priv->bsd_ring);
5061 5058
5062 list_for_each_entry_safe(obj_priv, next_obj, 5059 list_for_each_entry_safe(obj_priv, next_obj,
5063 &dev_priv->mm.inactive_list, 5060 &dev_priv->mm.inactive_list,