mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-23 15:11:16 +00:00
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>
This commit is contained in:
parent
b9421ae8f3
commit
b09a1feca6
3 changed files with 20 additions and 24 deletions
|
@ -340,7 +340,7 @@ int i965_reset(struct drm_device *dev, u8 flags)
|
||||||
/*
|
/*
|
||||||
* Clear request list
|
* Clear request list
|
||||||
*/
|
*/
|
||||||
i915_gem_retire_requests(dev, &dev_priv->render_ring);
|
i915_gem_retire_requests(dev);
|
||||||
|
|
||||||
if (need_display)
|
if (need_display)
|
||||||
i915_save_display(dev);
|
i915_save_display(dev);
|
||||||
|
|
|
@ -960,8 +960,7 @@ uint32_t i915_get_gem_seqno(struct drm_device *dev,
|
||||||
bool i915_seqno_passed(uint32_t seq1, uint32_t seq2);
|
bool i915_seqno_passed(uint32_t seq1, uint32_t seq2);
|
||||||
int i915_gem_object_get_fence_reg(struct drm_gem_object *obj);
|
int i915_gem_object_get_fence_reg(struct drm_gem_object *obj);
|
||||||
int i915_gem_object_put_fence_reg(struct drm_gem_object *obj);
|
int i915_gem_object_put_fence_reg(struct drm_gem_object *obj);
|
||||||
void i915_gem_retire_requests(struct drm_device *dev,
|
void i915_gem_retire_requests(struct drm_device *dev);
|
||||||
struct intel_ring_buffer *ring);
|
|
||||||
void i915_gem_retire_work_handler(struct work_struct *work);
|
void i915_gem_retire_work_handler(struct work_struct *work);
|
||||||
void i915_gem_clflush_object(struct drm_gem_object *obj);
|
void i915_gem_clflush_object(struct drm_gem_object *obj);
|
||||||
int i915_gem_object_set_domain(struct drm_gem_object *obj,
|
int i915_gem_object_set_domain(struct drm_gem_object *obj,
|
||||||
|
|
|
@ -1709,8 +1709,8 @@ i915_get_gem_seqno(struct drm_device *dev,
|
||||||
/**
|
/**
|
||||||
* This function clears the request list as sequence numbers are passed.
|
* This function clears the request list as sequence numbers are passed.
|
||||||
*/
|
*/
|
||||||
void
|
static void
|
||||||
i915_gem_retire_requests(struct drm_device *dev,
|
i915_gem_retire_requests_ring(struct drm_device *dev,
|
||||||
struct intel_ring_buffer *ring)
|
struct intel_ring_buffer *ring)
|
||||||
{
|
{
|
||||||
drm_i915_private_t *dev_priv = dev->dev_private;
|
drm_i915_private_t *dev_priv = dev->dev_private;
|
||||||
|
@ -1750,6 +1750,16 @@ i915_gem_retire_requests(struct drm_device *dev,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
i915_gem_retire_requests(struct drm_device *dev)
|
||||||
|
{
|
||||||
|
drm_i915_private_t *dev_priv = dev->dev_private;
|
||||||
|
|
||||||
|
i915_gem_retire_requests_ring(dev, &dev_priv->render_ring);
|
||||||
|
if (HAS_BSD(dev))
|
||||||
|
i915_gem_retire_requests_ring(dev, &dev_priv->bsd_ring);
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
i915_gem_retire_work_handler(struct work_struct *work)
|
i915_gem_retire_work_handler(struct work_struct *work)
|
||||||
{
|
{
|
||||||
|
@ -1761,10 +1771,7 @@ i915_gem_retire_work_handler(struct work_struct *work)
|
||||||
dev = dev_priv->dev;
|
dev = dev_priv->dev;
|
||||||
|
|
||||||
mutex_lock(&dev->struct_mutex);
|
mutex_lock(&dev->struct_mutex);
|
||||||
i915_gem_retire_requests(dev, &dev_priv->render_ring);
|
i915_gem_retire_requests(dev);
|
||||||
|
|
||||||
if (HAS_BSD(dev))
|
|
||||||
i915_gem_retire_requests(dev, &dev_priv->bsd_ring);
|
|
||||||
|
|
||||||
if (!dev_priv->mm.suspended &&
|
if (!dev_priv->mm.suspended &&
|
||||||
(!list_empty(&dev_priv->render_ring.request_list) ||
|
(!list_empty(&dev_priv->render_ring.request_list) ||
|
||||||
|
@ -1832,7 +1839,7 @@ i915_do_wait_request(struct drm_device *dev, uint32_t seqno,
|
||||||
* a separate wait queue to handle that.
|
* a separate wait queue to handle that.
|
||||||
*/
|
*/
|
||||||
if (ret == 0)
|
if (ret == 0)
|
||||||
i915_gem_retire_requests(dev, ring);
|
i915_gem_retire_requests_ring(dev, ring);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -2107,10 +2114,7 @@ i915_gem_evict_something(struct drm_device *dev, int min_size)
|
||||||
struct intel_ring_buffer *render_ring = &dev_priv->render_ring;
|
struct intel_ring_buffer *render_ring = &dev_priv->render_ring;
|
||||||
struct intel_ring_buffer *bsd_ring = &dev_priv->bsd_ring;
|
struct intel_ring_buffer *bsd_ring = &dev_priv->bsd_ring;
|
||||||
for (;;) {
|
for (;;) {
|
||||||
i915_gem_retire_requests(dev, render_ring);
|
i915_gem_retire_requests(dev);
|
||||||
|
|
||||||
if (HAS_BSD(dev))
|
|
||||||
i915_gem_retire_requests(dev, bsd_ring);
|
|
||||||
|
|
||||||
/* If there's an inactive buffer available now, grab it
|
/* If there's an inactive buffer available now, grab it
|
||||||
* and be done.
|
* and be done.
|
||||||
|
@ -4330,7 +4334,6 @@ i915_gem_busy_ioctl(struct drm_device *dev, void *data,
|
||||||
struct drm_i915_gem_busy *args = data;
|
struct drm_i915_gem_busy *args = data;
|
||||||
struct drm_gem_object *obj;
|
struct drm_gem_object *obj;
|
||||||
struct drm_i915_gem_object *obj_priv;
|
struct drm_i915_gem_object *obj_priv;
|
||||||
drm_i915_private_t *dev_priv = dev->dev_private;
|
|
||||||
|
|
||||||
obj = drm_gem_object_lookup(dev, file_priv, args->handle);
|
obj = drm_gem_object_lookup(dev, file_priv, args->handle);
|
||||||
if (obj == NULL) {
|
if (obj == NULL) {
|
||||||
|
@ -4345,10 +4348,7 @@ i915_gem_busy_ioctl(struct drm_device *dev, void *data,
|
||||||
* actually unmasked, and our working set ends up being larger than
|
* actually unmasked, and our working set ends up being larger than
|
||||||
* required.
|
* required.
|
||||||
*/
|
*/
|
||||||
i915_gem_retire_requests(dev, &dev_priv->render_ring);
|
i915_gem_retire_requests(dev);
|
||||||
|
|
||||||
if (HAS_BSD(dev))
|
|
||||||
i915_gem_retire_requests(dev, &dev_priv->bsd_ring);
|
|
||||||
|
|
||||||
obj_priv = to_intel_bo(obj);
|
obj_priv = to_intel_bo(obj);
|
||||||
/* Don't count being on the flushing list against the object being
|
/* Don't count being on the flushing list against the object being
|
||||||
|
@ -5054,10 +5054,7 @@ rescan:
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
spin_unlock(&shrink_list_lock);
|
spin_unlock(&shrink_list_lock);
|
||||||
i915_gem_retire_requests(dev, &dev_priv->render_ring);
|
i915_gem_retire_requests(dev);
|
||||||
|
|
||||||
if (HAS_BSD(dev))
|
|
||||||
i915_gem_retire_requests(dev, &dev_priv->bsd_ring);
|
|
||||||
|
|
||||||
list_for_each_entry_safe(obj_priv, next_obj,
|
list_for_each_entry_safe(obj_priv, next_obj,
|
||||||
&dev_priv->mm.inactive_list,
|
&dev_priv->mm.inactive_list,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue