Skip to content

Commit

Permalink
drm/i915: Move request list retirement to i915_gem_request.c
Browse files Browse the repository at this point in the history
As the list retirement is now clean of implementation details, we can
move it closer to the request management.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/1470293567-10811-23-git-send-email-chris@chris-wilson.co.uk
  • Loading branch information
Chris Wilson committed Aug 4, 2016
1 parent 909d074 commit 4b8de8e
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 44 deletions.
44 changes: 0 additions & 44 deletions drivers/gpu/drm/i915/i915_gem.c
Original file line number Diff line number Diff line change
Expand Up @@ -2534,50 +2534,6 @@ void i915_gem_reset(struct drm_device *dev)
i915_gem_restore_fences(dev);
}

/**
* This function clears the request list as sequence numbers are passed.
* @engine: engine to retire requests on
*/
void
i915_gem_retire_requests_ring(struct intel_engine_cs *engine)
{
while (!list_empty(&engine->request_list)) {
struct drm_i915_gem_request *request;

request = list_first_entry(&engine->request_list,
struct drm_i915_gem_request,
link);

if (!i915_gem_request_completed(request))
break;

i915_gem_request_retire_upto(request);
}
}

void i915_gem_retire_requests(struct drm_i915_private *dev_priv)
{
struct intel_engine_cs *engine;

lockdep_assert_held(&dev_priv->drm.struct_mutex);

if (dev_priv->gt.active_engines == 0)
return;

GEM_BUG_ON(!dev_priv->gt.awake);

for_each_engine(engine, dev_priv) {
i915_gem_retire_requests_ring(engine);
if (list_empty(&engine->request_list))
dev_priv->gt.active_engines &= ~intel_engine_flag(engine);
}

if (dev_priv->gt.active_engines == 0)
queue_delayed_work(dev_priv->wq,
&dev_priv->gt.idle_work,
msecs_to_jiffies(100));
}

static void
i915_gem_retire_work_handler(struct work_struct *work)
{
Expand Down
35 changes: 35 additions & 0 deletions drivers/gpu/drm/i915/i915_gem_request.c
Original file line number Diff line number Diff line change
Expand Up @@ -731,3 +731,38 @@ int i915_wait_request(struct drm_i915_gem_request *req,

return ret;
}

void i915_gem_retire_requests_ring(struct intel_engine_cs *engine)
{
struct drm_i915_gem_request *request, *next;

list_for_each_entry_safe(request, next, &engine->request_list, link) {
if (!i915_gem_request_completed(request))
break;

i915_gem_request_retire(request);
}
}

void i915_gem_retire_requests(struct drm_i915_private *dev_priv)
{
struct intel_engine_cs *engine;

lockdep_assert_held(&dev_priv->drm.struct_mutex);

if (dev_priv->gt.active_engines == 0)
return;

GEM_BUG_ON(!dev_priv->gt.awake);

for_each_engine(engine, dev_priv) {
i915_gem_retire_requests_ring(engine);
if (list_empty(&engine->request_list))
dev_priv->gt.active_engines &= ~intel_engine_flag(engine);
}

if (dev_priv->gt.active_engines == 0)
queue_delayed_work(dev_priv->wq,
&dev_priv->gt.idle_work,
msecs_to_jiffies(100));
}

0 comments on commit 4b8de8e

Please sign in to comment.